做j2ee的东西两年了,今天才搞明白Filter和Listener的区别,真是汗颜,以后应该少用所谓的框架,害人不浅啊。。。
从我的理解来看Listener相当于j2ee容器给我们提供的main函数的切入点,可以让我们做一些系统初始化的工作,需要实现的类是:javax.servlet.ServletContextListener。
而Filter则是对每次请求(可以通过filter-mapping指定)做过滤处理,请求首先请过filter链的处理,然后再到HttpServlet的init方法。对应的类是:javax.servlet.Filter。
下面是在web.xml中配置Filter和Listener的例子:
<listener> <listener-class> com.bwl.util.TestListener </listener-class> </listener> <filter> <filter-name>encodingFilter</filter-name> <display-name>EncodingFilter</display-name> <description>Set the request encoding</description> <filter-class> com.bwl.filter.EncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>