Back/JSP

6장 액션 태그

잘잔디 2023. 4. 10. 17:19

 

 

액션 태그

  • 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와 자바빈즈의 프로세스

  1. 웹 브라우저에서 서블릿으로 서비스를 요청
  2. 서블릿은 자바빈즈와 통신을 수행
  3. 자바빈즈는 데이터베이스와 연결하여 데이터를 관리
  4. 서블릿은 JSP 웹페이지에게 정보를 전다
  5. 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>