在 servlet 中获取 init 参数

我是 servlets 的新手。我在方法中获取了DD中的参数(“名称”)。我从方法中尝试了很多来访问参数,但它总是返回。initinit()getInitParameterdoGet()initnull

我试过

getServletContext().getInitParametr("name")

getServletConfig().getInitParametr("name")

但他们都回来了。我可以在 ?nulldoGet()


答案 1

答案是 - 是的,你可以

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

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

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

servlet init 参数只读一次 - 当容器初始化 servlet 时。...
当容器创建 servlet 时,它会读取 DD 并为 ServletConfig 创建名称/值对。容器再也不会读取 init 参数!一旦参数进入 ServletConfig,除非您重新部署 Servlet,否则不会再次读取它们


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

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

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

  • Servlet init 参数仅对配置了 的 servlet 可用。<init-param>

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

  • Servlet init 参数在每个特定 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 中的上下文 init 参数
    getServletContext().getInitParameter(“email”);
  • 部署描述符中为其定义的 servlet 中访问 servlet init 参数
    getServletConfig().getInitParameter("name");

获取 servlet init 参数的另一种方法是使用抽象类 GenericServlet 中定义的方法:

提供此方法是为了方便起见。它从 Servlet 的 ServletConfig 对象中获取命名参数的值。public String getInitParameter(String name);

还有ServletContextServletConfig的方法可以获取所有init参数。Enumeration<String> getInitParameterNames()


答案 2

如果已经重写了默认的 init() 方法,请确保将 Servlet 配置参数传递给它,并调用 super init 方法。因为如果你不这样做,你的代码就不可能找到你的 servlet 配置。

以下是 servlet init() 代码的代码:

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

另外我注意到你使用了Servlet版本3,我不确定它是否支持定义servlet标签,所以如果上面的解决方案dosen工作,请尝试删除Web应用程序属性。


推荐