JSP 페이지의 내장 객체(내장 변수)란 JSP가 서블릿으로 변환될 때 컨테이너가 자동으로 생성시키는 서블릿 멤버 변수를 말한다. 즉, 서블릿으로 구현 시 자주 사용했던 객체를 개발자가 일일이 만드는 것이 아니라 서블릿으로 변환시 컨테이너가 자동으로 생성하여 사용하게끔 제공하는 것이다.
내장 객체 | 서블릿 타입 | 설명 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | 클라이언트의 요청 정보를 저장한다. |
response | javax.servlet.http.HttpServletResponse | 응답 정보를 저장한다. |
out | javax.servlet.jsp.JspWriter | JSP 페이지에서 결과를 출력한다. |
session | javax.servlet.http.HttpSession | 세셩 정보를 저장한다. |
application | javax.servlet.ServletContext | 컨텍스트 정보를 저장한다. |
pageContext | javax.servlet.jsp.PageContext | JSP 페이지에 대한 정보를 저장한다. |
page | javax.lang.Object | JSP 페이지의 서블릿 인스턴스를 저장한다. |
config | javax.servlet.ServletConfig | JSP 페이지에 대한 설정 정보를 저장한다. |
exception | javax.lang.Exception | 예외 발생 시 예외를 처리한다. |
내장 객체 | 서블릿 | 스코프 |
---|---|---|
page | this | 한 번의 요청에 대해 하나의 JSP 페이지를 공유한다. |
request | HttpServletRequest | 한 번의 요청에 대해 같은 요청을 공유하는 JSP 페이지를 공유한다. |
session | HttpSession | 같은 브라우저에서 공유한다. |
application | ServletContext | 같은 애플리케이션에서 공유한다. |
<SessionTest.java>
package sec01.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/SessionTest")
public class SessionTest extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter pw = response.getWriter();
HttpSession session = request.getSession(); //session 객체를 가져온다.
session.setAttribute("name", "이순신"); // session 객체에 name을 바인딩한다.
pw.println("<html><body>");
pw.println("<h1>세션에 이름을 바인딩합니다.</h1>");
pw.println("<a href='/javaWebPro/test01/session1.jsp'>첫 번째 페이지로 이동하기</a>");
pw.println("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<session1.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String name=(String)session.getAttribute("name"); // session 객체에 바인딩 된 name 값을 가져온다.
session.setAttribute("address","서울시 강남구"); // session 객체에 ad
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 테스트2</title>
</head>
<body>
이름은 <%=name %>입니다. <br>
<a href=session2.jsp>두 번째 페이지로 이동</a>
</body>
</html>
<session2.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String name=(String)session.getAttribute("name");
String address=(String)session.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session 내장 객체 테스트3</title>
</head>
<body>
이름은 <%=name %>입니다. <br>
주소는 <%=address %>입니다. <br>
</body>
</html>
최초 서블릿에 요청한 결과이다. 서블릿 요청 시 session 객체에 name을 바인딩 한다.
첫 번째 페이지로 이동하기 클릭 시 서블릿에거 바인딩한 name을 출력한다. 두번째 페이지로 이동을 클릭한다.
서블릿과 첫 번째 JSP에서 바인딩한 이름(name)과 주소(address)를 출력한다.
<appTest1.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
session.setAttribute("name", "이순신");
application.setAttribute("address", "서울시 성동구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 스코프 테스트</title>
</head>
<body>
<h1>이름과 주소를 저장한다.</h1>
<a href=appTest2.jsp>두 번째 웹 페이지로 이동</a>
</body>
</html>
<appTest2.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String name=(String)session.getAttribute("name");
String address=(String )application.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 스코프 테스트</title>
</head>
<body>
<h1>이름은 <%=name %>입니다.</h1>
<h1>주소는 <%=address %>입니다.</h1>
</body>
</html>
같은 브라우저에서 요청 할 경우 두 번째 JSP에서 session과 application에 접근할 수 있다.
다른 브라우저에서는 application의 값에만 접근 가능한 것을 확인할 수 있다.
<request1.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setAttribute("name", "이순신");
request.setAttribute("address", "서울시 강남구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
RequestDispatcher dispatch = request.getRequestDispatcher("request2.jsp");
dispatch.forward(request, response);
%>
</body>
</html>
<request2.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String name = (String)request.getAttribute("name");
String address=(String)request.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>이름은 <%=name %>입니다.</h1>
<h1>주소는 <%=address %>입니다.</h1>
</body>
</html>
브라우저에서 request1.jsp로 요청하면 request 객체에 바인딩한 후 request2.jsp로 포워딩하여 이름과 주소를 출력한다.
<out1.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="out2.jsp">
이름:<input type="text" name="name"><br>
나이:<input type="text" name="age"><br>
<input type="submit" value="전송">
</form>
</body>
</html>
<out2.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String age=request.getParameter("age");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
if(name!=null || name.length()!=0){
%>
<h1><%=name %>, <%=age %> </h1>
<%
}else{
%>
<h1>이름을 입력하세요</h1>
<%
}
%>
<%
if(name!=null || name.length()!=0){
%>
<h1><% out.println(name+" , "+age); %></h1>
<%
}else{
%>
<h1>이름을 입력하세요</h1>
<%
}
%>
</body>
</html>
브라우저에서 요청하여 이름과 나이를 입력한 후 전송하면
전달받은 정보를 표현식과 out 내장 객체로 출력한다.
페이지 예외 처리란 프로그램 실행 시 예외나 오류가 발생할 경우 이를 안내하는 페이지다. 즉 전용 예외 처리 페이지가 나타나게 하여 좀 더 신뢰 있고 사용자 친화적은 웹 페이지를 만들 수 있게 한다.