【项目小知识】过滤器filter实现

我是灼灼,一只初学Java的大一金渐层。
向往余秀华和狄兰·托马斯的疯狂,时常沉溺于将情感以诗相寄;追逐过王尔德、王小波的文字,后陷于毛姆和斯蒂芬·金不可自拔;热爱文学的浪潮,白日梦到底却总在现实里清醒;艳羡平静又极度渴盼奔跑的力量。
欢迎与我交流鸭· QQ:1517526827;
个人博客:https://blog.csdn.net/weixin_52777510?spm=1001.2101.3001.5343

过滤器filter的实现方法

参考自学长的博客:
一:https://blog.csdn.net/weixin_45791445/article/details/106091088
二:https://xiaokangxiaobai.blog.csdn.net/article/details/106103741

  • 创建过滤器filter
    参考第一个博客中的方法来自行创建;
    遇到的一些些问题:
  1. 第一步中创建新的filter时,右击没有这个选项怎么办?
    Q:IDEA创建web工程后,在包里不能直接生成Servlet、Filter、Listener?
    A:解决方法来自博客(亲测有效!):

https://blog.csdn.net/qq_32360995/article/details/87936185

  1. 第二步中向doFilter方法中添加代码时,报错?
    解决:- 把没有导入的包导入
    - 仔细观察所给图片中的代码进行修改,很可能是因为方法参数与方法中变量定义重合导致部分变量未被定义所致;
    - Filter类要实现filter接口,但是不能只写作filter噢~
    还是要写作implements javax.servlet.filter类;
  2. 不要忘记给方法抛出异常。
  3. 在web.xml中配置filter不要只记得复制粘贴,要注意把filter标签放在servlet标签之前。
    程序会自动先运行Filter然后运行Servlet。
  • 为什么使用过滤器?

使用过滤器(Filter)以实现允许前端通过后端访问项目接口。

以下内容来自第一个博客!

  • 实现原理:Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。
    其中,doFilter()方法类似于Servlet接口的service()方法。当客户端请求目标资源的时候,容器就会调用与这个目标资源相关联的过滤器的doFilter()方法。

  • 参数 request, response 为web 容器或 Filter 链的上一个 Filter 传递过来的请求和相应对象;参数 chain 代表当前 Filter 链的对象。

  • 对于FilterChain接口,代表当前Filter链的对象。由容器实现,容器将其实例作为参数传入过滤器对象的doFilter()方法中。

  • 过滤器对象使用FilterChain对象调用过滤器链中的下一个过滤器,或者目标Servlet 程序去处理,也可以直接向客户端返回响应信息,或者利用RequestDispatcher的forward()和include()方法,以及HttpServletResponse的sendRedirect()方法将请求转向到其他资源。

    这个方法的请求和响应参数的类型是 ServletRequest和ServletResponse,也就是说,过滤器的使用并不依赖于具体的协议

  • Filer的作用很多,可以实现字符集的统一设置以及统一控制简单WebCache,它带来的好处不仅仅是减少代码量,它的出现避免了每个页面重复的编写相同的代码,减少了工作量,而且给维护带来了极大的便利。

    扫描二维码关注公众号,回复: 12683851 查看本文章

过滤器配置的两个注意:
一是指明过滤器类所在的包路径。二是处定义过滤器作用的对象。一般有以下规则:

1:作用与所有web资源:<url—pattern>/*</url-pattern>。则客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。

2:作用于某一文件夹下所有文件:<url—pattern>/dir/*</url-pattern>

3:作用于某一种类型的文件:<url—pattern>*.扩展名</url-pattern>。比如<url—pattern>*.jsp</url-pattern>过滤所有对jsp文件的访问请求。

4:作用于某一文件夹下某一类型文件:<url—pattern>/dir/*.扩展名</url-pattern>

如果一个过滤器需要过滤多种文件,则可以配置多个<filter-mapping>,一个mapping定义一个url-pattern来定义过滤规则。

关于filter的详细介绍和使用参考第二个博客噢!
在这里插入图片描述
如果对你有帮助的话不要忘记一键三连噢~
谢谢鸭~

初次编写于2021/2/19日;

猜你喜欢

转载自blog.csdn.net/weixin_52777510/article/details/113872759
今日推荐