28

我是 servlet 的新手。我在使用(“名称”)的方法中获得了initDD 中的参数。我从方法内部尝试了很多来访问参数,但它总是返回.init()getInitParameterdoGet()initnull

我试过了

getServletContext().getInitParametr("name")

getServletConfig().getInitParametr("name")

但他们都回来了null。我可以得到 init 参数doGet()吗?

4

2 回答 2

72

答案是——是的,你可以

好的,除了JB Nizet 的评论,这里还有一些建议。

1)您是否在Web 容器/应用程序服务器运行时添加了初始化参数?

引自Head First Servlets & JSP: Passing the Sun Certified Web Component Developer Exam

servlet 初始化参数是只读的——当 Container 初始化 servlet 时。...
当容器创建一个 servlet 时,它会读取 DD 并为 ServletConfig 创建名称/值对。Container 再也不会读取 init 参数了!一旦参数在 ServletConfig 中,它们将不会被再次读取,直到/除非您重新部署 servlet


2)有两种类型的init 参数可用。“ Head First Servlets and JSP ”(强调我的) 的另一句话:

上下文初始化参数(在<context-param>元素中定义)和servlet 初始化参数(在<init-param>元素中定义)。尽管在不同的元素中定义,但它们都被称为初始化参数。

  • 上下文初始化参数可用于作为当前 Web 应用程序一部分的任何servlet 或 JSP。

  • Servlet初始化参数仅用于为其配置的 servlet <init-param>

  • 上下文初始化参数在<web-app>元素内定义。

  • Servlet初始化参数在每个特定 servlet<servlet>的元素中定义。


例子:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
    version="3.0">

    <display-name>Servlet testing app</display-name>

    <!-- This is a context init parameter -->
    <context-param>
        <param-name>email</param-name>
        <param-value>admin@example.com</param-value>
    </context-param>

    <servlet>
        <servlet-name>Info Servlet</servlet-name>
        <servlet-class>com.example.InfoServlet</servlet-class>
        <!-- This is a servlet init parameter -->
        <init-param>
            <param-name>name</param-name>
            <param-value>John Doe</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Info Servlet</servlet-name>
        <url-pattern>/test/ShowInfo.do</url-pattern>
    </servlet-mapping>

</web-app>


  • 在 servlet 中访问上下文初始化参数:
    getServletContext().getInitParameter(“email”);
  • 访问在部署描述符中定义的 servlet 中的servlet init 参数
    getServletConfig().getInitParameter("name");

获取servlet 初始化参数的另一种方法是使用抽象类GenericServlet中定义的方法:
public String getInitParameter(String name);
提供此方法是为了方便。它从 servlet 的ServletConfig对象中获取命名参数的值。

ServletContextServletConfig也有获取所有初始化参数的Enumeration<String> getInitParameterNames()方法。

于 2013-02-03T21:57:40.903 回答
8

如果您覆盖了默认的 init() 方法,请确保将 Servlet 配置参数传递给它并调用超级 init 方法。因为如果您不这样做,您的代码将无法找到您的 servlet 配置。

这是 servlet init() 代码的代码:

   public void init(ServletConfig config) throws ServletException {
    super.init(config);
    // Rest of your code ...
    }

我还注意到您使用了 Servlet 版本 3,我不确定它是否支持定义 servlet 标签,所以如果上述解决方案有效,请尝试删除 web-app 属性。

于 2014-05-31T11:47:48.403 回答