JSP

JSP의 pageContext, request, session, application

초코너무조코 2025. 2. 10. 19:56
728x90

 

오늘은 JSP에서 많이 사용되는 pageContext, request, session, application 이 네 가지 객체에 대해 쉽게 설명해볼게요.

이 개념들을 이해하면, JSP에서 데이터를 어떻게 공유하고 유지할 수 있는지 알게 됩니다. 초보자도 쉽게 이해할 수 있도록 티스토리 블로그 운영을 예시로 들어 설명해볼게요! 😊


1. pageContext – 한 페이지에서만 유효한 데이터

📌 설명
pageContext는 현재 JSP 페이지에서만 데이터를 저장하고 사용할 때 씁니다. 즉, 페이지가 변경되면 값이 사라집니다.

📌 예시
티스토리에서 글을 작성할 때 "미리보기" 기능이 있죠? 미리보기 화면에서는 입력한 내용만 임시로 보여주면 되기 때문에, pageContext를 사용할 수 있어요.

📌 JSP 코드 예시

<%
    pageContext.setAttribute("previewTitle", "이것은 미리보기 제목");
    pageContext.setAttribute("previewContent", "이것은 미리보기 내용입니다.");
%>

<h2>미리보기 화면</h2>
<p>제목: <%= pageContext.getAttribute("previewTitle") %></p>
<p>내용: <%= pageContext.getAttribute("previewContent") %></p>

📌 설명

  • 사용자가 입력한 제목과 내용을 미리보기 페이지에서만 표시하는 코드예요.
  • 다른 페이지로 이동하면 값이 사라집니다.

2. request – 한 번의 요청(Request) 동안 유지되는 데이터

📌 설명
request 객체는 한 번의 요청 동안 데이터를 저장하고 공유할 수 있어요.
페이지가 이동하더라도 같은 요청 내에서는 값을 유지할 수 있죠.

📌 예시
티스토리에서 로그인 처리를 생각해보세요!

  • 사용자가 로그인하면, 서버는 request 객체를 사용해 아이디와 비밀번호를 확인하고, 결과를 다음 페이지로 전달할 수 있어요.
  • 단, request는 한 번의 요청 동안만 유지되므로, 새로고침하거나 다른 페이지로 완전히 이동하면 값이 사라져요.

📌 JSP 코드 예시
🔹 로그인 처리 페이지 (login.jsp)

<%
    String userId = request.getParameter("userId");
    String password = request.getParameter("password");

    if("admin".equals(userId) && "1234".equals(password)) {
        request.setAttribute("loginMessage", "로그인 성공!");
        RequestDispatcher rd = request.getRequestDispatcher("welcome.jsp");
        rd.forward(request, response);
    } else {
        request.setAttribute("loginMessage", "로그인 실패! 아이디와 비밀번호를 확인하세요.");
        RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
        rd.forward(request, response);
    }
%>

🔹 로그인 결과 페이지 (welcome.jsp)

<h2>로그인 결과</h2>
<p><%= request.getAttribute("loginMessage") %></p>

📌 설명

  • request.setAttribute("loginMessage", "로그인 성공!");
    → 로그인 성공 여부를 request에 저장하고, welcome.jsp로 전달
  • 새로고침하면 데이터가 사라짐 (왜냐하면 새로운 요청이 발생하기 때문!)

3. session – 브라우저가 열려 있는 동안 유지되는 데이터

📌 설명
session 객체는 한 번 로그인하면 브라우저가 닫힐 때까지 유지되는 데이터를 저장할 때 사용해요.
로그인 상태 유지, 장바구니 기능 등에 많이 사용됩니다.

📌 예시
티스토리에서 "자동 로그인" 기능을 사용하면, 한 번 로그인한 후에는 계속 로그인 상태를 유지하죠?
이때 session 객체를 사용하면 편리합니다.

📌 JSP 코드 예시
🔹 로그인 성공 시 (login.jsp)

<%
    String userId = request.getParameter("userId");
    
    if(userId != null) {
        session.setAttribute("loggedInUser", userId);
        response.sendRedirect("dashboard.jsp");
    }
%>

🔹 대시보드 페이지 (dashboard.jsp)

<%
    String user = (String) session.getAttribute("loggedInUser");
    if(user == null) {
        response.sendRedirect("login.jsp");
    }
%>

<h2>환영합니다, <%= user %>님!</h2>

📌 설명

  • 사용자가 로그인하면 session.setAttribute("loggedInUser", userId);로 세션에 저장
  • 다른 페이지로 이동해도 session을 통해 로그인 상태를 유지 가능
  • 브라우저를 닫으면 세션 데이터가 삭제됨

4. application – 웹 애플리케이션 전역에서 유지되는 데이터

📌 설명
application 객체는 서버가 실행되는 동안 모든 사용자에게 공유되는 데이터를 저장할 때 사용해요.
즉, 하나의 데이터를 모든 사용자가 공유할 수 있어요.

📌 예시
티스토리에서 블로그 방문자 수(트래픽)를 집계할 때 사용할 수 있어요.
모든 사용자의 방문 횟수를 application 객체에 저장하면, 전체 방문자 수를 유지할 수 있습니다.

📌 JSP 코드 예시
🔹 방문자 수 증가 코드 (visit.jsp)

<%
    Integer visitCount = (Integer) application.getAttribute("visitCount");
    
    if (visitCount == null) {
        visitCount = 1;  // 첫 방문
    } else {
        visitCount++;  // 방문자 증가
    }

    application.setAttribute("visitCount", visitCount);
%>

<h2>현재 블로그 총 방문자 수: <%= visitCount %>명</h2>

📌 설명

  • application 객체를 사용하여 전체 블로그 방문자 수를 저장
  • 모든 사용자가 공유하는 값이므로, 누군가 방문하면 모든 사용자에게 값이 증가됨
  • 서버가 재시작되면 데이터가 초기화됨

정리: 언제 어떤 객체를 써야 할까?

 

JSP 범위 사용 예시
pageContext 현재 JSP 페이지에서만 유지 티스토리 글 미리보기 기능
request 하나의 요청(Request) 동안 유지 로그인 처리 결과 전달
session 브라우저가 열려 있는 동안 유지 로그인 상태 유지
application 서버가 실행되는 동안 유지 블로그 방문자 수 집계

마무리하며

오늘은 JSP의 pageContext, request, session, application을 쉽게 이해할 수 있도록 티스토리 블로그 운영 예시를 들어 설명해봤어요. 😊

이제 여러분도 JSP에서 데이터를 공유할 때, 어떤 객체를 사용해야 할지 감이 오셨을 거예요!
다음에도 더 유익한 웹 개발 정보를 가지고 올게요. 궁금한 점은 댓글로 남겨주세요~

728x90