JSP 규약은 JSP 페이지에서 빈번히 사용되는 자바빈 객체를 위한 액션 태그를 제공한다.
이 액션 태그를 사용하여 자바빈 객체을 생성하거나, 자바빈의 프로퍼티를 출력하거나 값을 변경할 수 있다.
JSP가 기본적으로 제공하는 표준 태그와 사용자 태그로 나뉜다.
형식은 다음과 같다.
<접두어:태그이름 속성="값" 속성="값" .... />
표준 태그는 jsp라는 접두어를 사용한다.
<jsp:태그이름 속성="값" 속성="값" .... />
JSP Action : useBean
자바 클래스의 객체를 생성해서 JSP 내의 원하는 데이터 저장 영역에 배치되게 해주는 액션이다.
<jsp:useBean id="..." class="..." scope="...">
....
</jsp:useBean>
속성 |
설명 |
id |
생성하려는 객체의 이름 |
class |
자바 클래스 (패키지명을 포함) |
scope |
객체의 유효 범위. (page, request, session, application). 기본 값은 page. |
이는 자바에서 객체를 생성하는 방법과 동일하다.
클래스 인스턴스명 = new 클래스();
JSP Action : setProperty / getProperty
객체에 property 를 Get 또는 Set 하기 위해 사용한다. (Getter / Setter 라고 보면 된다.)
<jsp:setProperty name="..." property="..." value="..." />
속성 |
설명 |
name |
객체 이름 |
property |
property 이름 |
value |
property에 저장할 값 |
<jsp:setProperty name="..." property="..." param="..." />
속성 |
설명 |
param |
넘어오는 객체의 parameter 이름 |
<jsp:setProperty name="..." property="..." />
※ 저장할 property와 가져올 param이 같다면 property 만 쓴다.
<jsp:setProperty name="..." property="*" />
property의 값을 * 로 설정하면 폼에서 넘어오는 모든 parameter를 각각 property로 저장한다.
이는 넘어오는 parameter의 이름과 개수가 해당 객체의 property의 이름과 개수가 같아야한다.
<jsp:getProperty name="..." property="..." />
name 객체의 property 값을 가져온다.
예제) 입력 폼에서 넘어온 데이터를 DTO 객체에 담아 뷰 페이지로 전달한다. 일반적인 방법과 액션을 사용한 방법 모두 확인 해본다.
inputPage.htm
입력한 데이터를 처리하는 jsp 파일을 두 가지 방법으로 테스트 해본다.
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>useBean, set/getProperty 테스트</title>
</head>
<body>
<form name="regForm" method="POST" action="inputProcess.jsp"> <!-- action="inputProcess_useBean" -->
Data1: <input type="text" name="data1"/><br/>
Data2: <input type="text" name="data2"/><br/>
Data3: <input type="text" name="data3"/><br/>
<input type="submit" value="전송"/>
</form>
</body>
</html>
DataDTO.java
String 타입의 데이터를 3개 관리할 수 있는 DTO 클래스를 생성한다.
package com.study;
import java.io.Serializable;
public class DataDTO implements Serializable {
private String data1;
private String data2;
private String data3;
public String getData1() {
return data1;
}
public void setData1(String data1) {
this.data1 = data1;
}
public String getData2() {
return data2;
}
public void setData2(String data2) {
this.data2 = data2;
}
public String getData3() {
return data3;
}
public void setData3(String data3) {
this.data3 = data3;
}
}
inputProcess.jsp
넘어온 데이터를 DTO 객체에 담아 세션에 넣고 뷰 페이지로 이동한다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="com.study.DataDTO" %> <!-- DataDTO 클래스 임포트 -->
<%
request.setCharacterEncoding("EUC-KR");
String data1 = request.getParameter("data1");
String data2 = request.getParameter("data2");
String data3 = request.getParameter("data3");
DataDTO dto = new DataDTO();
dto.setData1(data1);
dto.setData2(data2);
dto.setData3(data3);
session.setAttribute("dto", dto);
response.sendRedirect("viewPage.jsp");
%>
viewPage.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="com.study.DataDTO"%>
<%
DataDTO dto = (DataDTO)session.getAttribute("dto");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>View Page</title>
</head>
<body>
Data1: <%= dto.getData1() %> <br/>
Data2: <%= dto.getData2() %> <br/>
Data3: <%= dto.getData3() %> <br/>
</body>
</html>
위 파일 중 JSP 파일을 JSP 액션을 사용하도록 수정해보자.
inputProcess_useBean.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<jsp:useBean id="dto" class="com.study.DataDTO" scope="session">
<jsp:setProperty name="dto" property="*"/>
</jsp:useBean>
<%
response.sendRedirect("viewPage_useBean.jsp");
%>
viewPage_useBean.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<jsp:useBean id="dto" class="com.study.DataDTO" scope="session"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>View Page</title>
</head>
<body>
Data1: <jsp:getProperty name="dto" property="data1"/> <br/>
Data2: <jsp:getProperty name="dto" property="data2"/> <br/>
Data3: <jsp:getProperty name="dto" property="data3"/> <br/>
</body>
</html>
동일한 기능을 하면서도 더 간략해진 코드를 볼 수 있다.
inputProcess 비교
viewPage 비교