참고글




JSP 페이지 초기화시 ServletConfig의 초기화 파라미터 사용하기
JSP에서도 서블릿을 작성할때와 마찬가지로 초기화 메서드인 jspInit() 메서드가 존재하며 web.xml에서 <init-param> 을 통해 초기화시 사용할 값들을 정의해주어 사용할 수 있습니다.


/jspTest.jsp
먼저 아래와 같이 JSP 페이지를 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"%>                         
 
 
<%!
     private String encode; 
     public void jspInit() { 
           this.encode = getInitParameter("jspEncode"); 
           System.out.println("jspInit() 호출!!"); 
     }
%>
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
</head> 
<body> 
     <h1><%= this.encode %></h1> 
</body> 
</html> 
cs


jspInit() 메서드는 JSP 페이지가 초기화 될 때 최초에 한 번 실행되는 메서드로 JSP 초기화시에 수행되어야 할 행동이 있다면 오버라이딩 해서 사용할 수 있도록 제공되는 메서드입니다. 자세한 내용은 상단의 참고글 링크를 참고해주세요. 여기서는 getInitParameter("jspEncode"메서드를 통해 초기화 파라미터를 구해오도록 하고 encode 멤버 변수에 저장하도록 했습니다. 그리고 서버의 콘솔 로그에 "jspInit() 호출!!" 을 출력하도록 했습니다.
     public void jspInit() { 
           this.encode = getInitParameter("jspEncode");                                 
           System.out.println("jspInit() 호출!!"); 
     }
cs

getInitParameter() 메서드는 JSP 페이지가 서블릿으로 변환됐을 때 상속받게 되는 GenericServlet 의 메서드 이므로 기본적으로 사용 가능합니다. getInitParameter() 메서드는 내부적으로 ServletConfig 를 통해 초기화 파라미터를 가지고 옵니다.




web.xml에 JSP 초기화 파라미터 설정하기
JSP 페이지를 작성했으면 web.xml에 JSP 페이지를 설정으로 등록하고 <init-param> 태그를 통해 초기화 파라미터를 등록합니다. 서블릿을 등록하고 초기화 파라미터를 등록하는 것처럼 JSP 페이지 또한 설정이 가능합니다 다만 <servlet-class> 태그 대신 <jsp-file> 태그를 사용한다는 점이 다릅니다.
<servlet>                                                                                
     <servlet-name>myJsp</servlet-name> 
     <jsp-file>/jspTest.jsp</jsp-file> 
     <init-param> 
           <param-name>jspEncode</param-name> 
           <param-value>UTF-8</param-value> 
     </init-param> 
</servlet> 
<servlet-mapping> 
     <servlet-name>myJsp</servlet-name> 
     <url-pattern>/myJsp.jsp</url-pattern> 
</servlet-mapping> 
cs


<init-param> 태그를 통해 초기화 파라미터를 등록하는데, <param-name>에 JSP 페이지에서 getInitParameter() 메서드의 키값으로 지정할 이름을 넣어줍니다. <param-value>에는 실제 넘겨줄 파라미터 값을 등록합니다.
     <init-param>                                                                         
           <param-name>jspEncode</param-name> 
           <param-value>UTF-8</param-value> 
     </init-param> 
cs


서블릿의 경로 URL을 맵핑할때와 마찬가지로 등록한 JSP 페이지도 <servlet-mapping> 태그를 통해 등록합니다.
<servlet-mapping>                                                                         
     <servlet-name>myJsp</servlet-name> 
     <url-pattern>/myJsp.jsp</url-pattern> 
</servlet-mapping>
cs


지금까지의 설정을 종합해보면 /jspTest.jsp를 등록하고 /myJsp.jsp 경로로 URL을 맵핑해 주었습니다. 브라우저를 통해 다음과 같이 호출해봅니다.


서버의 콘솔에는 웹 컨테이너가 최초에 JSP 페이지를 서블릿으로 변환하고 생성하는 과정에서 초기화 될 때 한 번 "jspInit() 호출!!이 출력되며, 이후에 해당 경로를 호출하거나 새로고침 해도 출력되지 않습니다.




스크립트릿 또는 표현식에서 초기화 파라미터를 얻는 방법
지금까지는 JSP 페이지의 초기화 메서드인 jspInit() 메서드에서 초기화 파라미터를 얻는 방법을 알아보았는데, 만약 스크립트릿이나 표현식에서 초기화 파라미터를 얻고 싶은 경우 config 기본 객체를 이용하여 값을 얻을 수 있습니다. config 기본 객체 또한 실제로는 ServletConfig 의 인스턴스이므로 초기화 메서드에서 사용했던 방법과 내부적으로는 같다고 할 수 있습니다.
<body>
     <h1><%= config.getInitParameter("jspEncode"%></h1>                                 
</body> 
cs





초기화 파라미터 여러개 사용하고 싶은 경우
위에서는 초기화 파라미터를 하나만 사용했는데 만약 여러개의 파라미터를 통해 여러값을 넘겨주고 싶은 경우에는 <init-param> 을 여러번 사용하면 됩니다.
<servlet>                                                                                 
     <servlet-name>myJsp</servlet-name> 
     <jsp-file>/jspTest.jsp</jsp-file> 
     <init-param> 
           <param-name>jspEncode</param-name> 
           <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param>
           <param-name>param2</param-name> 
           <param-value>value2</param-value> 
     </init-param>
 
</servlet> 
cs






주의사항
web.xml을 통해 JSP 페이지를 등록하고 URL이 맵핑된 상태에서 맵핑된 URL을 사용하지 않고 곧바로 JSP 파일을 호출한 경우 초기화 파라미터를 얻을 수 없습니다. 이 경우 하나의 JSP 페이지를 가지고 내부적으로 두 개의 JSP가 생성되어 초기화 되며, 하나는 우리가 등록해 주었던 JSP 페이지이며, 하나는 초기화 파라미터가 설정되지 않은 JSP 페이지입니다. 따라서 실제 경로를 그대로 호출하게 되면 초기화 파라미터를 지정해주지 않은 상태의 JSP 페이지가 로딩되어 null값을 얻어오게 됩니다.




블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,