获取servlet中的init参数

时间:2013-02-02 18:27:14

标签: java servlets deployment-descriptor init-parameters

我是servlets的新手。我使用init(“name”)在init()方法中获得了DD中的getInitParameter参数。我在doGet()方法中尝试了很多来访问init参数,但它始终返回null

我试过

getServletContext().getInitParametr("name")

getServletConfig().getInitParametr("name")

但他们都返回null。我可以在doGet()

中获取init参数

2 个答案:

答案 0 :(得分:68)

答案是 - 是的,你可以

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

1)您是否在Web Container / Application Server运行时添加了init参数?

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

  

servlet init参数只读取ONCE - 当Container时   初始化servlet 。    ...
  当Container创建一个servlet时,它   读取DD并为ServletConfig创建名称/值对。   Container永远不会再次读取init参数!一旦   参数在ServletConfig中,它们将不再被读取   直到/除非你重新部署servlet


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

  

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

     
      
  • 上下文 init参数可用于当前Web应用程序中的任何 servlet或JSP。

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

  •   
  • 上下文 init参数在<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参数deployment descriptor中定义:
    getServletConfig().getInitParameter("name");

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

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

答案 1 :(得分:8)

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

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

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

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