getInitParameterNames()不获取init参数

时间:2013-01-08 06:13:15

标签: java servlets web

我在使用servlet进行Web开发时已经迈出了第一步。现在我试图检索servlet的一些init参数以及上下文的参数。它们在web.xml上声明如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>JediWebTutorial</display-name>
    **<context-param>
        <param-name>contextParam</param-name>
        <param-value>contextValue</param-value>
    </context-param>**
    <servlet>
        <servlet-name>GreeterServlet</servlet-name>
        <servlet-class>jedi.servlets.GreeterServlet</servlet-class>
        **<init-param>
            <param-name>servletParam</param-name>
            <param-value>servletValue</param-value>    
        </init-param>**
    </servlet>
    <servlet>
        <servlet-name>GetParameterValuesServlet</servlet-name>
...

我试图在makeGet方法中的GreeterServlet中获取它,如下所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    ServletConfig config = getServletConfig();
    ServletContext context = config.getServletContext();
    Enumeration<String> servletParams = config.getInitParameterNames();
    Enumeration<String> contextParams = context.getInitParameterNames();

    for (String param : Collections.list(servletParams)) {
        System.out.println(param);
    }

    for (String param : Collections.list(contextParams)) {
        System.out.println(param);
    }
...

正如预期的那样,控制台显示名称&#34; contextParam&#34;。但是,它不会打印&#34; servletParam&#34;名称。

我挣扎了好几个小时,并确保节点在里面,并且我没有以任何方式覆盖GreeterServlet的init()方法(因为它被报告为导致问题的原因)许多讨论列表中的一些案例)。我还没有在网上找到类似的案例 - 也许因为它太简单了,我也太开始了。无论如何,感谢任何懒得去看看它的人!

顺便说一句,如果有帮助,我使用的是TomCat 7.0.34和Eclipse Helios。

2 个答案:

答案 0 :(得分:1)

解决这个问题我发现可以通过以下方式访问servlet的init-parameters(针对上面的问题):

ServletContext context = config.getServletContext();
ServletRegistration register = context.getServletRegistration("GreeterServlet");
String servletParam = register.getInitParameter("servletParam");
System.out.println(servletParam);

什么将打印预期的 servletValue

这确实是一种解决方案,即使它没有回答先前的问题。如果有其他人遇到类似的问题,试试吧!如果有人找出原始问题的解决方案,它仍然肯定会受欢迎! ; - )

答案 1 :(得分:-1)

我应该将此添加为评论,但不知何故我没有收到此问题的“添加评论”链接,因此张贴为答案。

您发布的部分doGet()方法是哪个servlet?它似乎是GetParameterValuesServlet的一部分,并且您已将init参数添加到GreeterServlet。