在SSH中,可以直接在web.xml中指明自定义的过滤器类的全路径,也可以将过滤器交给spring管理
方式1:
定义一个过滤器类
public class MyFilter implements Filter {
private FilterConfig filterConfig;
@Override
public void destroy() {
System.out.println("destroy------------执行");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("进入拦截器了");
System.out.println("FilterName---------" + filterConfig.getFilterName());
System.out.println("parameter-------" + filterConfig.getInitParameter("param"));
chain.doFilter(request, response);
System.out.println("过滤结束");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("拦截器init()方法");
this.filterConfig = filterConfig;
}
}
在web.xml中添加如下代码
<filter>
<filter-name>myFilter</filter-name>
<filter-class>qust.thb.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
运行,结果如下
进入拦截器了
FilterName---------myFilter
parameter-------null
过滤结束
方式2:交给spring管理
用这种方式,将不执行init()方法,用法如下
定义一个过滤器类
public class MyFilter implements Filter {
private String urlname;
@Override
public void destroy() {
System.out.println("destroy------------执行");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("进入拦截器了");
System.out.println("urlname----------" + urlname);
chain.doFilter(request, response);
System.out.println("过滤结束");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("拦截器init()方法");
}
public String getUrlname() {
return urlname;
}
public void setUrlname(String urlname) {
this.urlname = urlname;
}
}
在web.xml中添加如下代码
<filter>
<filter-name>myFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在spring-base.xml中添加如下代码
注意:bean的id值与web.xml中filter-name要一致
<bean id="myFilter" class="qust.thb.filter.MyFilter">
<property name="urlname">
<value>www.123.com</value>
</property>
</bean>
运行结果如下
进入拦截器了
urlname----------www.123.com
过滤结束
另:filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,servlet 处理之后,不会继续向下传递。filter功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。filter可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等
关于servlet,filter, listener, interceptor 区别与联系,下边这个网址介绍的很详细
http://blog.csdn.net/Dracotianlong/article/details/9083249