2017-09-26 65 views
0

我試圖通過web.xml文件將一些init-param值加載到serevlet中,但它們一直顯示爲空。我有兩個上下文參數的工作正常。有誰知道我做錯了什麼?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"); 

廣義地說,servlet上下文是由JVM內部的servlet共享,但是這個對象是存在內Servlet配置爲一個特定的servlet,而<init-param>進入ServletConfig。 欲瞭解更多詳情,我強烈建議閱讀文檔。