无法从web.xml读取上下文参数

时间:2014-02-17 01:02:35

标签: java tomcat web.xml

我正在编写一个J2EE Web应用程序,其中NetBeans在Tomcat 7.0.41中运行。我已经创建了一个部署描述符web.xml,其中包含四个context-params。我创建了一个扩展HttpServlet的类。在类的init方法中,当我从ServletConfig实例调用getInitParameterNames时,我得到一个空的枚举。最终,我怀疑Tomcat根本没有读取web.xml文件,因为我不得不求助于使用@WebServlet注释甚至到达servlet。任何人都可以建议我为什么不能访问context-params和/或为什么Tomcat没有读取web.xml文件?

这是web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<context-param>
    <param-name>preptimeminutes</param-name>
    <param-value>60</param-value>
</context-param>
<context-param>
    <param-name>preptimehours</param-name>
    <param-value>0</param-value>
</context-param>
<context-param>
    <param-name>servings</param-name>
    <param-value>1</param-value>
</context-param>
<context-param>
    <param-name>calories</param-name>
    <param-value>100</param-value>
</context-param>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>

以下是init方法的代码:

@Override
public void init(ServletConfig servletConfig) throws ServletException
{
    int preptemp;
    String tempString1, tempString2;
    Enumeration<String> e = servletConfig.getInitParameterNames();

this.servletConfig = servletConfig;
    servletContext = servletConfig.getServletContext();

    try 
    {
        while(e.hasMoreElements())
        {
           servletContext.log(e.nextElement());       
        }
    } ...
}

谢谢,

Jason Mazzotta

1 个答案:

答案 0 :(得分:0)

您似乎想要读取ServletContex的参数(整个应用程序的参数),但您最终阅读ServletConfig(特定servlet的参数)。

另一个潜在的问题是,您要覆盖init(ServletConfig)而不是init()。不应该重写第一个方法,因为它处理许多servlet生命周期任务,例如将servlet添加到可用的servlet池。如果要在初始化过程中添加内容,则应覆盖init()稍后调用的init(ServletConfig)方法。

所以尝试类似

的东西
@Override
public void init() throws ServletException
{
    ServletContext servletContext = getServletContext();
    Enumeration<String> e = servletContext.getInitParameterNames();
    try 
    {
        while(e.hasMoreElements())
        {
           servletContext.log(e.nextElement());       
        }
    } ...
}