Hiya_
개발자취🌱
Hiya_
Github
전체 방문자
오늘
어제
  • 분류 전체보기 (155) N
    • 💻Backend (1) N
      • 라이징캠프 (6)
      • SSAFY | 싸피 (2)
      • 신한DS 금융SW 아카데미 (2)
    • 📁문제 풀이 (102)
      • 🧩Baekjoon (47)
      • 🧩Programmers (42)
      • 🧩SWExpertAcademy (10)
      • 🧩Softeer (3)
    • 📂Language (31)
      • Python (3)
      • JAVA (2)
      • SQL (6)
      • English (19)
    • ✨Useful information (5)
    • 🔑Algorithms (3)
    • 🐙Git (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 구현
  • sort
  • 다익스트라
  • 토익시험
  • 오블완
  • 토익점수
  • 내장함수
  • 토익무료강의
  • UNION ALL
  • 정렬
  • 티스토리챌린지
  • 토익기출
  • 그리디
  • Python
  • 해커스파랭이
  • 완전탐색
  • Union
  • 토익독학
  • greedy algorithm
  • 리스트
  • 백준
  • 토익RC
  • BaekJoon
  • 토익무료자료
  • 해커스토익
  • 토익공부
  • 코테
  • mysql
  • BFS
  • 2차원 배열

최근 댓글

최근 글

티스토리


Owner : 김신영
Naver Blog

hELLO · Designed By 정상우.
Hiya_

개발자취🌱

[Java Web] Servlet Binding | Local/ Session Storage
💻Backend/신한DS 금융SW 아카데미

[Java Web] Servlet Binding | Local/ Session Storage

2024. 11. 19. 12:58

Server

Java Servlet에서 관리하는 저장 공간은 Servlet context, reqeust, Page context, Session이 있다.
바인딩 위치 사용 가능 범위 사용 예시
ServletContext 모든 요청 조회수
session 브라우저 로그인 정보
request 각 요청 JSP 동적 할당
PageContext page  

 

BindTestServlet.java

@WebServlet("/jsp/bind1.go")
public class BindingTestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // request
        request.setAttribute("kirua", "request 영역에 저장");

        // session
        HttpSession session = request.getSession();
        session.setAttribute("kirua2", "session 영역에 저장");

        // Servlet Context
        ServletContext servletContext = request.getServletContext();
        servletContext.setAttribute("kirua3", "servlet context 영역에 저장");

        request.getRequestDispatcher("bind1.jsp").forward(request, response);
    }
}

 

bind1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Bind Test</title>
</head>
<body>
<h1>application/ session/ request에 Bind 연습</h1>
<p>myName 읽음 : ${kirua}</p>
<p>myName2 읽음 : ${kirua2}</p>
<p>myName3 읽음 : ${kirua3}</p>
</body>
</html>

 

1. http://ip:port/jsp/bind1.go로 요청

reqeust, session, servletcontext 영역에 각각 값을 저장한 뒤 bind1.jsp를 반환한다.

 

JSP에 모든 영역의 값이 잘 출력된다.

 

2. http://ip:post/jsp/bind1.jsp 로 직접 요청

이전에 저장한 session, servelet context 영역 값은 잘 가져오나

래로운 request 요청에 대해서는 저장하지 않았으므로 보이지 않는다.

 

3. Session 을 지우고 http://ip:post/jsp/bind1.jsp 로 다시 요청

 

1. (크롬 기준) f12를 눌러 개발자 도구 > Application > Cookies > http://ip:port > JSESSIONID 삭제

 

2. http://ip:post/jsp/bind1.jsp 재요청

 

🚨 session은 cookie 영역의 'JSESSIONID'를 통해서 소통하므로 이와같은 결과를 볼 수 있다.

 

3. 서버를 재시작 후 http://ip:post/jsp/bind1.jsp 로 다시 요청

os : mac, IDE : intellij

 

jsp로 바로 접근 시 어떤 영역에도 값을 저장하지 않으므로 이와같은 결과를 얻을 수 있다.

 

 

 

 


 

 

Client

client(browswer) 에서 관리할 수 있는 저장 공간은 local storage와 session storage가 존재한다.

 

bind1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Bind Test</title>
    <script>
        function f_local(){
            localStorage.setItem("myname", "JK");
            localStorage.setItem("mymajor", "SW");
            localStorage.setItem("myscore", "99");
        }
        function f_session(){
            sessionStorage.setItem("myname2", "JK2");
            sessionStorage.setItem("mymajor2", "SW2");
            sessionStorage.setItem("myscore2", "992");
        }
    </script>
</head>
<body>
<h2>PC에 저장하기</h2>
<button onclick="f_local()">Local Storage</button>
<button onclick="f_session()">session Storage</button>
</body>
</html>

 

bind2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Bind Test</title>
    <script>
        function f_local(){
            let a=localStorage.getItem("myname");
            let b=localStorage.getItem("mymajor");
            let c=localStorage.getItem("myscore");
            document.querySelector("#here").innerHTML =
                a + "<br>" + b + "<br>" + c + "<br>";
        }
        function f_session(){
            let a = sessionStorage.getItem("myname2");
            let b = sessionStorage.getItem("mymajor2");
            let c = sessionStorage.getItem("myscore2");
            document.querySelector("#here").innerHTML =
                a + "<br>" + b + "<br>" + c + "<br>";
        }
    </script>
</head>
<body>
<button onclick="f_local()">Local Storage 읽기</button>
<button onclick="f_session()">session Storage 읽기</button>
<div id="here"></div>
</body>
</html>

 

storage 값 저장

http://ip:post/jsp/bind1.jsp 들어가서 버튼 두 개 모두 클릭

 

Local storage

browser끄더라도 유지

 

위처럼 값을 저장 한 상태로 동일한 창에서 http://ip:post/jsp/bind2.jsp 실행 시

동일한 창에서 ~~/jsp/bind2.jsp

브라우처 '창'을 새롭게 실행 후 http://ip:post/jsp/bind2.jsp 실행 시

새로운 창에서 ~~/jsp/bind2.jsp

둘 값을 불러올 수 있다.

 

Session storage

browser 끄면 삭제 됨

 

값을 저장 한 상태로 동일한 창에서 http://ip:post/jsp/bind2.jsp 실행 시

동일한 창에서 ~~/jsp/bind2.jsp

 

브라우처 '창'을 새롭게 실행 후 http://ip:post/jsp/bind2.jsp 실행 시

새로운 창에서 ~~/jsp/bind2.jsp

 

새로 연 창에서는 session storage 값이 저장되어 있지 않아서 null 값을 가져온다.

 

'💻Backend > 신한DS 금융SW 아카데미' 카테고리의 다른 글

[Java Web] 1. WAS (Web Application Server)  (0) 2024.11.25
    '💻Backend/신한DS 금융SW 아카데미' 카테고리의 다른 글
    • [Java Web] 1. WAS (Web Application Server)
    Hiya_
    Hiya_
    하얀 천과 바람만 있다면 어디든 갈 수 있어

    티스토리툴바