如果项目中有多个filter或者listener,就会导致web.xml文件变得臃肿.求教各位,spring有没有解决方案? 有什么方案可以解决这种问题呢?

解决方案 »

  1.   

    该配的就得配,这两个都是 Servlet 规范中必须得配置的东西。
      

  2.   

    org.springframework.web.servlet.handler.SimpleServletHandlerAdapter 可以解决servlet的问题。
    listener可以用一个接口,多个实现类解决。
    FilterChainProxy 可以解决filter的问题,但是 FilterChainProxy 是 Spring Security 的产物,项目中没使用Spring Security,我不想把问题搞复杂,有没有其他办法解决?
      

  3.   

    多个filter或者listener 能有多少个?
    做软件不是搞艺术 简单实用才是根本吧
      

  4.   

    Guice就提供了一种简洁的方式来配置filter或servlet:filter("/*").through(MyFilter.class);
    serve("/my/*").with(MyServlet.class);这样的话,web.xml就不会那么臃肿了。
    Spring有没有类似的功能啊?
      

  5.   

    唉,事实上不是我想怎么样就怎么样,公司要我找解决方案我也没办法。说一下filter的解决办法吧:首先配置web.xml:<filter>
        <!-- Spring Filter Configuration -->
        <filter-name>filterChainProxy</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>filterChainProxy</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>这是一个Spring的代理类,filter会被代理,由Spring用bean的方式管理filter,所以filter中可以注入。然后配置Spring的配置文件,beans.xml:    <bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
            <security:filter-chain-map path-type="ant">
                <security:filter-chain pattern="/*"     filters="openEntityManagerInViewFilter,filter1,filter2"/>
            </security:filter-chain-map>
        </bean>这个bean用到了Spring Security中的FilterChainProxy,过滤器链代理类。路径有两种匹配方式:ant,regex。
    filters中可以配置多个filter,配置的名字对应受Spring管理的过滤器bean,如:@Component("filter1")
    public class TestSpringFilter implements Filter {
        ...
    }这样配置,应用程序就会依次执行filter.over.