++ Scope Object ++
- 컨테이너에서 서블릿 관리를 위해 자동으로 생성한 객체 중, 속성 관리 기능을 제공 하며 특정 범위 동안 유지되는 객체
- 각각의 객체는 관리 목적에 따라 별도의 메서드로 구현된 기능을 가짐
- 공통 적으로 "키-값" 형태의 맵(Map) 자료구조를 가짐
- 맵 구조를 활용하면 페이지 간, 사용자 간 데이터 공유 가능
- JSP 역시 서블릿으로 변환되기 때문에 동일
- useBean 액션의 scope에 사용되는 page, request, session, application이 해당
- 이러한 객체는 각각 생성, 소멸 시기가 정해져 있음
- 서로 다른 JSP, 서블릿 간의 데이터 전달과 공유로 사용
- Request와 Session을 주로 활용
- 모든 사용자가 공유하거나 웹 애플리케이 션 전체에서 참조가 필요한 경우 : Web Context 사용
- 이러한 객체는 속성을 저장하고 참조하기 위해 setAttribute(...)와 Object getAttribute(...) 사용
setAttribute(String name, Object obj) // 속성 저장
Object getAttribute(String name) // 속성 참조
** 저장하고자 하는 데이터 : Object 형태! ==> 리턴된 Object타입을 원래의 데이터타입으로 변환시켜야한다.
서블릿 속성 |
- ServletContext, HttpServlet, HttpServletRequest 객체에 바인딩되어 저장된 객체(정보) - 각 서블릿 API의 setAttribute(String name, Object value)로 바인딩 - 각 서블릿 API의 getAttribute(String name)으로 접근 - 각 서블릿 API의 removeAttribute(String name)으로 속성을 제거 |
서블릿 스코프 |
- 서블릿 API에 바인딩된 속성에 대한 접근 범위 - ServletContext 속성은 애플리케이션 전체에서 접근 가능 - HttpSession 속성은 사용자만 접근 가능 - HttpServletRequest 속성은 해당 요청/응답에 대해서만 접근 가능 - 각 스코프를 이용해서 로그인 상태 유지, 장바구니, MVC의 Model과 View의 데이터 전달 기능을 구현 |
Scope Object | 클래스 | 생성 | 소멸 | 범위 |
Request | javax.servlet.ServletRequest | 현재 페이지가 요청될 때 | 다른 페이지로 이동할 때 | 현재 페이지 포워딩 경우, 다음 페이지까지 참조 가능 |
Session | javax.servlet.http.HttpSession | 클라이언트가 서버에 접속할 때 | 일정 시간이 지나거나 브라우저가 종료될때 | 동일 클라이언트에 대해 다른 페이지에서도 참조 가능 |
Web Context | javax.servlet.ServletContext | 웹 어플리케이션이 시작될 때 | 웹어플리케이션이 종료될 때 | 모든 클라이언트에서 참조 가능 |
서블릿 속성 스코프 실습
// set11
@WebServlet("/set11")
public class SetAttribute extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
String ctxMesg = "context에 바인딩";
String sesMesg = "session에 바인딩";
String reqMesg = "requests에 바인딩";
ServletContext ctx = getServletContext();
HttpSession session = request.getSession();
ctx.setAttribute("context", ctxMesg);
session.setAttribute("session", sesMesg);
request.setAttribute("request", reqMesg);
out.print("바인딩 수행");
}
}
// get11
@WebServlet("/get11")
public class GetAttribute extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext ctx = getServletContext();
HttpSession session = request.getSession();
String ctxMesg = (String)ctx.getAttribute("context");
String sesMesg = (String)session.getAttribute("session");
String reqMesg = (String)request.getAttribute("request");
out.print("context 값 : " + ctxMesg + "<br>");
out.print("session 값 : " + sesMesg + "<br>");
out.print("request 값 : " + reqMesg + "<br>");
}
}
set에서
- HttpServletContext객체, HttpSession객체, HttpServletRequest객체를 얻고 속성 바인딩
get에서
각 서블릿의 API에서 바인딩된 속성의 값을 가져온다. (이때 Object형이므로 String으로 형변환 해야함)
브라우저(Chrome)에 /set11요청
속성 바인딩
Context와 Session객체에 바인딩된 속성은 같은 브라우저(Chrome)에서 접근 가능하므로
값을 출력해준다.
request는 앞의 요청과 다르기 때문에 바인딩된 속성이 유지되지 않아 null출력
다른브라우저(MicrosoftEdge)에 /get11 을 요청한다면,
크롬 세션의 객체에 접근할 수 없기 때문에 session값은 null이된다.
(출처 : 짧고 굵게 배우는 JSP 웹 프로그래밍과 스프링 프레임워크(황희정))
'JSP 웹프로그래밍' 카테고리의 다른 글
JSP #5 : JSP 지시어, 템플릿 데이터, 스크립트 요소 (230104)2 (0) | 2023.01.04 |
---|---|
JSP : 계산기 (html, jsp파일) (0) | 2023.01.04 |
JSP #3 : 페이지 이동 & 정보 공유 (230103)1 (0) | 2023.01.03 |
JSP : GET방식으로 구구단 출력 실습 (0) | 2023.01.03 |
JSP #2 : 서블릿 (230102)1 (0) | 2023.01.03 |
댓글