반응형
01. Hewon.java - java bean 클래스
package xyz.itwill.bean;
//JavaBean 클래스 : 웹프로그램 실행을 위해 WAS 프로그램에 의해 자동 생성되어 관리되는 객체를
//생성하기 위한 클래스 - useBean 태그에서 사용하기 위한 클래스
// => 웹프로그램 요청시 전달된 값이 저장될 객체를 생성할 목적의 클래스
//JavaBean 클래스 작성규칙
// => 반드시 전달값의 이름과 동일한 이름으로 필드를 선언
// => public 접근지정자로 선언된 기본 생성자(매개변수가 없는 생성자)가 반드시 존재
// => 필드값을 반환하는 메소드(Getter)와 필드값을 변경하는 메소드(Setter) 메소드를 필드명을 기반으로 작성
//회원정보를 저장하기 위한 클래스 - VO 클래스
public class Hewon {
private String name;
private String phone;
private String address;
public Hewon() { }
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getPhone() {return phone;}
public void setPhone(String phone) {this.phone = phone;}
public String getAddress() {return address;}
public void setAddress(String address) {this.address = address;}
}
02. useBean 액션태그 미사용 예시
1) non_useBean_form.jsp
- action/useBean/non_useBean_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 사용자로부터 회원정보를 입력받기 위한 JSP 문서 --%>
//<%-- => [입력완료]를 클릭한 경우 form 태그를 실행하여 처리페이지(non_useBean_action.jsp)를
//POST 방식으로 요청해 입력값 전달 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>회원정보입력</h1>
<hr>
<form action="non_useBean_action.jsp" method="post">
<table>
<tr>
<td>이름</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>전화번호</td>
<td><input type="text" name="phone"></td>
</tr>
<tr>
<td>주소</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">입력완료</button></td>
</tr>
</table>
</form>
</body>
</html>
2) non_useBean_action.jsp
💛리다이렉트 이동
- 클라가 form문서 먼저 요청
- action문서가 값을 처리해주고 session객체를 통해 이동 URL 주소( display문서 )줌 [리다이렉트이동]
- 클라는display로 재요청함
- 즉, action문서와 display문서는 아무 상관 없는 사이
💛포워드 이동
- 클라가 form문서 먼저 요청
- action문서가 값을 처리하고나서 requset 객체와 response 객체를 들고 다른 웹프로그램으로 스레드를 이동시킴
- requset 객체와 response 객체를 통해 속성값 사용함
<%@page import="xyz.itwill.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 입력페이지(non_useBean_form.jsp)에서 전달된 값을 반환받아 내장객체의 속성값으로 저장하고
//출력페이지(non_useBean_display.jsp)로 포워드 이동 처리하는 JSP 문서 --%>
<%
//1.
//비정상적인 요청에 대한 처리
if(request.getMethod().equals("GET")) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
//2.
//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
request.setCharacterEncoding("utf-8");
//3.
//전달값을 반환받아 저장
String name=request.getParameter("name");
String phone=request.getParameter("phone");
String address=request.getParameter("address");
//4-1.
//session 내장객체를 이용하여 속성값 저장
//이 방법 말고 객체로 저장하자!
//session.setAttribute("name", name);
//session.setAttribute("phone", phone);
//session.setAttribute("address", address);
//4-2.
//VO 클래스로 객체를 생성하여 전달값으로 필드값 변경
Hewon hewon=new Hewon();
hewon.setName(name);
hewon.setPhone(phone);
hewon.setAddress(address);
//5.
//Java 명령을 사용하여 현재 요청 JSP 문서가 아닌 다른 JSP 문서로 응답되도록 구현하는 방법
// => [💛1.리다이렉트 이동하여 응답하는 방법]
// => [💛2. 포워드 이동하여 응답하는 방법]
/*
//[💛1. 리다이렉트 이동] : 클라이언트에게 URL 주소를 전달하여 다른 JSP 문서를 요청시켜 실행결과로 응답 처리
// => 클라이언트 브라우저의 URL 주소 변경 - 클라이언트를 이용하여 JSP 문서 이동
// => (스레드 필요X) session 내장객체를 이용하여 객체를 속성값으로 저장하여 응답 JSP 문서에서 반환받아 사용 가능
// => 응답 JSP 문서에서는 session 내장객체에 저장된 속성값을 객체로 반환받은 후 반드시 제거
session.setAttribute("hewon", hewon);//session 내장객체를 이용하여 속성값 저장 - session Scope
response.sendRedirect("non_useBean_display.jsp");//리다이렉트 이동
*/
//[💛2. 포워드 이동] : 요청 JSP 문서에서 응답 JSP 문서로 스레드를 이동하여 응답 처리
// => 클라이언트 브라우저의 URL 주소 [미변경] - 서버에서 JSP 문서간의 이동
// => (스레드 필요o) request 내장객체를 이용하여 객체를 속성값으로 저장하여 응답 JSP 문서에서 반환받아 사용 가능
// => 요청 JSP 문서 및 응답 JSP 문서를 제외한 다른 JSP 문서에서는 request 내장객체의 속성값 사용 불가능하므로 제거 불필요
request.setAttribute("hewon", hewon);//request 내장객체를 이용하여 속성값 저장 - request Scope
//포워드 이동하기 위한 Java 명령 - forward 태그와 동일한 기능 제공
//request.getRequestDispatcher(String url) : URL 주소가 저장된 RequestDispatcher 객체를 반환하는 메소드
//RequestDispatcher 객체 : 다른 웹프로그램으로 스레드를 이동하기 위한 기능을 제공하는 객체
//RequestDispatcher.forward(ServletRequest request, ServletResponse response) : 요청
//웹프로그램에서 다른 웹프로그램으로 스레드를 이동시켜 응답처리하기 위한 메소드 - 포워드 이동
// => 요청 웹프로그램의 request 객체와 response 객체를 스레드가 이동되는 웹프로그램으로 전달
//=> ( 단, 스레드가 이동된 웹프로그램에서는 객체를 빌려주는 대신 사용제한 있음)
//포워드 이동하기 위한 Java 명령 - forward 액션태그와 동일한 기능 제공
//request와 response 줄테니 이거 사용해! (빌려쓰니 사용제한 있음)
request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);
%>
3) non_useBean_display.jsp
- 리다이렉트 이동으로 request 객체에 저장된 속성값 사용
- 포워드 이동으로 request 객체에 저장된 속성값 사용
<%@page import="xyz.itwill.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 처리페이지(non_useBean_action.jsp)의 내장객체에 저장된 속성값을 반환받아 클라이언트에게
//전달하는 JSP 문서 --%>
//💛방법1. 리다이렉트 이동으로 session 객체에 저장된 속성값 사용하기
/*
<%
//비정상적인 요청에 대한 처리
if(session.getAttribute("hewon")==null) {//session 내장객체에 저장된 속성값이 없는 경우
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//session 내장객체에 저장된 속성값을 반환받아 저장
Hewon hewon=(Hewon)session.getAttribute("hewon");
//다른 JSP 문서에서 session 내장객체에 저장된 속성값을 사용하지 못하도록 속성값 제거
session.removeAttribute("hewon");
%>
*/
//💛방법2. 포워드 이동으로 request 객체에 저장된 속성값 사용하기
<%
//비정상적인 요청에 대한 처리
if(request.getAttribute("hewon")==null) {//request 내장객체에 저장된 속성값이 없는 경우
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//request 내장객체에 저장된 속성값을 반환받아 저장
Hewon hewon=(Hewon)request.getAttribute("hewon");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>회원정보확인</h1>
<hr>
<p>이름 = <%=hewon.getName() %></p>
<p>전화번호 = <%=hewon.getPhone() %></p>
<p>주소 = <%=hewon.getAddress() %></p>
</body>
</html>
03. useBean 액션태그 사용 예시
1) useBean_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 사용자로부터 회원정보를 입력받기 위한 JSP 문서 --%>
//<%-- => [입력완료]를 클릭한 경우 form 태그를 실행하여 처리페이지(useBean_action.jsp)를
POST 방식으로 요청해 입력값 전달 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>회원정보입력</h1>
<hr>
<form action="useBean_action.jsp" method="post">
<table>
<tr>
<td>이름</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>전화번호</td>
<td><input type="text" name="phone"></td>
</tr>
<tr>
<td>주소</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">입력완료</button></td>
</tr>
</table>
</form>
</body>
</html>
2) useBean_action.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 입력페이지(useBean_form.jsp)에서 전달된 값을 반환받아 내장객체의 속성값으로 저장하고
//출력페이지(useBean_display.jsp)로 포워드 이동 처리하는 JSP 문서 --%>
<%
//1.
//비정상적인 요청에 대한 처리
if(request.getMethod().equals("GET")) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
//2.
//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
request.setCharacterEncoding("utf-8");
%>
//<%-- useBean ActionTag : JSP 문서에 객체를 제공하기 위한 태그 --%>
//<%-- 형식)<jsp:useBean id="식별자" class="클래스" scope="사용범위"/> --%>
//<%-- => 내장객체에 저장된 속성값을 객체로 반환받아 제공하거나 속성값이 없으면 객체를 생성하여 내장객체의 속성값으로 저장 후 제공 --%>
//<%-- id 속성(필수) : useBean 태그로 제공될 객체를 구분하기 위한 식별자를 속성값으로 설정 --%>
//<%-- => 내장객체에 저장된 속성값을 구분하기 위한 속성명으로 사용 --%>
//<%-- => hewon이라는 이름의 속성값을 가져다 쓸게요! 근데 없으니 만들어서 hewon에 저장해서 쓸게요! --%>
//<%-- class 속성(필수) : useBean 태그로 제공될 객체의 자료형을 속성값으로 설정 --%>
//<%-- => xyz.itwill.bean.Hewon 자료형 쓸게요! --%>
//<%-- scope 속성(선택) : useBean 태그로 제공될 객체의 사용범위를 속성값으로 설정 --%>
//<%-- => page(기본값), request, session, application 중 하나를 속성값으로 설정 --%>
<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>
/*
<%
//위와 아래의 명령은 동일한 기능
Hewon hewon=new Hewon();
request.setAttribute("hewon", hewon);
%>
*/
//<%-- setProperty ActionTag : useBean 태그로 제공된 객체의 필드값을 변경하기 위한 태그 --%>
//<%-- => 객체 필드의 Setter 메소드를 호출하여 객체의 필드값 변경 --%>
//<%-- 형식)<jsp:setProperty name="이름" property="필드명" value="값"/> --%>
//<%-- name 속성(필수) : useBean 태그로 제공된 객체의 식별자(id 속성값)를 속성값으로 설정 --%>
//<%-- => useBean 태그로 제공된 객체가 여러개 있을 수 있는데, 그 중 hewon 객체 사용할게요! -->
//<%-- property 속성(필수) : 값을 변경할 필드명을 속성값으로 설정 --%>
//<%-- => 필드명을 기반으로 작성된 Setter 메소드 자동 호출 - 필드명으로 작성된 Setter 메소드가 없는 경우 에러 발생 --%>
//<%-- => setName()가 자동 호출 될거에요! -->
//<%-- value 속성(선택) : 필드에 저장될 변경값을 속성값으로 설정 --%>
//<%-- => value 속성을 생략하면 JSP 문서 요청시 전달된 값을 반환받아 필드값 변경 --%>
//<%-- <jsp:setProperty name="hewon" property="name" value="홍길동"/> --%>
/*
<%
//위와 아래의 명령은 동일한 기능
hewon.setName("홍길동");
%>
*/
//<%-- 주의)JSP 문서 요청시 전달된 값의 이름과 setProperty 태그의 property 속성값(객체의 필드명)이 반드시 동일해야만 전달값을 반환받아 필드값으로 변경 가능 --%>
//<%--<jsp:setProperty name="hewon" property="name"/>--%>
//<%--<jsp:setProperty name="hewon" property="phone"/>--%>
//<%--<jsp:setProperty name="hewon" property="address"/>--%>
//<%-- property 속성값을 [*]로 설정한 경우 모든 전달값을 반환받아 객체의 필드값 변경 --%>
//<%-- => 전달값의 이름과 필드명이 동일한 경우에만 전달값을 반환받아 필드값 변경 --%>
//<%-- => 야, 그냥 모든 전달값을 가져와서 필드값을 모두 다 바꿔줘!!!! --%>
<jsp:setProperty name="hewon" property="*"/>
/*
<%
//위와 아래의 명령은 동일한 기능
hewon.setName(request.getParameter("name"));
hewon.setPhone(request.getParameter("phone"));
hewon.setAddress(request.getParameter("address"));
%>
*/
<jsp:forward page="useBean_display.jsp"/>
/*
<%
//위와 아래의 명령은 동일한 기능
request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);
%>
*/
3) useBean_display.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 처리페이지(useBean_action.jsp)의 내장객체에 저장된 속성값을 반환받아 클라이언트에게
//전달하는 JSP 문서 --%>
<%
//비정상적인 요청에 대한 처리
if(request.getAttribute("hewon")==null) {//request 내장객체에 저장된 속성값이 없는 경우
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>회원정보확인</h1>
<hr>
// <%-- useBean 태그를 사용하여 request 내장객체에 저장된 속성값을 객체로 반환받아 저장 --%>
<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>
/*
<%
//위와 아래의 명령은 동일한 기능
Hewon hewon=(Hewon)request.getAttribute("hewon");
%>
*/
// <%-- getProperty ActionTag : useBean 태그로 제공된 객체의 필드값을 반환받기 위한 태그 --%>
// <%-- => 객체 필드의 Getter 메소드를 호출하여 객체의 필드값을 반환받아 사용 --%>
// <%-- 형식)<jsp:getProperty name="식별자" property="필드명"/> --%>
// <%-- name 속성(필수) : useBean 태그로 제공된 객체의 식별자(id 속성값)를 속성값으로 설정 --%>
// <%-- property 속성(필수) : 값을 반환할 필드명을 속성값으로 설정 --%>
// <%-- => 필드명을 기반으로 작성된 Getter 메소드 자동 호출 - 필드명으로 작성된 Getter 메소드가 없는 경우 에러 발생 --%>
<p>이름 = <jsp:getProperty name="hewon" property="name"/></p>
<p>전화번호 = <jsp:getProperty name="hewon" property="phone"/></p>
<p>주소 = <jsp:getProperty name="hewon" property="address"/></p>
</body>
</html>
반응형
'jsp' 카테고리의 다른 글
[jsp] 15. 웹사이트 제작법1_뼈대제작 (feat. JSP) (0) | 2024.07.11 |
---|---|
[jsp] 14. 학생정보 관리 프로그램 (0) | 2024.07.11 |
[jsp] 12. include 액션태그(템플릿페이지)를 통한 사이트 구축 (대형사이트에 최적) (0) | 2024.07.10 |
[jsp] 11. 포워드 액션태그를 이용한 프로그램 (스레드 자체가 이동) (0) | 2024.07.09 |
[jsp] 10. include 액션태그를 이용한 프로그램 (실행결과물만 가지고 원래 파일로 이동) (0) | 2024.07.09 |