Spring | Session 정보 등록, 삭제, 확인

brightbell·2023년 9월 27일

Spring

목록 보기
8/12

세션에 저장하기

session에 저장된 정보는 브라우저를 닫기 전까지 저장된다.
스프링에서는 매개변수로 직접 HttpSession를 선언가능하다.

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <%-- MyController04으로 요청 --%>
  <div>
    <a href="${contextPath}/article/add.do?title=이럴수가">기사 등록하기</a> 
  </div>

</body>
</html>  

1. HttpServletRequest로부터 HttpSession 얻기

@Controller
public class MyController04 {

  @GetMapping("/article/add.do")
  public String articleAdd(HttpServletRequest request) {
    HttpSession session = request.getSession();
    session.setAttribute("title", request.getParameter("title"));
    return "article/result";
  }

2. HttpSession 선언하기

  @GetMapping("/article/add.do")
  public String add2(HttpSession session, HttpServletRequest request) {
    session.setAttribute("title", request.getParameter("title"));
    return "article/result";
  }

3. @SessionAttributes

1) 클래스 레벨의 annotation이다.
2) Model에 값을 저장하면 HttpSession에 함께 저장된다.

  @GetMapping("/article/add.do")
  public String add3(HttpServletRequest request, Model model) {
    model.addAttribute("title", request.getParameter("title"));
    return "article/result";
  }

세션 정보 삭제하기

1. HttpSession 의 invalidate() 메소드(자바 웹 개발 표준)

${contextPath}/article/main.do 요청을 받으면 session의 정보를 초기화하고 index.jsp를 반환해줌

  @GetMapping("/article/main.do")
  public String main(HttpSession session) {
    // session 정보 초기화
    session.invalidate();
    return "index";
  }

2. SessionStatus의 setComplete() 메소드(spring)

  @GetMapping("/article/main.do")
  public String main2(SessionStatus sessionStatus) {
    // session attribute의 삭제
    sessionStatus.setComplete();
    return "index";
  }

세션 정보 확인하기

1. HttpSession의 getAttribute() 메소드(자바 웹 표준 방식)

  @GetMapping("/article/confirm.do")
  public String confirm(HttpSession session) {
    // session에는 Object 타입으로 값들이 저장되기 때문에 값을 꺼내는 경우 캐스팅이 필요하다.
    String title = (String)session.getAttribute("title");
    System.out.println(title); // console로 확인하기 위함
    return "index";
  }

2. @SessionAttribute(spring)

  @GetMapping("/article/confirm.do")
  public String confirm2(@SessionAttribute("title") String title) {  
  					// session에 저장된 "title" 속성을 String title 에 저장한다.
    System.out.println(title);
    return "index";
  }
}  // MyController04

결과확인을 위한 result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  ${title}
  <br>
  ${sessionScope.title}
  <a href="${contextPath}/article/main.do">세션 초기화하고 main화면으로 가기</a>
  <br>
  <a href="${contextPath}/article/confirm.do">세션 확인하기</a>
</body>
</html>

0개의 댓글