在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对象获取命名参数的值。
并且还有ServletContext和ServletConfig的 Enumeration
方法来获取所有 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属性。