Java Spring Boot - JSP / Session Management
Page 이동방법
- 서블릿에서 직접 html 코드로 출력스트림 응답
- 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 특성
- connectionless
- 요청 ~ 응답 연결 해제
- 서버 부하 감소
- 서버 문제가 발생되어도 응답 결과에 대해서는 그대로 사용가능
- stateless
- 상태정보를 저장하지 않음
- 장바구니, 로그인 인증정보 등 상태정보 유지를 필요로 하는 서비스는? → Session Management 사용
상태정보 저장 관련 API
-
Cookie
— class javax.servlet.http.Cookie
- Cookie(String name, String value)
-
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() : 새로운 세션여부
-
-
URLRewriting
- 실제 서비스에서 거의 사용되지 않음
Cookie
- 상태정보 저장
- 상태정보는 문자열만 가능
- 쿠키 객체 크기 제한
- 쿠키 객체 갯수 제한
HttpSession
- 상태정보 저장
- 상태정보를 객체로 저장 (모든 데이터 가능)
- 서버에 상태정보 저장이 되기 때문에 크기, 갯수 제한 없음
- HttpSession을 이용한 세션처리를 권장
URLRewriting
- 사용자가 쿠키 저장을 허용하지 않는 경우
- 페이지 이동할때마다 url 뒤에 ‘세션id=xxxx’를 붙임
- 실제 서비스는 가능하지만 세션을 허용하지 않는 사용자에게까지 서비스를 제공하는 사이트는 실질적으로 없음
로그아웃 요청 ~ 응답객체 도달 과정
— 전제조건: 로그인 (HttpSession이 존재하면서 사용자인증 세션정보 (아이디, 등급))
- 요청 view : 회원전용 서비스 페이지 (*.jsp)
- Controller : LogoutServlet → logout
- Model Service : 로그아웃 처리 로직에 따라서 Model 처리여부 달라짐
- Model DAO
- Model 결과처리
- 응답위한 설정
- 응답페이지 이동
JSP (Java Server Page)
— 동적 화면을 작성하기위한 자바 기술
- view 담당
- JSP의 구성요소
- html tag, plain-text
- jsp tag : 5개 → <% java code %>
- action tag : 몇개
- JSTL(Java Standard Tag Library) / EL(Expression Language)
- Custom tag : 사용자가 정의해서 사용하는 태그
JSP 페이지 요청 흐름도
-
comment.jsp 요청
-
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
-
comment_jsp.java 자바 컴파일 → comment_jsp.class
-
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
— 기본형식 : <%[기호 또는 기호없음] %>
-
주석태그
- html 주석태그와 동일
- 응답시에 함께 포함
- 사용자 소스보기가 가능
- view layout
<% // java 한줄 주석 %>, <% /* java 여러줄 주석 */ %>
- a.jsp → a_jsp.java 소스코드 변환시에 포함되는 주석
- 개발자 주석, jsp debug 목적으로 주로 사용
<%– jsp 주석 –%>
- a.jsp 페이지 안에서만 볼 수 있는 jsp 개발자 주석
- a_jsp.java 소스코드 변환시에 포함되지 않는 주석
-
directive 지시어 태그
-
jsp가 java 변환시에 부가정보 관련 태그
-
<%@ 지시어태그명 속성명=”속성값” 속성명=’속성값’ %>
-
지시어태그 종류:
<%@ page contentType=”text/html; charset=UTF-8” import=”java.util.ArrayList” %>
<%@ tablib %> : JSTL 사용 지시어
<%@ include %> : 조각페이지 삽입 사용 지시어
-
-
declaration 정의어 태그
- <%! 멤버변수 선언, 메서드 선언 %>
- 멤버변수, 메서드 정의 태그
- life cycle 메서드 재정의
-
expression 태그
- <%= 값 %>
- 값을 view에 출력
- 값, 변수명, 수식, 결과값을 반환하는 메서드 호출문(), new 클래스이름()
- 변환시에 out.write(값);
- 따라서 값 뒤에 ; 을 표기해서는 안됨
- <%= name; %> → out.write(name;); → 오류발생
-
scriptlet 태그
- <% java 서비스 코드 %>
- jsp 페이지가 java 변환시에 _jspService() 메서드의 내부코드로 변환
- 서비스 제공하는 코드를 위한 태그
jsp life cycle
- 초기화 메서드 재정의: public void jspInit() { // … }
- 자원해제 메서드 재정의 : public void jspDestroy {/ …. }
- 서비스 메서드
- _jspService() 메서드는 컨테이너에서 자동으로 변환 처리되므로 재정의 불가
- <%= %>, <% %> 태그로 작성된 내용을 컨테이너에서 자동으로 _jspService() 메서드 내부로 자동변환 서비스 제공
댓글남기기