2017-09-26 39 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。 欲了解更多详情,我强烈建议阅读文档。