JSP 페이지에서 프로그래머가 객체를 생성하는 과정 없이 바로 사용 할 수 있는 객체
JSP가 서블릿 파일로 변환될 때 JSP(서블릿) 컨테이너가 객체를 자동으로 생성해 주기 때문이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<%
// JSP 문서의 스크립트릿 내부에서 out 객체를 선언 없이 사용
out.print("Hello JSP");
%>
</body>
</html>
서블릿에서 out 객체 사용하려면 response 객체의 getWriter()를 호출하여 얻어온 후에 사용했다.
PrintWriter out = response.getWriter();
서블릿과 달리 JSP에서는 out 객체가 JSP 내장 객체라 선언하지 않고 바로 사용한다.
에러 페이지로 지정되면 exception 객체가 내장객체로 제공된다.
JSP 페이지에는 총 9개의 내장 객체가 4종류로 분류된다.
| 내장 객체의 분류 | 내장 객체 | hello_jsp.java 파일 선언 위치 |
|---|---|---|
| 입출력 관련 객체 | request | HttpServletRequest로 선언됨 |
response | HttpServletResponse로 선언됨 | |
out | JspWriter로 선언됨 | |
| ---------------------- | ------------ | ------------------------------- |
| 서블릿 관련 객체 | page | Object로 선언됨 |
config | ServletConfig로 선언됨 | |
| ----------------------------- | --------------- | ------------------------------- |
| 외부 환경 정보 제공 객체 | session | HttpSession으로 선언됨 |
application | ServletContext로 선언됨 | |
pageContext | PageContext로 선언됨 | |
| ---------------------- | ------------- | ------------------------------- |
| 예외 관련 객체 | exception | JSP 페이지가 에러 페이지로 지정되면 만들어짐 hello_jsp.java 파일에서는 발견되지 않음 |
서버에서 클라이언트로 열려있는 출력 스트림
-> 가장 효율적
클라이언트와 웹 서버 사이의 요청과 관련된 정보는 request 객체에 저장되어 관리한다.
<body>
컨텍스트 패스 : <%= request.getContextPath() %> <br>
요청방식 : <%= request.getMethod() %> <br>
요청한 URL : <%= request.getRequestURL() %> <br>
요청한 URI : <%= request.getRequestURI() %> <br>
서버의 이름 : <%= request.getServerName() %> <br>
프로토콜 : <%= request.getProtocol() %> <br>
</body>
| 메소드 | 설명 |
|---|---|
getParameter(String name) | 지정한 이름의 파라미터를 구한다. 지정한 이름의 파라미터가 여러 개 있을 경우에는 첫 번째 파라미터의 값을 구한다. |
getParameterNames() | 모든 파라미터의 이름을 구한다. |
getParameterValues(String name) | 지정한 이름의 파라미터가 여러 개 있을 경우 사용하며, 지정한 이름을 가진 파라미터의 모든 값을 String[]으로 구한다. |
requset 객체로 넘겨진 값을 파라미터라고 한다.
입력 양식의 name 속성 값을 넘겨준다.
클라이언트에 대한 응답 처리하는 내장객체
JSP는 response 객체의 기능 중 리다이렉트 기능을 많이 사용한다.
리다이렉트는 response 객체의 rendRedirect() 메소드를 사용하여 웹 서버가 브라우저에게 지정한 페이지로 이동하도록 지시한다.
response.sendRedirect("http://www.website.com");
response 객체의
sendRedirect()로 페이지를 이동하는 방법
sendRedirect() 메소드로 페이지를 이동하면서 데이터를 전송하기 위해 파라미터 값을 이동할 페이지 뒤에 커리 스트링 형태로 덧붙여 준다.resonse.sendRedirect("nextPage.jsp?age="+20);sendRedirect() 메소드로 한글 전송시 URLEncoder.encode() 메소드로 인코딩 과정이 필요하다.response.sendRedirect("nextPage.jsp?name=" + URLEncoder.encode("신짱구", "UTF-8"));
sendRedirect()와 마찬가지로 다른 페이지로 이동하기 위해서 사용
RequestDispatcher dispatcher = request.getRequestDispatcher("이동할 페이지.jsp");
dispatcher.forworad(request, response);
forward() 메소드는 requestDispatcher 객체로 접근해야만 호출이 가능하다getRequestDispatcher() 메소드를 호출하여 얻어낸다. setAttribute() 메소드로 request 객체에 속성 값으로 저장해서 보낸다.request.setAttribute("age",20);getAttribute() 메소드를 사용한다.forward() 메소드는 한글 전송을 위해 인코딩을 하지 않아도 된다.request.setAttribute("name", "신짱구");String name = (String)request.getAttribute("name");application 내장 객체는 하나의 웹 애플리케이션(하나의 웹 프로젝트)을 관리하고 웹 애플리케이션 안에서의 자원을 공유한다.
// 속성을 새로 생성해서 request 객체에 저장하여 사용
request.setAttribute("name", "shin");
// 하나의 프로젝트 내의 모든 JSP 페이지에서 공톡적으로 사용
application.setAttribute("name", "shin");
| 메소드 | 설명 |
|---|---|
getServerInfo() | 컨테이너의 이름과 버전을 반환합니다. |
getContextPath() | 웹 애플리케이션의 URL 경로 중 컨텍스트 패스명을 반환합니다. |
getRealPath() | JSP의 실제 경로를 반환한다. |
getMimeType(filename) | 지정된 파일의 MIME 타입을 반환합니다. |
log(message) | 지정된 message의 로그를 저장합니다. |
<%
String appPath = application.getContextPath();
String filePath = application.getRealPath("06_application.jsp");
%>
해당 객체가 얼마 동안이나 살아있는가를 지정해 주는 것을 영역이라고 볼 수 있다.
객체의 유효기간으로도 불린다.
| 영역 | 설명 |
|---|---|
page | 하나의 JSP 페이지를 처리할 때 사용되는 영역 |
request | 하나의 요청을 처리할 때 사용되는 영역 |
session | 하나의 브라우저와 관련된 영역 |
application | 하나의 웹 애플리케이션과 관련된 영역 |

한 번의 클라이언트 요청에 하나의 JSP 페이지를 범위로 갖는다.
브라우저가 웹 서버에 전송하는 요청이 하나의 request 영역이다.
세션이란 웹 브라우저를 닫기 전까지 페이지를 이동하더라도 사용자의 정보를 잃지 않고 서버에 보관할 수 있도록 하는 객체로 모든 웹 서버에서 제공된다.
하나의 웹 애플리케이션과 관련된 전체 영역을 포함한다.
내장 객체가 해당 영역을 벗어나면 해당 속성의 값을 사용할 수 있는 유효 범위가 다르기 때문에 값을 출력할 수 없다.
오늘은 JSP에서 사용하는 내장 객체에 대해 정리해 보았다.
생각보다 종류도 많고 각각의 역할이 중요해서, 내용을 놓치지 않도록 꼼꼼하게 정리하려고 노력했다. 기본적인 사용법부터 메서드의 기능까지 하나하나 짚어보며 이해도를 높일 수 있었다.
setAttribute()와 getAttribute()의 사용처가 헷갈려서, 각각의 역할을 명확히 구분하기 위해 표로 다시 정리해보았다. 이를 통해 어떤 메서드가 어떤 기능을 수행하는지 한눈에 파악할 수 있도록 하였다.
| 메소드 | 설명 |
|---|---|
| setAttribute(name, value) | 이름(name)에 값(value)을 설정합니다. |
| getAttribute(name) | 매개 변수로 준 이름에 설정된 값을 얻어냅니다. |
| getAttributeNames() | 현재 객체에 관련된 모든 속성의 이름을 뽑아냅니다. |
| removeAttribute(name) | 매개 변수로 준 이름에 설정된 값을 제거합니다. |