액션 태그
- JSP에서 기본으로 제공하는 태그들의 집합으로 서버 또는 클라이언트에게 수행할 명령을 지시
- 액션 태그를 사용하게 되면 Java 코드를 사용하지 않아도 JSP 웹 페이지를 개발할 수 있음.
- 액션 태그는 XML 형식인 <jsp: …/>를 사용하며 끝나는 태그는 반드시 />로 마무리해야 함.
- JSP에서 편의를 위해 제공하는 태그이다.
JSP 액션 태그
- 액션 태그는 JSP 웹페이지를 코딩할 때 Java 코드의 작성을 피하거나 최소화하기 위해 사용
- JSP 웹페이지에서 Java 코드를 최소화하게 되면 소스 코드에 대한 유지/보수를 효율적으로 수행 가능.
forward 액션 태그
- 현재 위치한 JSP 웹페이지에서 다른 웹페이지로 이동할 때 사용
- 현재 위치한 JSP 웹페이지에서 다른 웹페이지로 이동하여 오늘의 날짜와 시각을 출력하는 예제 수행
forward.jsp파일
<body>
Home > forward 액션 태그로 페이지 요청
<jsp:forward page = "forwardProcess.jsp"/>
</body>
forwardProcess.jsp파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그</title>
</head>
<body>
Home > forward.jsp로 부터 요청받음.
<hr>
<%
Date nowTime = new Date();
%>
현재 날짜와 시각 : <%= nowTime.toLocaleString() %>
</body>
</html>
include 액션 태그
- 현재 위치한 JSP 웹페이지의 특정 영역에 외부 파일의 내용을 포함할 때 사용
- flush 속성의 기본값은 “false”이고 “true”로 설정하게 되면 지금까지 버퍼에 저장된 내용을 웹 브라우저로 출력하고 버퍼를 비워 줌
- flush의 속성을 true로 설정할 경우 헤더 부분의 정보도 함께 전송되므로 가급적 false로 설정하는 것이 바람직함.
<jsp:include page = "파일명" flush = "false"/>
오늘의 날짜와 시각 출력
- include 액션 태그를 사용하여 오늘의 날짜와 시각을 출력하는 예제 수행
include.jsp파일 body코드
<jsp:forward page = "forwardProcess.jsp"/>
includeProcess.jsp 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Home > includeProcess.jsp 파일에서 수행한 명령
<hr>
<%
Date nowTime = new Date();
%>
현재 날짜와 시각 : <%= nowTime.toLocaleString() %>
</body>
</html>
- forward 액션 태그와 같은 결과를 보임을 알 수 있다.
param 액션 태그
- 현재 위치한 JSP 웹페이지에서 다른 웹페이지로 정보를 전달할 때 사용하는 태그(순수 jsp 페이지끼리 호출을 하며 값을 넘겨줄 때사용함)
- param 액션 태그는 단독으로 사용할 수 없으므로 jsp:forward 태그나 jsp:include 태그의 내부에 선언하여 사용
- param 액션 태그는 여러 개의 파라미터를 선언하여 다른 페이지에 여러 개의 정보를 전달할 수도 있음.
<jsp:forward page = "파일명>
<jsp:param = "파라미터명1" value = "파라미터값1">
<jstp:param = "파라미터명2" value = "파라미터값2">
</jsp:forward>
param 태그로 오늘의 날짜와 시각 정보 출력
- 현재 위치한 JSP 웹페이지에서 다른 웹페이지로 오늘의 날짜와 시각 정보를 전달하는 예제 수행
param.jsp body 코드
<%
Date nowTime = new Date();
%>
<jsp:forward page = "paramProcess.jsp">
<jsp:param name="date" value="<%= nowTime.toLocaleString() %>"/>
</jsp:forward>
paramProcees.jsp 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>현재 위치 : paramProcess.jsp</title>
</head>
<body>
Home > param.jsp로 부터 정보를 전달 받음
<hr>
현재 날짜와 시각:
<%= request.getParameter("date") %>
</body>
</html>
- 인코딩 전달은 잘 안되는지 오후가?? 가 되어 있었음.
자바빈즈 태그의 기능
자바빈즈(Java Beans)
- JSP 웹페이지에는 HTML 코드와 스크립트 태그 등을 기술하기 때문에 자칫 프로그램이 복잡하게 작성되어 유지/복수가 어려운 상황이 발생한다.
- 자바빈즈 액션 태그를 사용하게 되면 복잡하게 구성된 JSP 페이지에서 Java 소스 코드만 따로 뽑아 별도 작성으로 JSP 웹페이지가 복잡해지는 것을 방지할 수 있음.
JSP와 자바빈즈의 프로세스
- 웹 브라우저에서 서블릿으로 서비스를 요청
- 서블릿은 자바빈즈와 통신을 수행
- 자바빈즈는 데이터베이스와 연결하여 데이터를 관리
- 서블릿은 JSP 웹페이지에게 정보를 전다
- JSP 웹페이지는 요청한 웹 브라우저에서 전달된 정보를 전달
자바빈즈 액션 태그 형식
useBean 액션 태그
- 자바빈즈를 JSP 웹페이지에서 사용하기 위해 Java 클래스를 선언하고 초기화하는 태그로 사용형식은 다음과 같음
<jsp:useBean id = "객체명" scope = "page | request | session | application"
class = "클래스명" type = "타입명" />
jsp:useBean
- id 속성 : 지정한 객체의 사용 용도지정
- 꺼낸 객체의 참조 변수명으로 사용
- getAttribute()로 값을 꺼낼 때 사용하는 이름
- 객체를 생성할 경우 보관소에 저장하는 key 값의 이름으로 사용
- scope 속성 : 보관소를 지정 - 사용범위에 대한 영역 제한
- page = JspContext(기본값)
- request = ServeletRequest
- session = HttpSession
- application = ServeletContext
- class 속성 :
- Java 객체를 생성하기 위해 사용할 클래스 이름을 지정할 때 선언
- new 연산자를 사용하므로 인터페이스는 올 수 없고 반드시 패키지 이름을 포함해야 함
- scope 속성에서 지정한 보관소에서 객체를 찾지 못하였을 경우 class의 값을 사용하여 인스턴스를 생성
- 생성된 객체는 scope 보관소에 자동으로 저장되며 class 속성을 선언하지 않을 경우 객체를 생성할 수 없게 됨.
- type 속성 :
- type 속성은 참조 변수에서 사용할 타입(클래스 또는 인터페이스)을 지정할 때 선언
- 이 속성을 사용할 때는 반드시 패키지 이름을 포함해야 하며 type 속성을 지정하지 않으면 class 속성의 값이 사용됨.
useBean코드
Home > useBean 액션 태그로 오늘의 날짜와 시각 출력
<hr>
<jsp:useBean id = "nowTime" class = "java.util.Date"/>
<%= nowTime.toLocaleString() %>
useBean은 사용자가 만든 클래스를 Class 옵션에 적용이 가능하다는 장점이 있다.
useBean을 사용하여 계정을 넘겨주는 코드
1.memberInf.java 코드
package green;
import java.util.Date;
public class MemberInfo {
private String id;
private String password;
private String name;
private Date registerDate;
private String email;
public MemberInfo() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getRegisterDate() {
return registerDate;
}
public void setRegisterDate(Date registerDate) {
this.registerDate = registerDate;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
2.membershipForm.jsp 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="processJoining.jsp" method="post">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td>아이디</td>
<td colspan="3"><input type="text" name="id" size="10"></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="name" size="10"></td>
<td>이메일</td>
<td><input type="text" name="email" size="10"></td>
</tr>
<tr>
<td colspan="4" align="center">
<input type="submit" value="회원가입">
</td>
</tr>
</table>
</form>
</body>
</html>
3.processJoining.jsp 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="memberInfo" class="green.MemberInfo" />
<jsp:setProperty name="memberInfo" property="*" />
<jsp:setProperty name="memberInfo" property="password" value="<%= memberInfo.getId() %>" />
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<table width="400" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>아이디</td>
<td><jsp:getProperty property="id" name="memberInfo"/></td>
<td>암호</td>
<td><jsp:getProperty property="password" name="memberInfo"/></td>
</tr>
<tr>
<td>이름</td>
<td><jsp:getProperty property="name" name="memberInfo"/></td>
<td>이메일</td>
<td><jsp:getProperty property="email" name="memberInfo"/></td>
</tr>
</table>
</body>
</html>