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 |