1

我正在使用 servlet 进行 Web 开发的第一步。现在我正在尝试检索 servlet 的一些初始参数以及上下文参数。它们在 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>
...

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

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);
    }
...

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

我为此苦苦挣扎了几个小时,并确保节点在内部,并且我不会以任何方式覆盖 GreeterServlet 的 init() 方法(因为在许多讨论列表中的某些情况下,它被报告为问题的原因) . 我在网上没有找到类似的案例-也许是因为我太初学者了,这太简单了。无论如何,感谢任何愿意看看它的人!

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

4

2 回答 2

1

在解决这个问题时,我发现可以通过以下方式访问 servlet 的 init 参数(针对上述问题):

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

什么将打印预期的servletValue

这确实是一个解决方案,即使它没有回答前面的问题。如果其他人遇到类似问题,请尝试一下!如果有人找出原始问题的解决方案,那肯定会很受欢迎!;-)

于 2013-01-11T05:10:08.513 回答
-1

我应该将此添加为评论,但不知何故我没有得到这个问题的“添加评论”链接,因此作为答案发布。

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

于 2013-01-08T06:42:05.247 回答