본문 바로가기
JSP

[JSP] 기본 내장(Implicit) 객체 정리

by lmyourpearl 2025. 12. 3.

JSP 기본 내장(Implicit) 객체 한눈에 정리

JSP는 아래 9개 내장 객체를 페이지에 자동으로 제공함(선언 불필요).

객체 목록 & 핵심 요약

이름 타입 주요 용도 생명주기 / 범위
request HttpServletRequest 요청 파라미터, 헤더, 쿠키, 포워드 요청 1회 (Request scope)
response HttpServletResponse 상태코드/헤더/리다이렉트/쿠키 작성 요청 1회
session HttpSession 로그인 상태/장바구니 등 사용자별 상태 브라우저 세션 동안 (Session scope)
application ServletContext 앱 전역 설정/캐시 서버 구동~종료 (Application scope)
out JspWriter HTML 출력 버퍼링(write/print) 요청 1회
pageContext PageContext 모든 스코프 접근, forward/include, 에러 처리 요청 1회 (Page scope 중심)
config ServletConfig 서블릿 초기화 파라미터 서블릿 단위
page Object (this) 현재 JSP의 서블릿 인스턴스 참조 페이지 인스턴스
exception Throwable 에러 페이지에서 예외 객체 접근 에러 페이지에서만 유효

자주 쓰는 메서드/패턴

request

<%
request.setCharacterEncoding("UTF-8");
String q = request.getParameter("q");
String uri = request.getRequestURI();
%>

response

<%
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Cache-Control","no-store");
response.sendRedirect("login.jsp");
%>

session

<%
session.setAttribute("loginId", "jinju");
String id = (String)session.getAttribute("loginId");
session.invalidate(); // 로그아웃
%>

application (전역 공유)

<%
application.setAttribute("hit", 0);
Integer hit = (Integer)application.getAttribute("hit");
%>

out (버퍼링된 출력)

<%
out.println("<h3>Hello</h3>");
out.flush(); // 가급적 남발 금지(버퍼 전송)
%>

pageContext (스코프 통합 접근, 포워드)

<%
pageContext.setAttribute("msg", "hi", PageContext.REQUEST_SCOPE);
pageContext.forward("/result.jsp"); // 서버 내부 이동(URI 그대로)
%>

config / page

<%
String initVal = config.getInitParameter("encoding");
Object me = page; // 현재 JSP 서블릿 인스턴스
%>

exception (에러 페이지에서만)

<%@ page isErrorPage="true" %>
에러메시지: <%= exception.getMessage() %>


스코프별 속성 저장/조회 표

스코프 저장 조회 소멸 시점
Page pageContext.setAttribute("k",v) pageContext.getAttribute("k") JSP 응답 완료
Request request.setAttribute("k",v) request.getAttribute("k") 요청 처리 완료
Session session.setAttribute("k",v) session.getAttribute("k") 세션 만료/무효화
Application application.setAttribute("k",v) application.getAttribute("k") 서버 종료

EL/JSTL에서는 ${k}가 Page→Request→Session→Application 순으로 탐색


forward vs redirect 한 줄 정리

  • forward: request.getRequestDispatcher("x.jsp").forward(req,res)
    • 서버 내부 이동, URI 그대로, request 속성 유지.
  • redirect: response.sendRedirect("x.jsp")
    • 클라이언트에게 새 요청 유도, URI 변경, request 속성 사라짐(필요 시 세션/쿼리스트링 사용).

EL/JSTL로 더 안전하게 쓰기 

스크립틀릿 대신 EL/JSTL 사용:

<%@ taglib prefix="c" uri="<http://java.sun.com/jsp/jstl/core>" %>
이름: ${param.name}
세션아이디: ${sessionScope.loginId}
컨텍스트경로: ${pageContext.request.contextPath}


  



 

  • 문자셋: POST 파라미터는 컨트롤러/필터에서 request.setCharacterEncoding("UTF-8") 선처리.
  • 버퍼링: out.flush() 후엔 리다이렉트/포워드 금지(이미 일부 전송됨).
  • 스레드 안전성: application은 전역 공유 → 동시 접근 주의(동기화 or 불변 객체/캐시 라이브러리 활용).
  • 세션 사용 최소화: 민감정보 저장 금지, 만료시간 설정, 필요 시 invalidate().
  • 예외 페이지: 에러 핸들러 JSP는 isErrorPage="true", 호출하는 쪽은 errorPage="/error.jsp".

'JSP' 카테고리의 다른 글

[JSP] 파일 업로드  (0) 2025.12.04
[JSP] 폼(form) 태그  (0) 2025.12.03
[JSP] 내장 객체_3  (0) 2025.12.03
[JSP] 내장 객체_2  (0) 2025.12.03
[JSP] 자바빈즈 액션 태그  (0) 2025.12.03