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

API : http://docs.oracle.com/javaee/7/api/javax/servlet/jsp/JspWriter.html

- 웹 브라우저에 데이터를 전송하는 출력 스트림이다.

- 비-스크립트 요소들(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

- API : http://docs.oracle.com/javaee/7/api/javax/servlet/jsp/PageContext.html

- 하나의 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

- API : http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html 

- 특정 웹 어플리케이션에 포함된 모든 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 파일입니다.
 -->


+ Recent posts