从过滤器访问servlet init参数

时间:2011-12-20 11:14:00

标签: initialization servlet-filters servlet-3.0 init-parameters

我有一个像这样的servlet:


@WebServlet("/a/path")
@WebInitParam(name="name", value="name_value")
public class MyServlet extends HttpServlet {
//...

在这个servlet上我放了一个过滤器:


@WebFilter(dispatcherTypes = { DispatcherType.REQUEST }, urlPatterns = { "/a/*" })
public class MyFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//...
       HttpServletRequest req = (HttpServletRequest)request;
       //problem comes here
       System.out.println(req.getServletContext().getInitParameter("name"));
//...
}

问题是,即使我在 MyServlet 中设置@WebInitParameter,程序也会打印出一个空字符串(请参阅注释行 //问题来到这里 MyFilter )。我验证并看到来自servlet的 init()方法在 doFilter()之前执行。 所以有人可以在这个问题上点亮我吗?为什么 initParameter “name”为null,如果设置为值?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为WebInitParam正在为servlet定义init参数而不是整个应用程序上下文,所以如果你想通过ServletContext对象访问参数,那么在web.xml部署描述符中定义上下文参数。