-
JSP 액션태그jsp(Model1) 2020. 5. 15. 22:38
액션 태그명 액션 태그 설명 include <jsp:include> 다른 페이지의 실행 결과를 현재의 페이지에 포함시킬 때 사용 forward <jsp:forward> 페이지 사이의 제어를 이동시킬 때 사용 plug-in <jsp:plug-in> 웹 브라우저에서 자바 애플릿을 실행시킬 때 사용 useBean <jsp:useBean> 자바빈을 JSP페이지에서 사용할 때 사용 setProperty <jsp:setProperty> 프로퍼티의 값을 세팅할 때 사용 getProperty <jsp:getProperty> 프로퍼티의 값을 얻어낼 때 사용 *include : 페이지 디렉티브의 include 지시어랑은 비슷하지만 차이점이 있다.
<jsp:include page="Top.jsp"> <jsp:param value="aaa" name="id"/> </jsp:include>
이런식으로 <jsp:include>액션태그 안에 <jsp:param>액션태그를 써서 값을 넘겨줄 수가 있다.
받는 쪽은
<%=request.getParameter("id") %>
이런 식으로 받아주면 된다.
페이지 디렉티브의 include 지시어로
<%@ include file="top.jsp?id=aaa" %>이런식으로 파라미터를 넘기면 되지 않겠냐고 할 수도 있겠지만 컴파일 오류가 발생한다.
액션태그로 값을 넘겨주는 게 되는 이유가 뭐냐면 액션태그를 사용하면 각각 따로 실행이 된다. 액션태그를 사용했을 때는 먼저 jsp액션파일에 연결된 페이지가 컴파일이 되서, 그 결과가 통합 페이지에 보여지게 된다. 지시어를 사용하게 되면 한꺼번에 페이지로 다 들어온 다음 그 결과가 한번에 컴파일 된다.
포워드 : 현재 페이지에서 다른페이지로 보내줄 때(흐름제어) 쓴다. jsp페이지 내장객체인 response.redirect()와의 차이점은 response.redirect()는 단순히 페이지만 이동이 가능하다. 예를 들어, 로그인을 하고 로그인 정보를 response.redirect()한페이지에서 보여주려면 이전 주소창(url)에서 로그인 정보를 넣어서 보내줘야한다. 포워드는 그렇게 할 필요 없이 계속 데이터가 살아있다. 또한 포워드로 넘겨주게 되면 url 주소는 포워드를 해준 주소지만 나오는 화면은 포워드에서 연결해준 화면이 나오게 된다.
포워드는 ResponseSendRedirect를 ResponseSendProc에 포함시켜서 화면에 결과를 출력한다.
*useBean : Bean을 사용하겠다. jsp에서 빈이란 자바 빈을 의미한다. 자바 빈이란?https://pjh3749.tistory.com/75참조
VO클래스를 떠올리면 될 듯 하다.
빈을 사용한 회원가입 페이지 jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Insert title here</title> </head> <body> <center> <h2>회원 가입</h2> <form action = "MemberJoinProc.jsp" method = "post"> <table width = "500" border = "1"> <tr height="50"> <td width="150" align="center">아이디</td> <td width="350" align="center"> <input type="text" name="id" size="40" placeholder="아이디를 입력해주세요"> </td> </tr> <tr height="50"> <td width="150" align="center">패스워드</td> <td width="350" align="center"> <input type="password" name="pass" size="40"> </td> </tr> </tr> <tr height="50"> <td width="150" align="center">이메일</td> <td width="350" align="center"> <input type="email" name="email" size="40"> </td> </tr> <tr height="50"> <td width="150" align="center">전화번호</td> <td width="350" align="center"> <input type="tel" name="tel" size="40"> </td> </tr> <tr height="50"> <td width="150" align="center">주소</td> <td width="350" align="center"> <input type="text" name="address" size="40"> </td> </tr> <tr height="50"> <td colspan="2" align="center"> <input type="submit" value="가입"> </td> </tr> </table> </body> </html>
빈을 사용한 회원가입 처리 페이지 jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <!DOCTYPE html> <html> <head> <meta charset="EUC-KR"> <title>Insert title here</title> </head> <body> <h3>회원정보 보기</h3> <% request.setCharacterEncoding("euc-kr"); %> <!-- request로 넘어온 데이터를 자바 빈즈랑 맵핑 시켜주는 useBean --> <jsp:useBean id="mbean" class="bean.MemberBean"> <jsp:setProperty name="mbean" property="id"/> <jsp:setProperty name="mbean" property="*"/><!-- *를 쓰면 모두 맵핑시켜주시오 --> </jsp:useBean> <!-- 여기서 id가 bean클래스를 지칭하는 이름(레퍼런스 명) 여기서 해준 것은 MemberBean mbean = new MemberBean(); 이 의미와 같음. 즉 객체생성을 해준 것 --> <!-- jsp 내용을 자바빈 클래스(MemberBean의미)에 데이터를 맵핑 --> 당신의 아이디는 <jsp:getProperty property="id" name="mbean"/> 당신의 패스는 <jsp:getProperty property="pass" name="mbean"/> 당신의 이메일은 <jsp:getProperty property="email" name="mbean"/> 당신의 이메일은 <%=mbean.getEmail() %><!-- 이렇게도 써줄 수 있다. --> </body> </html>
빈(빈은 자바 클래스이기 때문에 JavaResource/src에 패키지를 만들어주고 그 패키지 안에 만들어줘야한다.
package bean; public class MemberBean { private String id; private String pass; private String email; private String tel; private String address; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "MemberBean [id=" + id + ", pass=" + pass + ", email=" + email + ", tel=" + tel + ", address=" + address + "]"; } }
*오늘 알게된 것 : jsp액션태그 사이에 주석 값을 넣으면 제대로 작동을 안한다.(에러가 발생한다).예를들어
액션태그들의 공통점은 자기가 있는 페이지로 끌고 들어와서 사용을 하는 것 같다.
<jsp:forward page="ResponseRedirect.jsp"> <jsp:param value="mmm" name="id"/><!-- 이렇게 하면 오류발생함 --> <jsp:param value="000" name="phone"/><!-- 이렇게 하면 오류발생함 --> </jsp:forward>
참조 : 인프런 - JSP웹 쇼핑몰 프로그래밍 기본 과정(JSP WEB Programming) - JSP 액션태그
'jsp(Model1)' 카테고리의 다른 글
JSP와 데이터베이스연동2(DAO패턴 적용) (0) 2020.05.17 JSP와 데이터베이스 연동1 (0) 2020.05.16 JSP 페이지 디렉티브 - Include (0) 2020.05.15 JSP 페이지 스크립트 요소 (0) 2020.05.10 페이지 디렉티브 (0) 2020.05.10