티스토리 뷰

Back-end/Spring

Spring Action Tag

이안_ian 2019. 1. 29. 21:25




반응형

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
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/05   »
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 31