定义:过滤器是一个服务器端组件,他可以截取用户端请求信息与响应信息,并对信息进行过滤

例:当进入csdn要进行文章编辑时,检测用户是否登录,若未登录,跳转到登录界面。

过滤器操作方法:

init() : 初始化过滤器,创建过滤器实例后调用这个方法,可以读取web.xml过滤器中的参数

doFilter() : 完成过滤操作,过滤器的核心方法,当用户请求访问预过滤出其关联的url
* 时调用这个方法 FilterChain参数可以调用chain.doFilter方法,将请求传给下一个
* 过滤器,或利用转发、重定向将请求转发到其他资源

destroy() : 销毁过滤器 释放资源

工作原理:

用户请求----->过滤器----->web资源

web资源----->过滤器----->用户

生命周期:

实例化----->初始化------>过滤----->销毁

web.xml--->init()---->dofilter()--->destory()

过滤器链:指一个网页需要经过多个过滤器的过滤才能对web资源进行请求

用户请求--->过滤器1--->过滤器2--->过滤器3---->.......------>web资源

经过多个过滤器的步骤为dofilter1(start)------>dofilter2(start)----->dofilter2(end)----->dofilter1(end) 即多个过滤器嵌套实现功能

例子:

首先先在web.xml中配置过滤器(也可以在代码中直接配置)

<filter>    <!-- 指定一个过滤器 -->
<filter-name>JavaFilter</filter-name> <!-- 给过滤器指定名字 -->
<filter-class>com.th.JavaFilter</filter-class> <!-- 指定过滤器的完整路径名 -->
</filter>
<filter-mapping> <!-- 设置一个Filter所负责拦截的资源 -->
<filter-name>JavaFilter</filter-name>
<url-pattern>/index.jsp</url-pattern> <!-- 设置Filter所拦截的请求路径 ,即过滤index.jsp页面的请求-->
</filter-mapping>

设置一个编码过滤器

//@WebFilter(
// urlPatterns={"*"},
//    initParams={@WebInitParam(name="encoding",value="utf-8")})
public class JavaFilter implements Filter{
private String defaultEncoding="utf-8"; /**
* 销毁方法。  当web应用移除或服务器停止时才销毁
*/
@Override
public void destroy() { }
/**
* 这个事过滤器的核心方法,完成实际操作,FilterChain方法用于访问Filter中的后续过滤器
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(defaultEncoding);
response.setCharacterEncoding(defaultEncoding);
chain.doFilter(request, response); } /**
* Filter的创建和销毁由web服务器负责,web应用启动时,创建Filter对象,调用init方法,读取web.xml配置
* Filter对象只会创建一次,init方法也执行一次,
*/
@Override
public void init(FilterConfig config) throws ServletException {
String encoding = config.getInitParameter("encoding");  
if(encoding!=null){
defaultEncoding=encoding;
} } }

https://www.cnblogs.com/coderland/p/5902878.html

最新文章

  1. python学习之路 第三天
  2. 十六天 css汇总、js汇总、dom汇总
  3. 解决Windows下网络原因Composer安装失败问题
  4. linux密码的更改
  5. zTree树的模糊搜索
  6. java中的断言
  7. explicit用法
  8. getline与get函数的区别
  9. JAVA关键字Volatile的特性
  10. Java HttpClient伪造请求之简易封装满足HTTP以及HTTPS请求
  11. Android学习之Animation(三)
  12. 028_rync和inotify实现实时备份
  13. Ftp服务端安装-Linux环境
  14. tomcat7和jetty启动的pom.xml配置
  15. Internationalization composition diagram
  16. SignalR 循序渐进(四) Hub的生命周期以及IoC
  17. 用python验证蒙提霍尔问题
  18. MySQL性能优化总结(转)
  19. vue 图片压缩 基于cli3 配置
  20. phpcms黄页,不能选择行业。解决办法

热门文章

  1. 条款50:使用自定义的new以及delete的时机会
  2. UVA - 11214 Guarding the Chessboard (可重复覆盖,DLX+IDA*)
  3. HDU2065&quot;红色病毒&quot;问题【指数型母函数】
  4. 部署你的分布式调用链跟踪框架skywalking
  5. loj 6085.「美团 CodeM 资格赛」优惠券
  6. Android手机里的垃圾文件和文件夹清理
  7. 【转载,实测好用】gitlab结合sourcetree使用
  8. bzoj 3527 [Zjoi2014]力——FFT
  9. bzoj 1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂
  10. xftp连接不上阿里云服务器