我正在编写一个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
答案 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());
}
} ...
}