2022. 9. 24. 13:52ㆍ3층 1구역 - 개발의 장/JSP
1. 서론
pageContext, request, session, application forward의 법칙에 대해 알아보도록 하자.
2. 본론
일단 들어가기 전에
pageContext, request, session, application 이 4가지 객체는 뒤에 .setAttribute(String, object);
가 따라 붙게 된다. pageContext로 예를 들자면 pageContext.setAttribute(속성이름(String), 속성의 데이터(object));
로 나타내는 것이다. 그래서 출력할 때 속성이름을 선택해 출력하면 속성에 담겨있는 데이터들이
각각의 법칙에 따라 나온다.
ex5_A.jsp
<%
//setAttribute("속성이름(String)", "속성데이터(object)")
//pageContext는 코드를 사용한 페이지 안에서만 인식이 가능
//지역변수같은 느낌.
//그래서 다른 페이지에서 사용하고 싶지 않을 경우 pageContext를 사용함.
pageContext.setAttribute("id", "pageId");
//request는 하나의 request에서만 사용가능.
//새로운 request가 발생할 경우 기존 request는 사용할 수 없음.
request.setAttribute("id", "requestId"); //하나의 요청
//세션은 클라이언트 별 구분
//(두 클라이언트가 네이버에 접속했을 때, 한 클라이언트는 메일로 갈 수 있고, 다른 클라이언트는 뉴스로 갈 수 있는데 sessionid가 다르기 때문에 가능)
//클라이언트가 서버에 접속을 하면 session일 경우 처음이라고 인식하면 sessionID를 부여해줌.
//이후, 클라이언트가 다시 서버에 접속할 경우 그 sessionID로 인식한다.
//만약 웹페이지를 닫고 재시작 할 경우 sessoin은 클라이언트가 처음 접속이라고 인식하여 sessionID를 새로 부여.
//은행에서 업무를 보기 위해 번호표를 뽑아가는 것과 비슷한 원리
//그래서 주로 사용함. 좁은 공간으로 보면 이건 하나의 cookie라고 볼 수 있음.
session.setAttribute("id", "sessionId");
//application 공용으로 쓰게 된다. 예를 들자면, a클라이언트가 naver메인페이지를 보고 있다면 b,c클라이언트 또한 naver메인페이지를 보고 있다.
//공용 공간이 생긴다.
//쓰는 경우는 드물기 때문에 이런게 있다 라고만 기억해두자.
application.setAttribute("id", "applicationId");
//forward는 예를 들자면 어떤 회사 지원자(클라이언트)가 안내데스크(서버)에 인사과가 어디냐고 물어봤을 때, 안내데스크에서 인사과(클라이언트의 최종 목표사이트)에 가서 지원자가 왔다 라고 보고 후
//안내데스크에서 저쪽으로 가면 인사과가 있다고 사용자에게 알려주는 것.
//sendRedirect는 사용자가 안내데스크에 인사과 어디냐고 물어보면, 저쪽에 인사과가 있다고 알려주는 것(무책임 함).(사용자가 길을 잃기때문에 새로운 경로가 만들어져 기존의 request와 response는 사용 불가.)
//둘의 차이는 안내데스크에서 사람이 움직였냐 안 움직였냐.
request.getRequestDispatcher("ex5_B.jsp").forward(request, response);
%>
ex5_Bjsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex5_B</title>
</head>
<body>
<h2> B 페이지 </h2>
페이지 : <%=pageContext.getAttribute("id") %> <br>
요청 : <%=request.getAttribute("id")%><br>
세션 : <%=session.getAttribute("id") %><br>
애플리케이션 : <%=application.getAttribute("id") %><br>
<a href="ex5_C.jsp">C 페이지로 이동</a>
</body>
</html>
ex5_C.jsp
%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex5_C</title>
</head>
<body>
<h2> C 페이지 </h2>
페이지 : <%=pageContext.getAttribute("id") %> <br>
요청 : <%=request.getAttribute("id")%><br>
세션 : <%=session.getAttribute("id") %><br>
애플리케이션 : <%=application.getAttribute("id") %><br>
</body>
</html>
2-1. pageContext
어느 한 페이지에서만 인식을 한다.
자바코드로 비교하자면 지역변수와 비슷한 느낌이다.
그래서 해당 데이터를 다음 페이지에서 사용하고 싶지 않다면 context를 쓴다.
먼저 ex5_A로 들어왔을 경우 적힌코드가 내장객체밖에 없기 때문에 전송요청이 들어가게 되며
B웹으로 넘어오게 된다. 이에 페이지의 값은 null이 된다. 즉, pageContext는 ex5_A.jsp에서 사용되었으나 B에서는 사용하지 않겠다는 것.
이제 C웹으로 넘어가 보자.
2-2. request
request는 하나의 요청에서만 사용가능하다.
새로운 요청(request)가 발생할 경우 기존의 request는 사용할 수 없다.
C웹에선 request도 null이 되었다. 그 말은 A → B로 넘어가는 과정에서 request가 유지되었으나,
B→C로 넘어갈 때 해당 request가 이루어 지지 않았다는 것. 이렇게 request는 하나의 과정에서만 사용이 가능하다.
'3층 1구역 - 개발의 장 > JSP' 카테고리의 다른 글
JSP - session (2022-09-24) (0) | 2022.09.24 |
---|---|
JSP - 로그인 페이지 만드는 퀴즈(DB연동 안함.) (2022-09-24) (0) | 2022.09.24 |
JSP - comboBox를 이용해 페이지 이동하는 퀴즈(2022-09-24) (0) | 2022.09.24 |
JSP - response(2022-09-21) (1) | 2022.09.22 |
JSP - request.getParameter("name")와 친해지길 바라! (2022-09-21) (1) | 2022.09.21 |