2021. 4. 29. 17:19ㆍJSP 공부
이번에는 JSP의 Action Tag에 대해서 알아 봅시다.
Action Tag
Action Tag는 JSP 페이지 내에서, 어떠한 동작을 하도록 지시하는 태그 입니다.
1. forward
forward 는, 이 전 포스팅을 참조해 주세요.
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 |