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 로 다시 요청
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 실행 시
브라우처 '창'을 새롭게 실행 후 http://ip:post/jsp/bind2.jsp 실행 시
둘 값을 불러올 수 있다.
Session storage
browser 끄면 삭제 됨
값을 저장 한 상태로 동일한 창에서 http://ip:post/jsp/bind2.jsp 실행 시
브라우처 '창'을 새롭게 실행 후 http://ip:post/jsp/bind2.jsp 실행 시
새로 연 창에서는 session storage 값이 저장되어 있지 않아서 null 값을 가져온다.
'💻Backend > 신한DS 금융SW 아카데미' 카테고리의 다른 글
[Java Web] 1. WAS (Web Application Server) (0) | 2024.11.25 |
---|