본문 바로가기

JSP

230421_JSP의 내장 객체(내장 변수) 개념 및 session 내장 객체 실습

내장 객체(내장 변수)란?

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에 바인딩된 nameaddress 값을 가져온다.

<%@ 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