我有一个像这样的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,如果设置为值?
谢谢!
答案 0 :(得分:1)
我认为WebInitParam正在为servlet定义init参数而不是整个应用程序上下文,所以如果你想通过ServletContext对象访问参数,那么在web.xml部署描述符中定义上下文参数。