我在使用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。
答案 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。