내장 객체(내장 변수)란?
JSP가 서블릿으로 변환 시 톰캣 컨테이너가 자동으로 생성 시키는 서블릿 멤버 변수
JSP에서 제공하는 내장 객체들
내장 객체 | 서블릿 | 설명 |
request | javax.servlet.http.HttpServletRequest | 클라이언트의 요청 정보를 저장 |
session (* 아래 추가 설명) | javax.servlet.http.HttpSession | 세션 정보를 저장 |
application | javax.servlet.ServletContext | 컨텍스트 정보를 저장 |
page | java.lang.Object | JSP 페이지의 서블릿 인스턴스를 저장 |
내장 객체들의 스코프
내장 객체 | 서블릿 | 스코프 |
page | this | 한 번의 요청에 대해 하나의 JSP 페이지를 공유 |
request | HttpServletRequest | 한 번의 요청에 대해 같은 요청을 공유하는 JSP 페이지를 공유 |
session | HttpSession | 같은 브라우저에서 공유 |
application | ServletContext | 같은 애플리케이션에서 공유 |
Java HttpSession(javax.Servlet.Http) 소개
- HttpSession은 Java의 인터페이스(interface)이며, 이를 사용하여 세션(session)을 제어
- session은 쿠키(cookie)의 트래픽(traffic) 이슈(issue)와 cookie 변경으로 인한 보안 issue를 해결하기 위해 등장
- HttpSession 객체는 HttpServletRequest의 getSession()이나 getSession(true) 메소드를 이용하여 생성
session
- HTTP 기반으로 동작하는 클라이언트가 서버에 정보를 요청할 때 생성되는 "상태정보"
- 세션은 HttpSession이라는 인터페이스 객체로 표현
- client에 저장되는 쿠키(cookie)와 다르게 server에 저장되므로 관리가 용이하고 효율적이며 보안에 강함
관련 메서드
- HttpServletRequest의 getSession()
이미 세션이 있다면 그 세션을 돌려주고, 세션이 없으면 새로운 세션을 생성한다. request.getSession()로 쓸 수 있다.(HttpSession session = request.getSession();)
- getAttribute(String name)
HttpSession 객체에 등록된 정보 중 getAttribute() 메소드의 인자값으로 지정된 데이터의 값을 반환한다.
- getAttributeNames()
HttpSession 객체에 등록되어 있는 모든 정보의 이름만을 반환한다.
- invalidate()
현재의 세션을 삭제한다.
session 내장 객체에 데이터 바인딩 실습
1) Session Test 클래스를 다음과 같이 작성한다.
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//요청 처리
request.setCharacterEncoding("utf-8");
//비즈니스 로직 처리
HttpSession session = request.getSession(); //HttpSession 객체를 생성하거나 가져옴
session.setAttribute("name", "이순신"); //session 객체 name 속성을 바인딩
//응답 처리
response.setContentType("text/html; charset=utf-8");
PrintWriter pw = response.getWriter();
pw.println("<!DOCTYPE html>");
pw.println("<html><head><meta charset='utf-8'><title>HttpSession사용</title></head><body>");
pw.println("<h1>세션에 이름을 바인딩합니다.</h1>");
pw.println("<a href='/pro12/test01/session1.jsp'>첫번째 session1.jsp 페이지로 이동</a>");
pw.println("</body></html>");
pw.flush();
pw.close();
}
2) session1.jsp 파일을 다음과 같이 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("utf-8"); %>
<%
//JSP session 객체에 바인딩 된 값을 가져옵니다.
String name = (String)session.getAttribute("name");
//session 객체에 address 속성을 바인딩합니다.
session.setAttribute("address", "서울시 xx구");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP session 내장객체 테스트</title>
</head>
<body>
이름은 <%=name %> 입니다. <br><br>
<a href="/pro12/test01/session2.jsp">두 번째 session2.jsp 페이지로 이동</a>
</body>
</html>
3) session2.jsp 파일을 다음과 같이 작성한다.
getAttribute()를 이용해 서블릿과 JSP에서 session에 바인딩된 name과 address 값을 가져온다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("utf-8");
//JSP session 객체에 바인딩 된 값을 가져옵니다.
String name = (String)session.getAttribute("name");
String address = (String) session.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP session 내장겍체 테스트2</title>
</head>
<body>
이름은 <%=name %> 입니다. <br><br>
주소는 <%=address %> 입니다. <br><br>
<a href="/pro12/sess120101">sess120101 서블릿 호출</a>
</body>
</html>
4) 화면 구현
웹 브라우저에서 http://localhost:8080/pro12/sess120101 URL로 서블릿에 요청한다. 서블릿 요청 시 session 객체에 name을 바인딩한다.
위에서 첫번째 페이지로 이동하기 클릭 시, session1.jsp 파일이 호출되며 session1.jsp JSP서블릿의 처리에 의해서 서블릿에서 바인딩 된 name을 출력한다.
서블릿과 첫 번째 JSP에서 바인딩 된 이름(name)과 주소(address)가 출력된다.
'JSP' 카테고리의 다른 글
230419_JSP 스크립트 요소, 기능 (1) | 2023.04.19 |
---|---|
230419_JSP의 기초 개념 (0) | 2023.04.19 |