2017-09-26 3 views
0

web.xml 파일을 통해 일부 init-param 값을 serevlet으로로드하려고하지만 null이 계속 표시됩니다. 나는 잘 작동하는 두 개의 context-param을 가지고있다. 아무도 내가 뭘 잘못하고 있는지 알아?Servel init-param이 null을 반환합니다.

이것은 내 응용 프로그램에 사용하는 web.xml 파일입니다.

<?xml version="1.0" encoding="UTF-8"?> 

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
          http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1" 
     > 

     <display-name>Hello World Application</display-name> 
     <servlet> 
      <servlet-name>contextxParameterServlet</servlet-name> 
      <servlet-class>com.wrox.HelloServlet</servlet-class> 
      <init-param> 
       <param-name>database</param-name> 
       <param-value>CustomerSupport</param-value> 
      </init-param> 
      <init-param> 
       <param-name>server</param-name> 
       <param-value>10.0.12.5</param-value> 
      </init-param> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
      <servlet-name>contextxParameterServlet</servlet-name> 
      <url-pattern>/contextParameters</url-pattern> 
     </servlet-mapping> 
     <context-param> 
      <param-name>settingOne</param-name> 
      <param-value>foo</param-value> 
     </context-param> 
     <context-param> 
      <param-name>settingTwo</param-name> 
      <param-value>bar</param-value> 
     </context-param> 
     <servlet> 
      <servlet-name>servletParameterServlet</servlet-name> 
      <servlet-class>com.wrox.initParams</servlet-class> 
      <init-param> 
       <param-name>database</param-name> 
       <param-value>CustomerSupport</param-value> 
      </init-param> 
      <init-param> 
       <param-name>server</param-name> 
       <param-value>10.0.12.5</param-value> 
      </init-param> 
     </servlet> 
     <servlet-mapping> 
      <servlet-name>servletParameterServlet</servlet-name> 
      <url-pattern>/servletParameter</url-pattern> 
     </servlet-mapping> 
</web-app> 

이 페이지는 servletParameterServlet에 매핑됩니다.

package com.wrox; 

import javax.servlet.http.HttpServlet; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebInitParam; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Enumeration; 
import java.util.List; 

public class initParams extends HttpServlet{ 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
    { 
     ServletContext c = this.getServletContext(); 
     PrintWriter writer = response.getWriter(); 
     Enumeration<String> temp = c.getInitParameterNames(); 

     while(temp.hasMoreElements()) { 
      writer.append(temp.nextElement()); 
     } 



     writer.append("database: ").append(c.getInitParameter("database")) 
       .append(", server: ").append(c.getInitParameter("server")); 
    } 

    @Override 
    public void init(ServletConfig config) throws ServletException 
    { 
     super.init(config); 
     System.out.println("Servlet " + this.getServletName() + " has started."); 
    } 

    @Override 
    public void destroy() { 
     System.out.println("Servlet " + this.getServletName() + " has stopped."); 
    } 
} 

답변

0

당신이 일을 초기화 한 방법은, 내가

this.getServletConfig().getInitParameter("foo"); 

에 사용할 수 있어야합니다 당신이 광범위하게 JVM 내부 서블릿에 의해 공유되는 서블릿 컨텍스트를 말하기 찾고있는 것을 생각하지만,이 개체는 내부에 존재입니다 특정 서블릿에 대한 서블릿 구성, <init-param>은 ServletConfig에 들어갑니다. 자세한 내용은 문서를 읽으시기 바랍니다.