I'm using Tomcat 8.0.23, but wondered if a filter defined in the Tomcat conf/web.xml as well as defined in my app's WEB-INF/web.xml file causes the filter to be loaded twice or whether duplicate filters are ignored?

If duplicates are ignored, what makes it a "duplicate"? Just the name, the filter-name and url-pattern combo? The filter-class?

Is the filter-name field can sensitive? Noted that Tomcat uses a lowercase 's' for it's filter name.

In Tomcat's conf/web.xml:

    <filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>

    <filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

In my webapp's WEB-INF/web.xml:

<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
    <filter-class>
org.apache.catalina.filters.SetCharacterEncodingFilter
    </filter-class>
<async-supported>true</async-supported> <!-- Enable if using Vaadin PUSH -->
    <init-param>
     <param-name>encoding</param-name>
     <param-value>UTF-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

When using Atmosphere with Vaadin PUSH, I occasionally get an exception that indicates an issue with async operations, and it shows my filter twice in the stack trace:

*java.lang.IllegalStateException: A filter or servlet of the current chain does not support asynchronous operations.** * at org.apache.catalina.connector.Request.startAsync(Request.java:1610) at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:1037) at javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:392) at org.atmosphere.cpr.AtmosphereRequest.startAsync(AtmosphereRequest.java:723) at org.atmosphere.container.Servlet30CometSupport.suspend(Servlet30CometSupport.java:93) at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:68) at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2075) at com.vaadin.server.communication.PushRequestHandler.handleRequest(PushRequestHandler.java:226) at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408)
      at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:351)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) *at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)* at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) *at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)* at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)

Reply via email to