Java Spring Boot - JSP / Session Management

3 분 소요

Page 이동방법

  1. 서블릿에서 직접 html 코드로 출력스트림 응답
  2. redirect, forward 를 이용해서 JSP 페이지 이동

forward

  • 기존 요청객체, 응답객체를 가지고 페이지이동

  • 기존 요청객체에 설정되어 있는 정보를 이동페이지에서 사용 가능

    ⇒ RequestDispatcher getRequestDispatcher (java.lang.String path)

    ⇒ void forward(ServletRequest request, ServletResponse response)

    ⇒ void setAttribute(java.lang.String name, java.lang.Object o)

    ⇒ java.lang.Object getAttribute(java.lang.String name) : 사용시에 형변환이 필요할 수 있음

    ⇒ void removeAttribute(java.lang.String name)

redirect

  • 새로운 요청객체, 응답객체를 생성해서 페이지 이동
  • 기존 요청객체로 설정되어 있는 정보 사용 불가

응답 설정 객체 Scope

  • HttpServletRequest : 요청 ~ 응답 범위
  • HttpSession : 로그인 ~ 로그아웃(타임아웃) 범위
  • ServletContext : 어플리케이션 시작(웹서비스 시작) ~ 어플리케이션 중지 (웹서비스 중지)

JSP Tag

— 동적 화면을 위한 JSP 기본 태그

Session Management

  • 상태정보를 저장하기 위한 방법 (API)
    • 로그인 ~ 로그아웃(타임아웃) 동안 사용자의 로그인 정보를 유지하는 방법

http 특성

  1. connectionless
    • 요청 ~ 응답 연결 해제
    • 서버 부하 감소
    • 서버 문제가 발생되어도 응답 결과에 대해서는 그대로 사용가능
  2. stateless
    • 상태정보를 저장하지 않음
    • 장바구니, 로그인 인증정보 등 상태정보 유지를 필요로 하는 서비스는? → Session Management 사용

상태정보 저장 관련 API

  1. Cookie

    — class javax.servlet.http.Cookie

    • Cookie(String name, String value)
  2. HttpSession

    — interface javax.servlet.http.HttpSession

    • HttpSession getSession()

    • HttpSession getSession(boolean create)

      ⇒ true : 세션이 없으면 new 생성, 있으면 기존세션 반환, 로그인(인증) 서비스에서 true 설정

      ⇒ false : 세션이 없으면 null 반환, 있으면 기존세션 반환, 회원전용 서비스에서 false 설정, JSP 페이지에서 자동 생성됨. 세션유무로 인증여부를 체킹해서는 안됨

    • 권장 사용

    • JSP 내장객체에서 자동으로 세션객체(true)를 생성하여 제공

    • view(JSP 페이지) → Servlet Controller

    • HttpSession 주요 API

      • java.lang.String getId() : 세션 ID 조회

    • long getCreationTime() : 세션 생성 시간
    • long getLastAccessedTime() : 마지막 access 시간

    • Object getAttribute(String name) : 세션 설정 정보 조회
    • void removeAttribute(java.lang.String name) : 세션 설정 정보 삭제
    • void setAttribute(java.lang.String name, java.lang.Object value) : 세션 설정

    • void invalidate() : 세션 종료 (로그아웃)
    • void setmaxInactiveInterval(int interval) : 세션 유지시간 설정
    • boolean isNew() : 새로운 세션여부
  3. URLRewriting

    • 실제 서비스에서 거의 사용되지 않음
  • 상태정보 저장
  • 상태정보는 문자열만 가능
  • 쿠키 객체 크기 제한
  • 쿠키 객체 갯수 제한

HttpSession

  • 상태정보 저장
  • 상태정보를 객체로 저장 (모든 데이터 가능)
  • 서버에 상태정보 저장이 되기 때문에 크기, 갯수 제한 없음
  • HttpSession을 이용한 세션처리를 권장

URLRewriting

  • 사용자가 쿠키 저장을 허용하지 않는 경우
  • 페이지 이동할때마다 url 뒤에 ‘세션id=xxxx’를 붙임
  • 실제 서비스는 가능하지만 세션을 허용하지 않는 사용자에게까지 서비스를 제공하는 사이트는 실질적으로 없음

로그아웃 요청 ~ 응답객체 도달 과정

— 전제조건: 로그인 (HttpSession이 존재하면서 사용자인증 세션정보 (아이디, 등급))

  1. 요청 view : 회원전용 서비스 페이지 (*.jsp)
  2. Controller : LogoutServlet → logout
  3. Model Service : 로그아웃 처리 로직에 따라서 Model 처리여부 달라짐
  4. Model DAO
  5. Model 결과처리
  6. 응답위한 설정
  7. 응답페이지 이동

JSP (Java Server Page)

— 동적 화면을 작성하기위한 자바 기술

  • view 담당
  • JSP의 구성요소
    1. html tag, plain-text
    2. jsp tag : 5개 → <% java code %>
    3. action tag : 몇개
    4. JSTL(Java Standard Tag Library) / EL(Expression Language)
    5. Custom tag : 사용자가 정의해서 사용하는 태그

JSP 페이지 요청 흐름도

  1. comment.jsp 요청

  2. comment_jsp.java 자바소스코드 변환

    ⇒ tomcat 운영 위치: tomcat\work\project> *.java, *.class

    ⇒ eclipse 개발 위치: workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\mms03\org\apache\jsp\jsp> comment_jsp.java

  3. comment_jsp.java 자바 컴파일 → comment_jsp.class

  4. JSP life cycle에 의해서 변환된 jsp 서블릿 서비스 제공

JSP 내장객체

  • JSP Container가 자동으로 생성해서 제공해주는 객체

  • jsp 페이지가 java 코드로 변환시에 자동으로 제공해주는 객체

  • _jspService() 메서드 내부에서만 사용가능한 지역변수

  • HttpServletRequest : request

    <%= request.getAttribute(“key”) %>

  • HttpSession : session

    <%= session.getId() %>

예)

final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;

JSP tag

— 기본형식 : <%[기호 또는 기호없음] %>

  1. 주석태그

    • html 주석태그와 동일
    • 응답시에 함께 포함
    • 사용자 소스보기가 가능
    • view layout

    <% // java 한줄 주석 %>, <% /* java 여러줄 주석 */ %>

    • a.jsp → a_jsp.java 소스코드 변환시에 포함되는 주석
    • 개발자 주석, jsp debug 목적으로 주로 사용

    <%– jsp 주석 –%>

    • a.jsp 페이지 안에서만 볼 수 있는 jsp 개발자 주석
    • a_jsp.java 소스코드 변환시에 포함되지 않는 주석
  2. directive 지시어 태그

    • jsp가 java 변환시에 부가정보 관련 태그

    • <%@ 지시어태그명 속성명=”속성값” 속성명=’속성값’ %>

    • 지시어태그 종류:

      <%@ page contentType=”text/html; charset=UTF-8” import=”java.util.ArrayList” %>

      <%@ tablib %> : JSTL 사용 지시어

      <%@ include %> : 조각페이지 삽입 사용 지시어

  3. declaration 정의어 태그

    • <%! 멤버변수 선언, 메서드 선언 %>
    • 멤버변수, 메서드 정의 태그
    • life cycle 메서드 재정의
  4. expression 태그

    • <%= 값 %>
    • 값을 view에 출력
    • 값, 변수명, 수식, 결과값을 반환하는 메서드 호출문(), new 클래스이름()
    • 변환시에 out.write(값);
    • 따라서 값 뒤에 ; 을 표기해서는 안됨
      • <%= name; %> → out.write(name;); → 오류발생
  5. scriptlet 태그

    • <% java 서비스 코드 %>
    • jsp 페이지가 java 변환시에 _jspService() 메서드의 내부코드로 변환
    • 서비스 제공하는 코드를 위한 태그

jsp life cycle

  1. 초기화 메서드 재정의: public void jspInit() { // … }
  2. 자원해제 메서드 재정의 : public void jspDestroy {/ …. }
  3. 서비스 메서드
    • _jspService() 메서드는 컨테이너에서 자동으로 변환 처리되므로 재정의 불가
    • <%= %>, <% %> 태그로 작성된 내용을 컨테이너에서 자동으로 _jspService() 메서드 내부로 자동변환 서비스 제공

댓글남기기