JSP 기본 객체
1. 기본 객체
기본 객체
|
실제 타입
|
설명
|
request
|
javax.servlet.http.HttpServletRequest
|
클라이언트의 요청 정보를 저장한다.
|
response
|
javax.servlet.http.HttpServletResponse
|
응답 정보를 저장한다.
|
pageContext
|
javax.servlet.jsp.PageContext
|
JSP 페이지에 대한 정보를 저장한다.
|
session
|
javax.servlet.http.HttpSession
|
HTTP 세션 정보를 저장한다.
|
application
|
javax.servlet.ServletContext
|
웹 어플리케이션에 대한 정보를 저장한다.
|
out
|
javax.servlet.jsp.JspWriter
|
JSP 페이지가 생성하는 결과를 출력할 때 사용되는 출력 스트림이다.
|
config
|
javax.servlet.ServletConfig
|
JSP 페이지에 대한 설정 정보를 저장한다.
|
page
|
java.lang.Object
|
JSP 페이지를 구현한 자바 클래스 인스턴스이다.
|
exception
|
java.lang.Throwable
|
익셉션 객체, 에러 페이지에서만 사용된다.
|
2. out
- 웹 브라우저에 데이터를 전송하는 출력 스트림이다.
- 비-스크립트 요소들(HTML 코드 or 텍스트)과 값을 출력하는 표션식의 결과는 out 기본 객체에 그대로 전달된다.
- JSP 페이지가 사용하는 버퍼는 실제로는 out 기본 객체가 내부적으로 사용하고 있는 버퍼이다.
- isAutoFlush() 메서드의 값을 결정하는 것은 page 디렉티브의 autoFlush 속성이다.
메서드
|
반환형
|
설명
|
print()
|
void
|
데이터를 출력한다.
|
println()
|
void
|
데이터를 출력하고, \r\n 또는 \n을 출력한다.
|
newLine()
|
void
|
\r\n 또는 \n을 출력한다.
|
getBufferSize()
|
int
|
버퍼의 크기를 구한다.
|
getRemaining()
|
int
|
현재 버퍼의 남은 크기를 구한다.
|
clear()
|
void
|
버퍼의 내용을 비운다. 만약 버퍼가 이미 플러시 되었다면 IOException을 발생시킨다.
|
clearBuffer()
|
void
|
버퍼의 내용을 비운다. clear() 메서드와 달리 버퍼를 플러시 한 경우에도 IOException을 발생시키지 않는다.
|
flush()
|
void
|
버퍼를 플러시한다.
|
isAutoFlush()
|
boolean
|
버퍼가 다 찼을 때 자동으로 플러시 할 경우 ture를 리턴한다.
|
<!-- outObject.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page buffer="8kb" autoFlush="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
int a = 10, b = 5;
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>out 객체</title>
</head>
<body>
<!-- out 기본 객체를 사용할 경우 복잡한 코드를 간단하게 표시할 수 있다. -->
<h2>out 객체 미사용</h2>
<%
if (a == 10) {
%>
<%=a + "을 가진 변수는 'A' 입니다."%><br>
<%
} else if (b == 10) {
%>
<%=b + "을 가진 변수는 'B' 입니다."%><br>
<%
}
%>
<h2>out 객체 사용</h2>
<%
if (a == 10) {
out.println(a + "을 가진 변수는 'A' 입니다.<br>");
} else if (b == 10) {
out.println(b + "을 가진 변수는 'B' 입니다.<br>");
}
%>
<hr>
<h2>버퍼 정보</h2>
버퍼 크기 :
<%=out.getBufferSize()%><br> 남은 크기 :
<%=out.getRemaining()%><br> auto flush:
<%=out.isAutoFlush()%><br>
</body>
</html>
<!--
실행결과
out 객체 미사용
10을 가진 변수는 'A' 입니다.
out 객체 사용
10을 가진 변수는 'A' 입니다.
-----------------------------------------------
버퍼 정보
버퍼 크기 : 8192
남은 크기 : 7753
auto flush: false
-->
3. pageContext
- 하나의 JSP 페이지와 1대1일 매핑되는 객체이다.
- JSP 페이지에서 직접적으로 사용하는 경우는 드물지만, 커스텀 태그를 구현할 대에는 많이 사용된다.
- getException() 메서드는 JSP 페이지가 에러 페이지인 경우에만 의미가 있다.
메서드
|
반환형
|
설명
|
getRequest()
|
ServletRequest
|
request 기본 객체를 구한다.
|
getResponse()
|
ServletResponse
|
response 기본 객체를 구한다.
|
getSession()
|
HttpSession
|
session 기본 객체를 구한다.
|
getServletContext()
|
ServletContext
|
application 기본 객체를 구한다.
|
getServletConfig()
|
ServletConfig
|
config 기본 객체를 구한다.
|
getOut()
|
JspWriter
|
out 기본 객체를 구한다.
|
getException()
|
Exception
|
exception 기본 객체를 구한다.
|
getPage()
|
Object
|
page 기본 객체를 구한다.
|
<!-- pageContext.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>page Context</title>
</head>
<body>
<%
HttpServletRequest httpRequest = (HttpServletRequest) pageContext.getRequest();
%>
request 기본 객체와 pageContext.getRequest()의 동일 여부 : <%=request == httpRequest%><br>
pageContext.getOut() 메서드를 사용한 데이터 출력 : <% pageContext.getOut().println("테스트!"); %>
</body>
</html>
<!--
실행결과
request 기본 객체와 pageContext.getRequest()의 동일 여부 : true
pageContext.getOut() 메서드를 사용한 데이터 출력 : 테스트!
-->
4. application
- 특정 웹 어플리케이션에 포함된 모든 JSP 페이지는 하나의 application 기본 객체를 공유하게 된다.
- 웹 어플리케이션 전반에 걸쳐서 사용되는 정보를 담고 있다. (초기 설정 정보, 서버 정보, 자원 등)
4.1 웹 어플리케이션 초기화 파라미터 읽기
- 서블릿 규약은 웹 어플리케이션 전체에 걸쳐서 사용할 수 있는 초기화 파라미터를 제공하고 있다.
- 초기화 작업에 필요한 설정 정보를 지정하기 위해 사용한다. (데이터베이스 연결 설정 파일 경로, 로깅 설정 파일, 주요 속성 정보 파일 경로 등)
- 초기화 파라미터는 WEB-INF\web.xml 파일에 <context-param> 태그를 사용하여 추가할 수 있다.
- 초기화 파라미터를 추가하게 되면, application 기본 객체에서 제공하는 메서드를 사용하여 초기화 파라미터를 JSP 페이지에서 사용할 수 있게 된다.
- web.xml 파일이 변경될 경우 웹 어플리케이션을 다시 시작해야 적용되는 웹 컨테이너가 존재한다.
<context-param> <description>파라미터 설명(필수 아님)</description> <param-name>파라미터 이름</param-name> <param-value>파라미터 값</param-value> </context-param>
메서드
|
반환형
|
설명
|
getInitParameter(String name)
|
String
|
이름이 name인 웹 어플리케이션 초기화 파라미터의 값을 읽어온다. 존재하지 않을 경우 null을 반환한다.
|
getInitParameternames()
|
Enumeration
|
웹 어플리케이션 초기화 파라미터의 이름 목록을 반환한다.
|
<!-- web.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Blog</display-name>
<context-param>
<description>테스트 파라미터1</description>
<param-name>testParamName</param-name>
<param-value>gangzzang</param-value>
</context-param>
<context-param>
<description>테스트 파라미터2</description>
<param-name>testParamAge</param-name>
<param-value>25</param-value>
</context-param>
</web-app>
<!-- readInitParameter.jsp --> <%@ page import="java.util.Enumeration"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>초기화 파라미터</title> </head> <body> <h2>초기화 파라미터 목록</h2> <hr> <ul> <% Enumeration initEnum = application.getInitParameterNames(); while (initEnum.hasMoreElements()) { String inParamName = initEnum.nextElement().toString(); %> <li><%= inParamName %> : <%= application.getInitParameter(inParamName) %> <% } //while %> </ul> </body> </html> <!-- 실행결과 초기화 파라미터 목록 ---------------------------------- testParamName : gangzzang testParamAge : 25 -->
4.2 서버 정보 읽기
- 웹 컨테이너에 대한 정보를 읽어오는 메서드를 제공한다.
메서드
|
반환형
|
설명
|
getServerInfo()
|
String
|
서버 정보를 구한다.
|
getMajorVersion()
|
String
|
서버가 지원하는 서블릿 규약의 메이저 버전의 정수 부분을 반환한다.
|
getMinorVersion()
|
String
|
서버가 지원하는 서블릿 규약의 마이너 버전의 소수 부분을 반환한다.
|
<!-- serverInfo.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>서버 정보</title>
</head>
<body>
서버정보 : <%=application.getServerInfo()%><br>
서블릿 규약 메이저 버전 : <%=application.getMajorVersion()%><br>
서블릿 규약 마이너 버전 : <%=application.getMinorVersion()%>
</body>
</html>
<!--
실행결과
서버정보 : Apache Tomcat/6.0.37
서블릿 규약 메이저 버전 : 2
서블릿 규약 마이너 버전 : 5
-->
4.3 로그 메시지 기록
- 웹 컨테이너가 사용하는 로그 파일에 로그 메세지를 기록 할 수 있는 메서드를 제공한다.
- 로그 메세지가 기록되는 파일은 웹 컨테이너에 따라서 다르다.
메서드
|
반환형
|
설명
|
log(String msg)
|
void
|
로그 메세지 msg를 기록한다.
|
log(String msg, Throwable throwable)
|
void
|
로그 메세지 msg를 기록한다. 익셉션 정보도 함께 로그 파일에 기록한다.
|
<!-- log1.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>로그 메세지</title>
</head>
<body>
<%
application.log("application 로그 메세지");
%>
application 로그 메세지를 기록합니다.
</body>
</html>
<!--
실행 결과
application 로그 메세지를 기록합니다.
-->
<!--
로그 파일
9월 17, 2013 11:38:20 오전 org.apache.catalina.coreApplicationContext log
정보: application 로그 메세지
-->
<!-- log2.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>로그 메세지</title>
</head>
<body>
<%
log("jsp 로그 메세지");
%>
jsp 로그 메세지를 기록합니다.
</body>
</html>
<!--
실행 결과
jsp 로그 메세지를 기록합니다.
-->
<!--
로그 파일
9월 17, 2013 11:40:44 오전 org.apache.catalina.coreApplicationContext log
정보: jsp : jsp 로그 메세지
-->
4.4 웹 어플리케이션의 자원 구하기
- JSP 페이지에서 웹 어플리케이션 디렉터리에 위치한 자원을 읽어올 수 있다.
메서드
|
반환형
|
설명
|
getRealPath(String path)
|
String
|
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원의 시스템상에서의 자원 경로를 반환한다.
|
getResource(String path)
|
URL
|
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원에 접근할 수 있는 URL 객체를 반환한다.
|
getResourceAsStream(String path)
|
InputStream
|
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원으로부터 데이터를 읽어올 수 있는 InputStream을 반환한다.
|
<!-- resource.jsp -->
<!-- text.txt 저장되있는 내용 : 예제를 위한 test.txt 파일입니다. -->
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.net.URL" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>자원 읽기</title>
</head>
<body>
<%
String resourcePath = "test.txt";
%>
자원의 실제 경로 : <%= application.getRealPath(resourcePath) %> <br>
<br>
<%= resourcePath %> 의 내용 <br>
<hr>
<%
BufferedReader br = null;
char[] buff = new char[512];
int len = -1;
try {
/* 지정한 경로에 해당하는 자원 URL 객체 */
URL url = application.getResource(resourcePath);
/* 자원으로부터 데이터를 읽어오는 스트림 */
br = new BufferedReader(new InputStreamReader(url.openStream()));
/* 스트림으로 데이터를 읽어와서 출력 */
while ((len = br.read(buff)) != -1) {
out.print(new String(buff, 0, len));
} // while
} catch (Exception e) {
} finally {
if (br != null) { try { br.close(); } catch (Exception e) {} } // if
} // try - catch - finally
%>
</body>
</html>
<!--
실행결과
자원의 실제 경로 : C:\Study\workspace_EE\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Blog\test.txt
test.txt 의 내용
---------------------------------------------------------------------------------------------------------------------------------------------------------
예제를 위한 test.txt 파일입니다.
-->
출처: https://gangzzang.tistory.com/entry/JSP-기본-객체-out-pageContext-application-page [갱짱.study]
댓글
댓글 쓰기