티스토리 뷰
JSP Action Tag
JSP Action 태그는 XML 기술을 이용하여 기존의 JSP 문법을 확장하는 매커니즘을 제공하는 태그로, 웹 브라우저에서 실행되는 것이 아니라, 웹 컨테이너에서 실행되고 결과만 브라우저로 보낸다.
표준 액션 태그 | 커스텀 액션 태그 |
|
사용법 | JSP 페이지에서 바로 사용 태그 앞에 jsp 접두어가 붙는다. |
별도의 라이브러리 설치 필요 라이브러리 선언에 맞는 접두어가 붙는다. |
예시 | <jsp:include page=" !@#$jsp" /> |
<c:set var = "cnt" value="0"/> |
* 액션태그 접두어란 태그 이름 앞에 'ooo:' 형식으로 제공하는 태그의 그룹을 지정하는 것을 뜻한다.
표준 액션 태그 - JSP에서 기본으로 제공하는 태그
태그명 |
설명 |
jsp:include |
현재 페이지에 특정 페이지를 포함할 때 사용한다. |
jsp:forward |
현재 페이지 접근 시 특정 페이지로 이동시킨다. (request.forward()와 동일하다) |
jsp:param |
<jsp:include>, <jsp:forward>의 하위요소로 사용되며, 해당 페이지에 전달할 값을 기록할 때 사용 |
jsp:usebean |
Java Bean 객체를 사용하기 위한 태그로, JSP에서 사용하는 VO, DTO, Entity와 동일하다. |
jsp:setProperty |
Java 객체 사용 시 Setter와 동일한 역할이다. |
jsp:getProperty |
Java 객체 사용 시 Gatter와 동일한 역할이다. |
<jsp:include>
<%@ include file= "파일명" %> 과 쓰임이 동일하나, jsp 파일이 java 파일로 변환될 때 삽입되는 <%@include%>와 달리 <jsp:include>는 jsp파일이 java 파일로 바뀌고 컴파일이 완료되어 런타임 시 삽입된다.
무슨 말이냐면 보통 <%@include%>형식은 헤더와 푸터를 따로 만들고 본문에 삽일 할때 사용되는데 푸터에 세션값 logined 이라는 값을 받았으면 본문에서도 logined가 참조가 되어 사용이 가능한데 <jsp:include>형식은 그게 안된다. 각각 컴파일이 되고 난후 붙여주기만 하기 때문에 참조가 불가능 하다는 것이다. 이외엔 둘의 사용처는 같다.
본문 jsp
1 2 3 4 | <% request.setCharacterEncoding("utf-8"); %> <jsp:include page="header.jsp"> <jsp:param value="책소개" name="info"/> </jsp:include> | cs |
넘겨받는 jsp
1 2 3 4 5 6 7 8 | <header> <h3><%=request.getParameter("info") %></h3> <ul> <li>메인</li> <li>notice</li> <li>board</li> </ul> </header> | cs |
이런식으로 넘겨줘야한다.
<jsp:forward>
하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달할 때 사용한다. 전달하는 페이지에서 request, response 객체가 같이 전달되며, URL은 변경되지 않는다.
su1부터 su2까지 더하기를 진행하는 과정을 jsp:forward로 진행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% int su1= Integer.parseInt(request.getParameter("su1")); int su2= Integer.parseInt(request.getParameter("su2")); int total = 0; for(int i=su1;i<su2;i++) { total += i; } //어트리뷰트로 넣고 빼기 위함 request.setAttribute("total", total); //다른 방식인 파람으로 int age =19; int age2 =25; int age3 =26; int totalAge = age+age2+age3; request.setCharacterEncoding("utf-8"); %> <jsp:forward page="sumResult.jsp"> <jsp:param value="<%=totalAge %>" name="totalAge"/> <jsp:param value="오늘의 영화 이미테이션 게임" name="movie"/> </jsp:forward> | cs |
결과 값 넘겨받은 jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>결과 창 </title> </head> <body> //어트리뷰트로 넣었기 때문에 어트리뷰트로 뺐다. <h1 style="color:red"><%=request.getAttribute("total")%></h1> //param으로 넣고 뺌 <h2 style="color:aqua"> <%=request.getParameter("totalAge") %> <%=request.getParameter("movie") %> </h2> </body> </html> | cs |
<jsp:useBean>
java class를 참조하여 빈 객체를 생성하고, setProperty와 getProperty를 통해 값을 저장, 조회할 수 있으며, 이미 같은 이름의 객체가 생성된 경우 기존의 객체를 참조한다.
*문법 <jsp:useBean id="객체명" class="패키지명.클래스명" scope="범위지정자"/>
속성 |
내용 |
id |
식별할 수 있는 유일한 명칭(참조형 변수) |
class |
객체의 실제 클래스명, 패키지명까지 작성 |
type |
자바객체 접근 타입(default: 자신의 클래스타입)/ 부모타입으로 접근시 사용 |
scope |
page, request, session, application 범위를 지정 |
<jsp:setProperty>
자바빈 객체의 속성값을 설정하거나 수정할 때 사용
*문법 <jsp:setProperty name="객체명" property="멤버변수명" value="값" param="request param명"/>
속성 |
내용 |
name |
객체명, <jsp:useBean>에서 id값과 동일한 값 입력 |
property |
객체의 멤버변수명 |
value |
수정 값 |
param |
request 속성에 있는 param의 값이랑 일치한 값을 불러와 수정한 값으로 사용 |
<jsp:getProperty>
자바빈 객체의 속성값을 가져올 때 사용
*문법 <jsp:getProperty name="객체명" property="멤버변수명"/>
속성 |
내용 |
name |
객체명, <jsp:useBean>에서 id값과 동일한 값 입력 |
property |
객체의 멤버 변수명 |
예제
index.jsp 파일
1 2 3 4 5 6 7 8 9 10 11 12 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <a href="<%=request.getContextPath()%>/useBeanTest">useBeanTest</a> </body> </html> | cs |
서블릿으로 이동
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @WebServlet("/useBeanTest") public class UseBeanTestServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UseBeanTestServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub Person p = new Person("김수현",19,"남"); request.setAttribute("person", p); request.getRequestDispatcher("/views/useBean/personView.jsp").forward(request, response); } | cs |
리턴 페이지로 다시 이동 하면 이름이 김수현인 객체가 나온다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>PersonView</title> </head> <body> //서블릿에서 저장된 내용이 자동으로 들어가고 그걸 <h2>Person 정보 출력</h2> <jsp:useBean id="person" class="action.model.vo.Person" scope="request"/> 이름 : <jsp:getProperty property="name" name="person"/> 나이 : <jsp:getProperty property="age" name="person"/> 성별 : <jsp:getProperty property="gender" name="person"/> <br><br> //직접 객체에 데이터 넣어서 출력하기 <h2>Person 정보 출력</h2> <jsp:useBean id="p" class="action.model.vo.Person"/> <jsp:setProperty property="name" name="p" value="홍길동"/> <jsp:setProperty property="age" name="p" value="50"/> <jsp:setProperty property="gender" name="p" value="남"/> 이름 : <jsp:getProperty property="name" name="p"/> 나이 : <jsp:getProperty property="age" name="p"/> 성별 : <jsp:getProperty property="gender" name="p"/> </body> </html> | cs |
'Back-end > Spring' 카테고리의 다른 글
Spring STS 설치하기!! (0) | 2019.02.14 |
---|---|
MyBatis List와 Map으로 데이터 불러오기 (4) | 2019.02.11 |
Mybatis 데이터 삽입하기 (0) | 2019.02.02 |
Spring JSTL Formatting Tags (0) | 2019.02.01 |
Spring EL & JSTL (0) | 2019.01.30 |