过滤器根本没有被执行

时间:2018-01-25 20:01:28

标签: servlets servlet-filters

我在Tomcat 8中有一个简单的HttpServlet过滤器,我希望在每个请求中使用它,然后继续执行其他servlet。但是过滤器根本没有被执行。这是web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1">

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <filter>
        <filter-name>requestFilter</filter-name>
        <filter-class>controller.RequestsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>requestFilter</filter-name>
        <servlet-name>index</servlet-name>
    </filter-mapping>

    <servlet>
        <servlet-name>index</servlet-name>
        <jsp-file>/index.jsp</jsp-file> 
    </servlet>
    <servlet-mapping>
        <servlet-name>index</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>

</web-app>

这是过滤器:

@WebFilter
public class RequestsFilter extends HttpServlet implements Filter {

    static Logger log = Logger.getLogger("RequestFilter");

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;

        req.setAttribute("key", "some random string");

        log.warning("**RequestFilter**");
        filterChain.doFilter(req, resp);
    }

}

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

这是 NOT 过滤器。

混合 servlet和过滤器。 Filter和Servlet完全是两个不同的东西。

public class RequestsFilter extends HttpServlet implements Filter {

我也可以在你的web.xml中看到一些问题。 <servlet-name>

中不应该有<filter-mapping>
 <servlet-name>index</servlet-name>

您可以找到一个简单而干净的示例 here