【问题标题】:Java: filter to a servlet failed to work properlyJava:过滤到 servlet 无法正常工作
【发布时间】:2017-06-11 23:53:12
【问题描述】:

我正在尝试向 servlet 添加过滤器: filter的配置是这样的:

@WebFilter(filterName = "AFilter",urlPatterns = "/*", servletNames = "AServlet")

  public class AFilter implements Filter {
         public void destroy() {
    System.out.println("filter is dying");
}
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    chain.doFilter(req, resp);
    System.out.println("filter is working");
}
  public void init(FilterConfig config) throws ServletException {
    System.out.println("filter is born");
}

而我的AServlet 是这样的:

@WebServlet(name = "AServlet",urlPatterns = "/AServlet")

public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("AServlet");
}

}

我正在使用注解来配置 servlet 和过滤器的映射,所以 web.xmlfile 是空的,但是问题是当我尝试运行 Web 应用程序时,我得到了这个输出:

AFilter is born
AFilter is working
AFilter is working
AFilter is working

似乎有些程序调用了AFilter 3 次,但我无法弄清楚是哪个,当我尝试从网络浏览器访问Aservlet 时:http://localhost:80/AServlet,我看到控制台是这样的:

AServlet
AFilter is working

这真的很令人困惑,我似乎成功地访问了AServlet,而AFilter 也在做它的工作。那么有人可以告诉我出了什么问题吗?提前致谢。 (顺便说一句:我使用的 IDE 是 Intellij IDEA Ultimate edition)

【问题讨论】:

  • 我已经弄清楚为什么过滤器doFiltermethod在Web应用程序启动时调用了3次,index.jsp(在urlpattern="/*"下)是默认的登陆页面,所以我更改了我的urlpattern=/web/service/,过滤器工作行不见了,但是当我访问AServlet时,我上面提到的问题仍然存在。

标签: java servlets intellij-idea servlet-filters


【解决方案1】:

看了网上一些filter-servlet的文章,问题解决了,问题是这行:chain.doFilter(req,resp),我应该删除这行代码,否则filter会向我访问的目的地发送请求和响应无论如何。

【讨论】:

  • 虽然这个问题已经回答了......当你说你应该删除chain.dofilter()时我很困惑。如果你删除它,那么如何将请求转发到适当的资源?
  • 哦,这只是一个测试用例,我只是想看看我的过滤器是否工作
猜你喜欢
  • 2014-08-07
  • 2013-08-16
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多