Study/Java

[JSP] JSP에서의 session 관련 메소드 학습

black6765 2022. 11. 28. 19:47

Session 개요

Session

  • Web Server에서 상태를 유지하기 위한 정보
    • http의 Stateless를 보완
    • 브라우저를 닫거나, 세션 만료 시간이 지나거나, 서버에서 세션을 삭제했을 때 제거
  • 세션은 사용자의 정보를 유지하기 위해 javax.servlet.http 패키지의 HttpSession 인터페이스를 구현해서 사용
  • 쿠키보다 좀 더 안정적이고, 보안성이 높다고 할 수 있음
    • 쿠키는 사용자의 컴퓨터에 저장되고 세션은 서버에 저장됨
  • 세션은 각 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장

주요 Session Method

  • void setAttribute(String name, Object value)
    • 속성 명을 name으로, 값을 value로 할당
    • 이미 존재하는 속성 명이라면 덮어씌움
  • Object getAttribute(String name)
    • 세션 속성 명이 name인 속성의 값을 Object 타입으로 리턴
    • 해당 name이 없을 경우 null을 리턴
  • void removeAttribute(String name)
    • 속성 명이 name인 속성을 삭제
  • Enumeration getAttributesNames()
    • 모든 세션 속성 이름을 Enumeration 타입으로 리턴
  • long getCreationTime()
    • 기준 시간부터 현재 세션이 생성된 시간까지 경과한 시간을 계산
    • 기준 시간은 1970-01-01-00-00
  • String getId()
    • 세션에 할당된 고유 식별자를 String 타입으로 리턴
    • 즉, 세션의 ID를 리턴함
  • int getMaxInactiveInterval()
    • 현재 세션에 설정된 유지 시간을 리턴
  • void setMaxInactiveInterval(int interval)
    • 세션 유지 시간을 설정(단위: Seconds)
  • void invaildate()
    • 현재 세션을 invalidate함

Session Attribute

세션 객체는 웹 브라우저와 매핑됨

  • 해당 웹 브라우저를 닫을 때까지 같은 창에서 열린 페이지는 같은 Session 객체를 공유
  • 세션의 속성 값은 객체 형태만 가능함

Eclipse를 통한 JSP 생성 및 war로 배포

Step 1. 환경설정

  • tomcat, eclipse, jdk가 준비되어 있어야 함
  • Tomcat : Tomcat v9.0 Server
  • Eclipse : 2022-09 / Eclipse IDE for Enterprise Java and Web Developers 패키지
  • JDK : 1.8

Step 2. 프로젝트 생성

  • 메뉴의 [File] → [New] → [Other]에서 Server → Server를 선택 → Next
  • 해당 글에서는 server type을 Apache → Tomcat v9.0 Server로 진행 → Next
  • Tomcat 설치 디렉토리를 설정해주거나, Download and Install로 톰캣을 다운로드
    • 해당 글에서는 Download and Install 이용
    • /home/user/eclipse/apache-tomcat-9.0.62 디렉토리에 설치
  • JDK(JRE) 설정
    • Installed JREs… → Add → Standard VM → JRE home에 JDK의 home을 Directory로 설정
  • Finish를 누르면 [Servers]가 생성된 것을 확인 가능

Step 3. Dynamic Web Project 생성

  • [File] → [New] → [Dynamic Web Project]
  • Project Name을 설정한 뒤 Finish → Project Name에 대한 루트 디렉토리가 생성됨
  • [프로젝트 루트 디렉토리] → src → main → webapp(META-INF, WEB-INF가 있는 디렉토리)에서 [New] → [JSP File]
  • 파일 이름을 정하고 finish
    • 여기서는 index.jsp로 진행

Step 4. JSP 파일 내용 작성

  • 기본 동작을 확인하기 위해 간단한 테스트 코드 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>sessionTestApp</title>
</head>
<body>
<p>JSP TEST</p>

<%
	out.println("Hello JSP");
%>

</body>
</html>
  • [상단 바] - [Run Index.jsp] → 톰캣 지정 → Next → Configured에 [Project Name]이 있는 것을 확인 후 Finish

Step 5. process.jsp 작성

  • 테스트 애플리케이션은 하이퍼링크를 통해서 특정 request를 발생시켜 테스트를 진행할 수 있음
  • 별도의 파일인 process.jsp에 들어오는 쿼리에 대한 분기를 통해 테스트 애플리케이션 작성 가능
  • 예시 파일
    • index.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>sessionTestApp</title>
    </head>
    <body>
    <h2>JSP TEST</h2>
    
    <%
    	out.println("Hello JSP");
    	String id = session.getId();
    %>
    
    </br>
    
    <%
    	out.println("id = " + id);
    %>
    
    </br>
    
    <!-- 
    ~/process.jsp?value=[텍스트 입력 값]으로 request 전송
    즉, 쿼리의 값을 사용자로부터 입력받을 수 있음
    -->
    <form action="process.jsp">
    	텍스트 입력
      <input type="text" name="value">
    </form>
    
    <tr>
    	<td align="left">Invalidate Test</td>
    	</br>
    	<td align="left"><a href="process.jsp?value=invalidate">Invalidate 실행</a></td>
    	</br>
    	<td align="left"><a href="process.jsp?value=setAttr">setAttribute 실행</a></td>
    	</br>
    	<td align="left"><a href="process.jsp?value=123">실행</a></td>
    	</br>
    </tr>
    
    <%
    	out.println("Attribute value : " + session.getAttribute("attributeName"));
    %>
    
    </body>
    </html>
    
    • process.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>
    
    <%
    
    	// index.jsp에서 process.jsp로 요청할 때 [process.jsp?value=invalidate"]와 같이 요청
    	// 이 중 ? 뒤에 쿼리에서 있는 value=[값] 부분에 따라 다른 명령을 실행할 수 있음
    	if (request.getParameter("value").equals("invalidate")) {
    		session.invalidate();
    		response.sendRedirect("index.jsp");
    	} else if (request.getParameter("value").equals("setAttr")) {
    		session.setAttribute("attributeName", "testValue");
    		response.sendRedirect("index.jsp");
    	} else {
    		out.println(request.getParameter("value"));
    	}
    
    	// 위의 명령 실행 후 index.jsp 페이지로 돌아감
    	
    %>
    
    </body>
    </html>
    

Step 6. war 파일로 export

  • [File] → [Export] → WAR 검색 → [WAR file] 선택 →Next → Web project 선택(방금 만든 프로젝트 명) → 파일 경로 선택(Destination) → Optimize for a specific server runtime 체크 해제 → finish
  • Destination으로 선택한 디렉토리에 war 파일이 저장 됨

참고자료