[Web] 서블릿 속성과 스코프
2024. 8. 21. 06:49ㆍ자바 웹 개발/세션 쿠키 필터 리스너
서블릿 속성은 ServletContext, HttpSession, HttpServletRequest 세 가지 서블릿 API 클래스에 저장되는 객체(정보)이다. 서블릿의 스코프는 서블릿 API에 바인딩된 속성에 대한 접근 범위를 의미한다.
스코프 종류 | 해당 서블릿 API | 속성 스코프 |
애플리케이션 스코프 | ServletContext | 애플리케이션 전체에 접근 |
세션 스코프 | HttpServlet | 브라우저에만 접근 |
리퀘스트 스코프 | HttpServletRequest | 해당 요청/응답 사이클에서만 접근 |
예제를 통해 이를 확인해볼 수 있다.

setAttribute 메서드를 이용해서 각 속성을 바인딩하였다.
@WebServlet("/set")
public class SetAttribute extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
String ctxMesg = "context에 바인딩됩니다.";
String sesMesg = "session에 바인딩됩니다.";
String reqMesg = "request에 바인딩됩니다.";
ServletContext ctx = getServletContext();
HttpSession session = req.getSession();
ctx.setAttribute("context", ctxMesg);
session.setAttribute("session", sesMesg);
req.setAttribute("request", reqMesg);
out.print("바인딩을 수행합니다.");
}
}
getAttribute 메서드를 이용해 속성 이름으로 바인딩한 값을 가져와 브라우저로 출력한다.
@WebServlet("/get")
public class GetAttribute extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
ServletContext ctx = getServletContext();
HttpSession sess = req.getSession();
String ctxMesg = (String) ctx.getAttribute("context");
String sesMesg = (String) sess.getAttribute("session");
String reqMesg = (String) req.getAttribute("request");
out.print("context값:" + ctxMesg + "<br>");
out.print("session값:" + sesMesg + "<br>");
out.print("request값:" + reqMesg + "<br>");
}
}

Context와 Session 객체에 바인딩된 속성은 같은 브라우저에서 접근할 수 있으므로 값을 출력한다. 그러나 기존에 바인딩된 request 객체를 /get으로 요청하여 생성된 request 객체와 다르므로 null이 출력된다.

Edge로 접근해서 get요청을 하면 크롬 세션 객체에 접근할 수 없어 null이 출력된다. 반면에 Context는 바인딩된 데이터를 모든 브라우저에서 접근할 수 있어서 같은 결과가 출력된다.
'자바 웹 개발 > 세션 쿠키 필터 리스너' 카테고리의 다른 글
[Web] 필터 (0) | 2024.08.21 |
---|---|
[Web] 서블릿 URL 패턴 (0) | 2024.08.21 |
[Web] encodeURL 사용 (0) | 2024.08.19 |
[Web] 세션을 이용한 로그인 정보 바인딩하기 (0) | 2024.08.19 |
[Web] 세션 유효 기간 설정 / 세션 삭제하기 (0) | 2024.08.19 |