在servlet中获取init参数

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

我试过了

getServletContext().getInitParametr("name")

getServletConfig().getInitParametr("name")

但他们都返回null 。 我可以在doGet()获取init参数吗?

答案是 – 是的,你可以

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

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

引自“ Head First Servlets&JSP:通过Sun认证Web组件开发人员考试 ” :

servlet init参数只读取ONCE – 当Container初始化servlet时 。 …
当Container创建一个servlet时,它会读取DD并为ServletConfig创建名称/值对。 Container永远不会再次读取init参数! 参数在ServletConfig中之后, 除非重新部署servlet,否则不会再次读取它们

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

上下文init参数 (在元素中定义)和servlet init参数 (在元素中定义)。 它们都被称为init参数 ,尽管在不同的元素中定义。

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

  • Servlet init参数仅适用于配置了的servlet。

  • Context init参数在元素中定义。

  • Servlet init参数在每个特定servlet元素中定义。


例:

   Servlet testing app   email admin@example.com   Info Servlet com.example.InfoServlet   name John Doe    Info Servlet /test/ShowInfo.do   

  • 访问servlet中的上下文init参数
    getServlet Context ().getInitParameter(“email”);
  • 访问在部署描述符中定义的servlet中的servlet init参数
    getServlet Config ().getInitParameter("name");

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

并且还有ServletContextServletConfig的 Enumeration getInitParameterNames()方法来获取所有 init参数。

如果你已经覆盖了默认的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属性。