Day53 - [JSP]Action Tag

2021. 4. 29. 17:19JSP 공부

이번에는 JSP의 Action Tag에 대해서 알아 봅시다.

 

Action Tag

Action Tag는 JSP 페이지 내에서, 어떠한 동작을 하도록 지시하는 태그 입니다.

 

1. forward

forward 는, 이 전 포스팅을 참조해 주세요.

rsorry.tistory.com/185

 

Day52 - [JSP]forward

이번에는 JSP 에서 forward 를 알아 봅시다. forward forward 는 actionTag 중 1개 입니다. actionTag는  마감처리 합니다. forward 는, sendRedirect 처럼 다른페이지로 이동 시킬 때 사용합니다. 사용. forwa..

rsorry.tistory.com

2. include

include 는, 다른 페이지를 현재 페이지로 가져올 때 사용합니다.

<jsp:include page="경로"/>

include 는, 지시자 include도 있는데요

둘 다, 다른 페이지를 현재 페이지로 가져올 때 사용하지만, 차이점이 있습니다.

 

※ include_ex02.jsp 에는, total 변수를 선언하였습니다.

jsp의 action Tag 를 사용하는 include는 해당 페이지(가져오는 페이지)에서 선언한 변수를 사용할 수 없지만, 지시자 include는 해당 페이지(가져오는 페이지)에서 선언한 변수를 사용할 수 있습니다.

즉, 지시자 인클루드는 페이지에서 사용하는 변수도 가져올 수 있는 반면에 액션태그 인클루드는 단순히 html영역만 가져올 수 있습니다.

3. param

param 은, parameter 의 줄임말로, 매개변수를 뜻합니다.

 

forward 를 사용해서, 해당 페이지로 이동할 때 원하는 데이터를 넘겨줄 때 사용 됩니다.

 

value에는 원하는 데이터를, name에는 키값(식별할 값)을 주면 됩니다.

그러면, 넘어가는 페이지에서 값은 request를 통해서 가져오면 됩니다.

그런데, 해당하는 페이지를 실행할 경우. 문제가 생깁니다. 바로 한글을 인식할 수 없다는 거죠.

그 이유는, <jsp:param>을 사용할 때, Encoding 방식이 UTF-8로 지정이 되어 있지 않기 때문 입니다.

그래서, param을 사용해서 데이터를 넣을 때는, URLEncoder.encode() 를 사용하고

param으로 넘어온 데이터를 꺼낼 때는, URLDecoder.decode() 를 사용 해주어야 합니다.

 

실제로 param을 많이 사용하진 않는다고 합니다. ( 데이터를 넘길때, request.setAttribute() 를 더 많이 사용 )

 

4. userBean(자바빈)

자바빈이란 JAVA언어의 데이터(변수)와 기능(메서드)으로 이루어진 클래스입니다.

자바빈은 데이터를 저장하는 변수, 데이터를 읽어오는 메서드(getter), 데이터를 저장할 때 사용되는 메 서드(setter)로 이루어져 있습니다.

자바빈은 데이터베이스와의 반복적인 작업을 효율적으로 처리하기 위해 사용합니다.

JSP에서는 액션태그를 사용하여 자바빈을 사용할 수 있는 방법이 있습니다.

 

자바빈을 사용할 때는, <jsp:useBean id="이름" class="클래스 경로" scope="생명주기" /> 로 사용합니다.

여기서, class 는, form의 name들로 이루어진 .java 클래스를 만들어 줍니다.

setProperty 와 getProperty 를 사용해서 값을 저장, 값을 빼내 옵니다.

 

파일명 : bean_basic.jsp

<body>
	<h3>자바빈 이용하기</h3>

    <form action="bean_basic_ok.jsp" method="post">
    아이디:<input type="text" name="id"><br/>
    비밀번호:<input type="password" name="pw"><br/>
    이름:<input type="text" name="name"><br/>
    이메일:<input type="email" name="email"><br/>

    <input type="submit" value="확인">
    </form>
</body

파일명 : User.java

package bean.example;

public class User {

	/*
	 * 자바빈으로 이용할 클래스는 form과 DB의 통신과정에서 변수들의 처리를 쉽게하기 위해서 사용합니다.
	 * 관련변수를 동일한 이름으로 선언하고, 반드시 getter와 setter메서드를 생성합니다.
	 * 반드시 기본생성자도 생성을 해야합니다.
	 */
	
	private String id;
	private String pw;
	private String name;
	private String email;
	
	public User() {
	}
	public User(String id, String pw, String name, String email) {
		super();
		this.id = id;
		this.pw = pw;
		this.name = name;
		this.email = email;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	
}

파일명 : bean_basic_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");

	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	String name = request.getParameter("name");
	String email = request.getParameter("email");
%>

<%--
	id = bean의 이름
	class = 실제 사용할 클래스의 경로
	scope = bean의 사용 범위
	
	스코프속성
	page - 현재페이지에서만 사용이 가능
	request - 다음페이지까지 사용이 가능
	session - 브라우저가 종료되기 까지 모든페이지에서 사용이 가능
	application - 톰캣(서버)이 종료되기 까지 사용이 가능
--%>
<jsp:useBean id="user" class="bean.example.User" scope="request"/>

<!-- setter의 사용 -->
<jsp:setProperty property="id" name="user" value="<%=id %>"/>
<jsp:setProperty property="pw" name="user" value="<%=pw %>"/>
<jsp:setProperty property="name" name="user" value="<%=name %>"/>
<jsp:setProperty property="email" name="user" value="<%=email %>"/>

<!-- getter의 사용 -->
<jsp:getProperty property="id" name="user"/>
<jsp:getProperty property="pw" name="user"/>
<jsp:getProperty property="name" name="user"/>
<jsp:getProperty property="email" name="user"/>

setProperty , getProperty를 사용할 때는, property에는 클래스의 이름이, name에는 useBean의 id가 오면 됩니다.

setProperty의 value에는, 실제로 넣어줄 데이터 값을 써 줍니다.

 

useBean 사용 예제

 

파일명 : bean_tag_ex01.jsp

<body>

	<h2>빈을 이용해서 forward를 실행하기</h2>
	
	<form action="bean_tag_ex02.jsp" method="post">
		아이디:<input type="text" name="id"><br/>
		email:<input type="email" name="email"><br/>
		<input type="submit" value="확인">
	</form>

</body>

파일명 : bean_tag_ex02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<jsp:useBean id="user" class="bean.example.User" scope="request"/>

<!-- form에서 넘어온 name값이 User클래스의 변수 이름과 같다면 자동으로 값을 넣어줌 -->
<jsp:setProperty property="*" name="user"/>
<!-- useBean을 다음 페이지에서도 사용하기 위해서는 forward로 넘어가야 함 -->
<jsp:forward page="bean_tag_ex03.jsp"/>

파일명 : bean_tag_ex03.jsp

<body>

	<h2>forward로 넘어온 bean을 사용하기</h2>
	
	<jsp:useBean id="user" class="bean.example.User" scope="request"/>
	
	아이디:<jsp:getProperty property="id" name="user"/>
	이메일:<jsp:getProperty property="email" name="user"/>
	
</body>

useBean도 실제로 많이 사용되지 않는다고 합니다.

 

실제로는 아래처럼, 자바코드로 객체를 생성해서, set을 이용해 값을 저장하고, request.setAttribute를 더 많이 사용한다고 해요.

<%@page import="bean.example.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");

	String id = request.getParameter("id");
	String email = request.getParameter("email");
	
	User user = new User();
	user.setId(id); // id 저장
	user.setEmail(email); // eamil 저장
	
	// 리퀘스트에 user객체를 강제로 저장
	request.setAttribute("user", user);
	
	// 포워드로 이동
	request.getRequestDispatcher("bean_java_ex03.jsp").forward(request, response);
	
%>	

 

이번에는 이렇게, JSP의 actionTag에 대해서 알아 보았습니다.

 

고생하셨습니다

'JSP 공부' 카테고리의 다른 글

Day 54 - [JSP]로그인 페이지 만들기  (1) 2021.04.30
Day53 - [JSP]회원가입 페이지 만들기  (4) 2021.04.29
Day52 - [JSP]forward  (0) 2021.04.28
Day52 - [JSP] 예외 페이지  (0) 2021.04.28
Day52 - [JSP]application  (0) 2021.04.28