Java/Servlet & JSP

JSP 초기화 하기

체리필터 2009. 2. 10. 15:06
728x90
반응형
ServletConfig를 web.xml에 정의해 두고 나서 서블릿에서 가져다 쓰는 방법에 대해 http://www.4te.co.kr/540 에서 다루었었다.
JSP에서도 마찬가지로 초기화를 통해서 web.xml에 있는 ServletConfig를 변수처럼 사용할 수 있다.
방법은 서블릿 생명 주기에서 가장 처음에 한번만 호출하는 메소드인 jspInit() 메소드를 오버라이드 해서 사용하면 되는 것이다.
사용 방법은 아래와 같다.

  <servlet>
      <servlet-name>MyTestInit</servlet-name>
      <jsp-file>/TestInit.jsp</jsp-file>
      <init-param>
          <param-name>email</param-name>
          <param-value>ikickedbutt@wickedlysmart.com</param-value>
      </init-param>
  </servlet>
 
  <servlet-mapping>
      <servlet-name>MyTestInit</servlet-name>
      <url-pattern>/TestInit.jsp</url-pattern>
  </servlet-mapping>

위와 같이 설정을 하면 된다.
다만 servlet-class가 아니라 jsp-file 이라는 태그를 사용하게 되며, 패키지 형식이 아니라 디렉토리 형식으로 표시한다.
TestInit.jsp 파일은 아래와 같이 작성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
public void jspInit() {
    ServletConfig sConfig = getServletConfig();
    String emailAddr = sConfig.getInitParameter("email");
    System.out.println("emailAddr : " + emailAddr);
    ServletContext ctx = getServletContext();
    ctx.setAttribute("mail", emailAddr);
}
%>
<!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>Insert title here</title>
</head>
<body>
<%= pageContext.getAttribute("mail", PageContext.APPLICATION_SCOPE) %>
</body>
</html>

ServletConfig에서 email 값을 읽어온 후 ServletContext에 setting 하고 있다.
그 후 pageContext를 이용하여 ServletContext를 읽어와 화면에 뿌려주고 있다.

참고로 page생존범위를 셋팅하고 읽어오는 방법은 아래와 같다.

<% Float one = new Float(42.5); %>
<% pageContext.setAttribute("foo", one); %>
<%= pageContext.getAttributesScope("foo") %>

<% Float two = new Float(22.4); %>
<% pageContext.setAttribute("foo", two, PageContext.SESSION_SCOPE); %>
<%= pageContext.getAttribute("foo", PageContext.SESSION_SCOPE) %>

setAttribute와 getAttribute 메소드는 인자를 String 하나만 받는 경우와, String과 int 두개를 받는 것이 있다.
인자가 하나인 경우에는 pagecontext 객체의 속성에 저장된 것을 읽지만, 두개인 것은 지정한 범위에 있는 속성을 읽게 된다.

TestInit.jsp에서 사용한 "<%= pageContext.getAttribute("mail", PageContext.APPLICATION_SCOPE) %>"는 다음과 같이 사용할 수도 있다.

<%= application.getAttribute("mail") %>

scope의 범위를 PageContext.APPLICATION_SCOPE로 주는 대신에 application으로 접근해서 동일한 효과를 얻게 되는 것이다.
생존 범위가 어디인지 모르는 경우에 속성을 찾기 위해서는 다음과 같이 사용할 수 있다.

<%= pageContext.findAttribute("foo") %>

위와 같이 하게 되면 제일 처음으로 page 생존 범위에서 찾는다. page 생존 범위에 없다면 가장 작은 범위에서부터 시작해서 가장 넓은 범위로 속성을 찾게 된다.
즉 request => session => application 범위로 찾게 된다.
아래와 같이 하게 되면 결과 값은 42.5가 나오게 된다.

<% Float one = new Float(42.5); %>
<% pageContext.setAttribute("foo", one); %>
<%= pageContext.getAttributesScope("foo") %>

<% Float two = new Float(22.4); %>
<% pageContext.setAttribute("foo", two, PageContext.SESSION_SCOPE); %>
<%= pageContext.getAttribute("foo", PageContext.SESSION_SCOPE) %>

<%= pageContext.findAttribute("foo") %> => 42.5가 나옴


728x90
반응형

'Java > Servlet & JSP' 카테고리의 다른 글

EL 사용하기  (3) 2009.02.12
표준 액션을 사용한 JSP  (0) 2009.02.11
스크립틀릿에서 변수 선언하기  (0) 2009.02.04
간단한 Jsp 시작하기  (0) 2009.02.04
리스너 예제  (2) 2009.02.03