자바로 만들어진 서버 페이지
JSP 처리 과정
웹문서이지만 클라이언트 요청에 의해 서블릿(웹프로그램)으로 바뀌어 요청에 대한 처리와 응답 결과 생성 → 웹프로그램처럼 사용 가능
서블릿 보다 쉽고 빠르게 프로그램을 작성 가능 (서블릿의 상위 개념)

clean tomcat work directory를 사용해서 work dir 비워주기 (객체를 재생성하여 재요청)

웹브라우저의 더보기 → 설정 → 더보기 → 개인 정보 보호 및 보안 → 인터넷 사용 기록 삭제 → 고급 → 인터넷 사용 기록 삭제 click

new project → web → dynamic web project → 이름 설정 후 next → generate web.xml deployment descriptor 선택하여 JSP 프로젝트 생성
<!-- --> HTML 주석 : 설명문이 클라이언트에게 전달 - 소스보기 가능(웹디자이너)
<%-- --%> JSP 주석 : 설명문이 클라이언트에게 미전달 - 소스보기 불가능(웹프로그래머)
JSP(Java Server Page) : 서블릿보다 쉽게 웹프로그램을 작성하기 위한 기술
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//Java 명령 작성
Date now=new Date();
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분 ss초");
String displayNow=dateFormat.format(now);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
<style type="text/css">
#displayDiv {
width: 600px;
margin: 0 auto;
padding: 30px;
font-size: 2em;
font-weight: bold;
text-align: center;
border: 1px solid black;
}
</style>
</head>
<body>
<h1>Hello, JSP!!!</h1>
<p id="displayDiv"><%=displayNow %></p>
<!--1초마다 현재 시간 변경 -->
<script type="text/javascript">
setInterval(function() {
location.reload();
}, 1000);
</script>
</body>
</html>
스크립팅 요소(Scripting Element)
스크립틀릿(Scriptlet) : JSP 문서에서 Java 명령을 작성하는 영역을 표현하기 위한 스크립팅 요소(요청 처리 메소드의 명령) - <% Java 명령; Java 명령; ... %>
선언문(Declaration) : JSP 문서에서 필드 또는 메소드를 선언하는 영역을 표현하기 위한 스크립팅 요소(서블릿 클래스의 필드 또는 메소드) - <%! 필드 또는 메소드 선언 %>
표현식(Expression) : JSP 문서에서 Java 명령으로 발생되는 결과값을 표현하여 출력하는 영역을 표현하기 위한 스크립팅 요소(요청 처리 메소드의 명령) - <%={변수명|연산식|메소드호출}%>
선언문 : 필드 또는 메소드를 선언하기 위한 영역
스크립틀릿 : 요청을 처리하기 위한 Java 명령을 작성하는 영역 - 요청 처리 메소드의 명령
표현식 : Java 변수값, 연산식의 결과값, 메소드의 반환값을 문자열로 변환하여 클라이언트에게 전달(응답)하기 위한 영역
<%=count%>out 객체 : JSP 문서에서 처리결과를 생성하기 위해 기본적으로 제공되는 출력스트림
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 선언문 : 필드 또는 메소드를 선언하기 위한 영역 -->
<%!
//서블릿 클래스의 필드 - 서블릿 객체가 소멸되면 필드는 자동 소멸
int count=0;
%>
<%-- 스크립틀릿 : 요청을 처리하기 위한 Java 명령을 작성하는 영역 --%>
<%
//요청 처리 메소드가 종료되면 지역변수는 자동 소멸
//int count=0;
count++;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>스크립팅 요소(Scripting Element)</h1>
<hr>
<%-- out 객체 : JSP 문서에서 처리결과를 생성하기 위해 제공되는 출력스트림 --%>
<%-- <p>JSP 문서의 요청횟수 = <% out.println(count); %></p> --%>
<%-- 표현식 : Java 변수값, 연산식의 결과값, 메소드의 반환값을 문자열로 변환하여
클라이언트에게 전달(응답)하기 위한 영역 --%>
<p>JSP 문서의 요청횟수 = <%=count%></p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
include Directive : JSP 문서에 외부파일의 코드(Source)를 포함하도록 지시
taglib Directive : JSP 문서에 태그 라이브러리 파일(커스텀 태그)을 포함하도록 지시
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>page Directive의 contentType 속성
contentType 속성에는 JSP 문서를 요청하여 응답받을 수 있는 파일형식(MimeType)과 파일의 문자형태(CharacterSet - Encoding)를 속성값으로 설정
<%@ page language="java" contentType="application/pdf; charset=UTF-8" pageEncoding="UTF-8"%>
다른 형식으로 실행 시 자동 다운로드 → 확장자 바꿔서 실행 가능 (msword 설치 되어있어야 가능)
import 속성에는 JSP 문서에서 사용할 클래스 또는 인터페이스를 속성값으로 설정
<%@ page import="java.util.ArrayList" %>page Directive에서는 동일한 속성을 다른 속성값으로 중복 선언할 경우 JSP 문서 실행시 500 에러 발생 (import 속성 제외)
<%-- <%@page import="java.util.List, java.util.ArrayList"%> --%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//java.util.List<java.lang.String> nameList=new java.util.ArrayList<java.lang.String>();
List<String> nameList=new ArrayList<String>();
nameList.add("홍길동");
nameList.add("임꺽정");
nameList.add("전우치");
nameList.add("일지매");
nameList.add("장길산");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<ul>
<% for(String name:nameList) { %>
<li><%=name %></li>
<% } %>
</ul>
</body>
</html>
errorPage 속성에는 JSP 문서 실행시 에러(예외)가 발생될 경우 클라이언트에게 500 에러코드 대신 에러페이지로 응답하기 위한 웹문서의 URL 주소를 속성값으로 설정
<%@ page errorPage="page_error.jsp"%>★[web.xml] 파일에서 모든 웹프로그램의 요청과 실행에 의해 발생되는 에러코드(4XX 또는 5XX)를 클라이언트에게 전달하는 대신 에러페이지로 응답되도록 설정 가능 (클라이언트의 URL 주소 미변경)
사용자 편의성을 위해 제공하는 것이기 때문에 프로젝트 마무리 시점에 작성
<%-- <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="page_error.jsp"%> --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String text=null;//에러발생
int num=10/0;//ArithmeticException 예외 발생
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<p>문자열의 문자갯수 = <%=text.length() %></p>
</body>
</html>
error-page : 에러페이지를 등록하기 위한 엘리먼트
<exception-type>java.lang.NullPointerException</exception-type><location>/error/error_null.jsp</location><error-code>500</error-code>web.xml에서 작성하는 것은 Deployment Descriptor.jsp 에서 확인 가능 (Error Pages)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org
/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>jsp</display-name>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/error_null.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/error_500.jsp</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/error/error_400.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/error_404.jsp</location>
</error-page>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
</web-app>
웹서버에 존재하는 문서파일의 소스코드를 현재 JSP 문서에 포함하는 지시어 (정적포함)
include Directive의 file 속성값으로 동일 서버에 저장된 문서파일의 URL 주소 설정
<%@include file="include_sub.jspf"%><%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<%--
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
--%>
<%-- include Directive의 file 속성값으로 동일 서버에 저장된 문서파일의 URL 주소 설정 --%>
<%-- => file 속성값으로 설정된 문서파일이 없는 경우 에러 발생 --%>
<%-- => 문서파일의 소스코드를 include Directive 명령 위치에 포함하여 실행 --%>
<%@include file="include_sub.jspf"%>
</body>
</html>
JSPF 파일 : 클라이언트 요청에 의한 실행이 목적이 아닌 다른 JSP 문서에 소스코드를 제공하기 위한 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<p>클라이언트에게 응답되는 아주 중요한 내용입니다.</p>
JSP 문서에 태그 라이브러리 파일(TLD)을 불러와 포함하여 커스텀 태그를 제공하는 지시어
<%@taglib prefix="custom" uri="http://www.itwill.xyz/custom"%>
커스텀 태그 명령 실행
<custom:display/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="custom" uri="http://www.itwill.xyz/custom"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<custom:display/>
</body>
</html>
Java Resources 폴더 → src → 패키지안에 생성
태그 클래스 : JSP 문서에서 커스텀 태그 사용시 객체로 생성하기 위한 클래스
package xyz.itwill.custom;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class CustomTag extends TagSupport {
private static final long serialVersionUID = 1L;
//JSP 문서에서 커스텀 태그의 시작태그 사용시 자동 호출되는 메소드
@Override
public int doStartTag() throws JspException {
try {
pageContext.getOut().println("<h3>커스텀 태그 사용</h3>");
} catch (Exception e) {
e.printStackTrace();
}
return super.doStartTag();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">
<tlib-version>0.0</tlib-version>
<short-name>NMTOKEN</short-name>
<uri>http://www.itwill.xyz/custom</uri>
<tag>
<name>display</name>
<tag-class>xyz.itwill.custom.CustomTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>






Java 명령으로 구현해야 하는 기능을 표준 액션 태그로 제공
HTML 태그와 구분하기 위해 [jsp] 네임스페이스(NameSpace) 사용 : JSP 태그
include Directive : 외부파일(JSPF)을 읽어 소스코드(CSL 및 SSL)를 JSP 문서에 포함
<%@include file="header.jspf" %>include ActionTag : 스레드가 이동된 JSP 문서의 실행결과(CSL)를 제공받아 JSP 문서에 포함
<jsp:include page="header.jsp"/>param ActionTag : 스레드가 이동된 JSP 문서로 값을 전달하는 태그
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//요청 JSP 문서 및 스레드가 이동된 JSP 문서에 적용
request.setCharacterEncoding("utf-8");
//전달값을 반환받아 저장
String category=request.getParameter("category");
if(category==null) {//JSP 문서 요청시 전달된 값이 없는 경우
category="main";
}
String headFileName="header.jsp";
String masterName="";
//전달값을 비교하여 Header 영역에 포함될 JSP 문서의 파일명 저장 및 관리자명 저장
if(category.equals("main")) {
headFileName="header_main.jsp";
masterName="홍길동(hong@itwill.xyz)";
} else if(category.equals("blog")) {
headFileName="header_blog.jsp";
masterName="임꺽정(lim@itwill.xyz)";
} else if(category.equals("cafe")) {
headFileName="header_cafe.jsp";
masterName="전우치(cheon@itwill.xyz)";
} else {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<%-- Header 영역 --%>
<%--
<h1>메인페이지</h1>
<a href="index.jsp?category=main">메인</a>
<a href="index.jsp?category=blog">블로그</a>
<a href="index.jsp?category=cafe">카페</a>
<hr>
--%>
<%-- include ActionTag : 스레드가 이동된 JSP 문서의 실행결과를 제공받아 JSP문서에 포함 --%>
<%-- <jsp:include page="header.jsp"/> --%>
<jsp:include page="<%=headFileName %>"/>
<%-- Content 영역 --%>
<p>요청에 의해 응답되는 아주 중요한 내용입니다.</p>
<%-- Footer 영역 --%>
<%--
<hr>
<p>Copyright ©itwill Corp. All rights reserved.</p>
<!-- <p>관리자 : 홍길동(hong@itwill.xyz)</p> -->
<p>관리자 : <%=masterName %></p>
--%>
<%-- param ActionTag : 스레드가 이동된 JSP 문서로 값을 전달하는 태그 --%>
<%-- => 리퀘스트 메세지의 몸체부에 값을 저장하여 스레드가 이동된 JSP 문서로 전달 --%>
<jsp:include page="footer.jsp">
<jsp:param value="<%=masterName %>" name="masterName"/>
</jsp:include>
</body>
</html>
- 스레드가 이동된 JSP 문서에서는 request 객체와 response 객체의 사용 제한 발생
문제점 1) 스레드가 이동된 JSP 문서에서는 request 객체에 대한 리퀘스트 메세지 관련 정보 변경 불가능
문제점 2) 스레드가 이동된 JSP 문서에서는 response 객체를 이용하여 클라이언트에게 에러코드나 URL 주소를 전달 불가능
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//스레드가 이동된 JSP 문서에서는 request 객체에 대한 리퀘스트 메세지 관련 정보 변경 불가능
//request.setCharacterEncoding("utf-8");
String masterName=request.getParameter("masterName");
if(masterName==null) {
//문제점)스레드가 이동된 JSP 문서에서는 response 객체를 이용하여 클라이언트에게
//에러코드나 URL 주소를 전달 불가능
//해결법) 자바스크립트로 응답 처리하여 페이지 이동 가능
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
%>
<hr>
<p>Copyright ©itwill Corp. All rights reserved.</p>
<%-- <p>관리자 : 홍길동(hong@itwill.xyz)</p> --%>
<p>관리자 : <%=masterName %></p>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- int su=100; --%>
<h1>메인페이지</h1>
<a href="index.jsp?category=main">메인</a>
<a href="index.jsp?category=blog">블로그</a>
<a href="index.jsp?category=cafe">카페</a>
<hr>
forward ActionTag : 요청 JSP 문서에 page 속성값으로 설정된 JSP 문서로 스레드를 이동하여 명령을 실행하고 처리결과를 클라이언트에게 전달하여 응답하기 위한 태그
<jsp:forward page="<%=filePath %>"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//전달값을 반환받아 저장
String category=request.getParameter("category");
if(category==null) {//전달값이 없는 경우
//클라이언트에게 URL 주소가 전달되도록 응답 처리
//URL 주소를 전달받은 클라이언트는 브라우저의 URL 주소를 변경하여 서버의
//자원을 요청하여 결과를 응답받아 출력 (페이지 이동)
response.sendRedirect("main.jsp");//리다이렉트 이동
return;
}
//전달값을 이용하여 스레드가 이동될 JSP 문서의 파일 경로를 생성하여 저장
String filePath=category+".jsp";
//System.out.println("filePath = "+filePath);
%>
<%-- forward ActionTag : page 속성값으로 설정된 JSP 문서로 스레드를 이동하여
명령을 실행하고 처리결과를 클라이언트에게 전달하여 응답하기 위한 태그 --%>
<%-- 클라이언트에 상관없이 서버측에서 이동 (클라이언트 브라우저의 URL 주소 미변경) --%>
<jsp:forward page="<%=filePath %>"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>메인 페이지</h1>
<hr>
<%--
<a href="company.jsp">회사연혁</a>
<a href="product.jsp">제품소개</a>
<a href="order.jsp">주문내역</a>
<a href="review.jsp">사용후기</a>
--%>
<a href="controller.jsp?category=company">회사연혁</a>
<a href="controller.jsp?category=product">제품소개</a>
<a href="controller.jsp?category=order">주문내역</a>
<a href="controller.jsp?category=review">사용후기</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>회사연혁 페이지</h1>
<hr>
<a href="main.jsp">메인 페이지</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
package xyz.itwill.bean;
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;
}
}
- 리다이렉트 이동하여 응답하는 방법 (session scope를 이용하여 이동)
- 리다이렉트 이동 : 클라이언트에게 URL 주소를 전달하여 다른 JSP 문서를 요청시켜 실행결과로 응답 처리
- 클라이언트 브라우저의 URL 주소 변경 (클라이언트를 이용하여 JSP 문서 이동)
- session 내장객체를 이용하여 객체를 속성값으로 저장하여 응답 JSP 문서에서 반환받아 사용 가능
- 응답 JSP 문서에서는 session 내장객체에 저장된 속성값을 객체로 반환받은 후 반드시 제거
response.sendRedirect("non_useBean_display.jsp");(session Scope)
- 포워드 이동하여 응답하는 방법 (request scope를 이용하여 이동)
- 포워드 이동 : 요청 JSP 문서에서 응답 JSP 문서로 스레드를 이동하여 응답 처리
- 클라이언트 브라우저의 URL 주소 미변경 (서버에서 JSP 문서간의 이동)
- request 내장객체를 이용하여 객체를 속성값으로 저장하여 응답 JSP 문서에서 반환받아 사용 가능
- 요청 JSP 문서 및 응답 JSP 문서를 제외한 다른 JSP 문서에서는 request 내장객체의 속성값 사용 불가능
request.setAttribute("hewon", hewon);(request Scope)
- 포워드 이동하기 위한 Java 명령 (forward 태그와 동일한 기능 제공)
- request.getRequestDispatcher(String url) : URL 주소가 저장된 RequestDispatcher 객체를 반환하는 메소드
- RequestDispatcher 객체 : 다른 웹프로그램으로 스레드를 이동하기 위한 기능을 제공하는 객체
- RequestDispatcher.forward(ServletRequest request, ServletResponse response)
: 요청 웹프로그램에서 다른 웹프로그램으로 스레드를 이동시켜 응답처리하기 위한 메소드 (포워드 이동)- 요청 웹프로그램의 request 객체와 response 객체를 스레드가 이동되는 웹프로그램으로 전달
request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);
<%@page import="xyz.itwill.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//비정상적인 요청에 대한 처리
if(request.getMethod().equals("GET")) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
request.setCharacterEncoding("utf-8");
//전달값을 반환받아 저장
String name=request.getParameter("name");
String phone=request.getParameter("phone");
String address=request.getParameter("address");
//VO 클래스로 객체를 생성하여 전달값으로 필드값 변경
Hewon hewon=new Hewon();
hewon.setName(name);
hewon.setPhone(phone);
hewon.setAddress(address);
//Java 명령을 사용하여 현재 요청 JSP 문서가 아닌 다른 JSP 문서로 응답되도록 구현하는 방법
// → 1. 리다이렉트 이동하여 응답하는 방법 및 2.포워드 이동하여 응답하는 방법
//리다이렉트 이동 : 클라이언트에게 URL 주소를 전달하여 다른 JSP 문서를 요청시켜 실행결과로 응답 처리
session.setAttribute("hewon", hewon);//session 내장객체를 이용하여 속성값 저장 (session Scope)
response.sendRedirect("non_useBean_display.jsp");//리다이렉트 이동
//포워드 이동 : 요청 JSP 문서에서 응답 JSP 문서로 스레드를 이동하여 응답 처리 (URL 주소 미변경)
//→ 요청 JSP 문서 및 응답 JSP 문서를 제외한 다른 JSP 문서에서는 request 내장객체의 속성값 사용 불가능
request.setAttribute("hewon", hewon);//request 내장객체를 이용하여 속성값 저장 (request Scope)
//포워드 이동하기 위한 Java 명령 - forward 태그와 동일한 기능 제공
//request.getRequestDispatcher(String url) : URL 주소가 저장된 객체를 반환하는 메소드 (스레드 이동)
//RequestDispatcher.forward(ServletRequest request, ServletResponse response) : 요청
//웹프로그램에서 다른 웹프로그램으로 스레드를 이동시켜 응답처리하기 위한 메소드 (포워드 이동)
request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);
%>
session 내장객체에 저장된 속성값을 반환받아 저장
Hewon hewon=(Hewon)session.getAttribute("hewon");session.removeAttribute("hewon");request 내장객체에 저장된 속성값을 반환받아 저장
Hewon hewon=(Hewon)request.getAttribute("hewon");
<%@page import="xyz.itwill.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--
//비정상적인 요청에 대한 처리
if(session.getAttribute("hewon")==null) {//session 내장객체에 저장된 속성값이 없는 경우
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//1. session 내장객체에 저장된 속성값을 반환받아 저장
Hewon hewon=(Hewon)session.getAttribute("hewon");
//다른 JSP 문서에서 session 내장객체에 저장된 속성값을 사용하지 못하도록 속성값 제거
session.removeAttribute("hewon");
--%>
<%
//비정상적인 요청에 대한 처리
if(request.getAttribute("hewon")==null) {//request 내장객체에 저장된 속성값이 없는 경우
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//2. 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>
<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/><jsp:setProperty name="hewon" property="name" value="홍길동"/>hewon.setName("홍길동");과 동일<jsp:setProperty name="hewon" property="*"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//비정상적인 요청에 대한 처리
if(request.getMethod().equals("GET")) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
request.setCharacterEncoding("utf-8");
%>
<%-- useBean ActionTag : JSP 문서에 객체를 제공하기 위한 태그 --%>
<%-- 형식) <jsp:useBean id="식별자" class="클래스" scope="사용범위"/> --%>
<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>
<%--
Hewon hewon=new Hewon();
request.setAttribute("hewon", hewon); 와 동일
--%>
<%-- setProperty ActionTag : useBean 태그로 제공된 객체의 필드값을 변경하기 위한 태그 --%>
<%-- 형식)<jsp:setProperty name="식별자" property="필드명" value="값"/> --%>
<%-- <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);
포워드 이동하기 위한 Java 명령 (스레드 이동)
--%>
useBean 태그를 사용하여 request 내장객체에 저장된 속성값을 객체로 반환받아 저장
<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>getProperty ActionTag : useBean 태그로 제공된 객체의 필드값을 반환받기 위한 태그
<jsp:getProperty name="hewon" property="name"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//비정상적인 요청에 대한 처리
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="필드명"/> --%>
<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>
JavaBean 클래스 : 웹프로그램 실행을 위해 WAS 프로그램에 의해 자동 생성되어 관리되는 객체를 생성하기 위한 클래스
JavaBean 클래스 작성규칙