第七章 过滤器

JAVAWEB三大组件:Servlet、Filter、Listener

7.1 概念

7.1.1 描述

过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。

它可以让请求得到目标资源,也可以不让请求达到!

过滤器有拦截请求的能力!

过滤器是一个服务器端的组件,它可以拦截客户端的请求和响应信息,并对这些信息进行过滤。

Servlet API中提供了一个Filter接口,如果编写额类实现了这个接口,则称这个类为过滤器。Filter接口源码如下:

7.1.2 生命周期

7.2 应用场景

  • 自动登录
  • 统一设置编码格式
  • 访问权限控制
  • 敏感字符过滤等

7.3 快速上手

package javax.servlet;
import java.io.IOException;
public interface Filter {public void init(FilterConfig filterConfig) throws ServletException;public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException;public void destroy();
}

init():初始化方法,创建之后马上执行,Filter会在服务器启动时创建!

destory():销毁方法,销毁之前执行!在服务器关闭的时候销毁!

doFilter(ServletRequest,ServletResponse,FilterChain):每次过滤的时候都会执行,重点就是执行过滤的方法。

如何上手:

1.写一个类实现Filter接口,这个和Servlet是一样的。

public class AFilter implements Filter {public void destroy() {System.out.println("销毁了");}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("过滤...");//chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {System.out.println("初始化...");}
}

2.在web.xml中进行配置;

<!--在web.xml配置Filter,和Servlet类似/:表示当前web目录,*:表示所有文件;
-->
<filter><filter-name>AFilter</filter-name><filter-class>com.tea.filter.AFilter</filter-class>
</filter>
<filter-mapping><filter-name>AFilter</filter-name><url-pattern>/index.jsp</url-pattern><!--*:过滤所有;/index.jsp:只过滤index.jsp页面。对于其他页面放行。-->
</filter-mapping>

使用注解来创建Filter,这个是大家要掌握的知识点。

@WebFilter("/index.jsp")
public class TestFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {}public void init(FilterConfig config) throws ServletException {}
}

常用配置项
urlPatterns
配置要拦截的资源

  1. 以指定资源匹配。例如"/index.jsp"
  2. 以目录匹配。例如"/servlet/*",这样就可以针对目录进行过滤。
  3. 以后缀名匹配,例如"*.jsp"
  4. 通配符,拦截所有web资源。"/*"

7.4 多个Filter的执行顺序

在我们的请求到达Servle之间是可以经过多个Filter的,一般来说,建议Filter之间不要有关联,各自处理各自的逻辑即可。这样,我们也无需关心执行顺序问题。
如果一定要确保执行顺序,就要对配置进行修改了,执行顺序如下

在web.xml中,filter执行顺序跟<filter-mapping>的顺序有关,先声明的先执行
使用注解配置的话,filter的执行顺序跟名称的字母顺序有关,例如AFilter会比BFilter先执行
如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter

总结:

1.了解Filter的概念,作用

2.Servlet和Filter的区别(相同点和不同点)

3.了解如何使用web.xml来创建Filter,不用掌握

4.掌握使用WebFilter注解的方式来创建Filter

5.掌握过滤拦截资源的4种方式中:/* /*.jsp /xxx.jsp即可,使用能够创建案例即可。

7.5 案例展示

7.5.1 字符集编码过滤器

@WebFilter("/*")
public class EncodingFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}
}

7.5.2 登录过滤器

URI和URL:

我们目前只需要根据/后的路径来判断即可,不用关注于WEB服务器的路径,所以目前只用URI即可。

package com.aaa.filter;import com.aaa.entity.User;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URL;/*** Created by 张晨光 on 2020/4/24 16:04* 过滤所有/**/
@WebFilter("/*")
public class LoginFilter implements Filter {public void destroy() {}//最简单的登录过滤的思路;//复习:过滤器里面参数:ServletRequest//HttpServletRequest:继承自ServletRequest//利用两个增加的方法:getRequestURI()  getRequestURL()public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//1.将ServletRequest转型为HttpServletRequest;HttpServletRequest request= (HttpServletRequest) req;//HttpServletResponse response= (HttpServletResponse) resp;//2.获取地址栏的资源路径;String uri = request.getRequestURI();
//        StringBuffer url = request.getRequestURL();
//
//        System.out.println(uri);
//        System.out.println("url:"+url);//3.判断一下资源路径是否是要登录的路径;//如果/后是login.jsp或者是loginServlet都可以放行;if(uri.contains("login.jsp")||uri.contains("loginServlet")){//放行,就去下一个过滤器;chain.doFilter(req,resp);}else{User user = (User) request.getSession().getAttribute("user");//一定要和loginServlet里面设置值的时候一致;//上面的代码不转换也可以Object user=...if(user!=null){  //就是已经登录了,继续放行;chain.doFilter(req,resp);}else{//1.大家如果需要用resp作一下重定向,则需要在上面加代码;// response.sendRedirect("login.jsp");//2.如果不想写1种方法的实现,则可以使用request.getRequestDispatcher("/login.jsp").forward(req,resp);}}}public void init(FilterConfig config) throws ServletException {}}

JAVAWEB技术之七过滤器相关推荐

  1. 2019尚硅谷大数据Javaweb篇三 Ajax、JSTL、会话技术、过滤器、监听器、xml、json

    2019尚硅谷大数据 Javaweb篇三Ajax.JSTL.会话技术.过滤器.监听器 tags: 大数据 2019尚学堂 categories: Ajax异步请求 JSTL中的if和forEach 会 ...

  2. 【JavaWeb】JavaWeb与JavaWeb技术栈

    JavaWeb与JavaWeb技术栈 1.JavaWeb概述 1.1 Web和JavaWeb的概念 1.2 什么是服务器与客户端 1.2.1 线下的服务器与客户端 1.2.2 线上的服务器与客户端 1 ...

  3. Java界面排号系统_【前端系统】javaweb技术的医院门诊在线预约及排号管理系统的实现...

    描述 本系统着力于实际生活需求,介绍基于javaweb技术的医院预约门诊挂号系统信息化软件工程思想,分析设计与实现该系统的需求.力在解决医院门诊优化,看诊用户挂号等待时间长问题,优化门诊效率,从而提高 ...

  4. 走进JavaWeb技术世界7:Tomcat和其他WEB容器的区别

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  5. JavaWeb技术内幕八:JVM内存管理

    欢迎阅读我的专栏:JavaWeb技术世界 '与其他高级语言不一样,在Java中基本上不会显示地调用分配内存的函数,我们甚至不用关心到底哪些程序指令需要分配内存,哪些不需要分配内存. 我们首先需要从操作 ...

  6. java web论文_(定稿)毕业论文基于JavaWeb技术博客项目的设计论文(完整版)最新版...

    <[毕业论文]基于Java Web技术博客项目的设计论文.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于Java Web技术博客项目的设计论文(完整版)> ...

  7. java编写火车订票系统_毕业设计(论文)-基于JavaWeb技术的火车订票系统.doc

    本科生毕业设计 题 目 基于JavaWeb技术的火车订票系统 姓 名 学 号 院 系 专 业 信息与计算科学 指导教师 20 年 月 教务处制 本科生毕业设计声明 本人郑重声明:所呈交的毕业设计,是本 ...

  8. 走进JavaWeb技术世界16:极简配置的SpringBoot

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  9. javweb音乐网站_基于JavaWeb技术的音乐网站的设计与实现.doc

    基于JavaWeb技术的音乐网站 的设计与实现 本科毕业设计 目录1 1.1 课题研究背景与意义1 1.2 音乐网站的研究现状2 1.3 本论文的结构和主要工作2 第二章 系统环境概述2 2.1 开发 ...

最新文章

  1. 9文一览:近期必读微生物组生信论文
  2. matlab偏导符号怎么打,matlab 如何输入导数
  3. python二次开发攻略-ABAQUS Python二次开发攻略
  4. kafka基本管理操作命令
  5. Spring MVC 中的 controller层的方法的返回值类型
  6. matlab中bwlabel意思,Matlab 里bwlabel 函数的具体含义
  7. linux 多级目录查找,Linux如何在多级目录中查找某个文件
  8. hdoj_1421搬寝室
  9. 力扣(LeetCode)56
  10. 超全面的后端开发C/C++面经整理分享含详细参考答案 包括简历分享
  11. 用计算机关闭无线网络连接,干货分享:打印机无线连接断开了怎么办?
  12. 数据库设计员工管理系统
  13. Oracle minus用法详解及应用实例
  14. Windows10视频文件没有预览图的解决办法
  15. 深度搜索算法查找最短路径
  16. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java自助旅游平台v294n
  17. vivo计算机的隐藏功能介绍,六大vivo隐藏黑科技功能 绝对有你不知道的
  18. Ubuntu 下查看DNS地址
  19. yandex浏览器_15分钟内制作自己的文本编辑器:Yandex的实践
  20. “Memo桌面便笺”总结

热门文章

  1. Linux 串口 gprs at,linux下GPRS模块使用AT命令实现拨接电话,发中英文短信
  2. Mapreduce,mapper任务无输出以及相关问题解决,日志的正确用法
  3. mixamo网站_超全面的素材网站推荐
  4. 无法查找网络工作组计算机,XP系统弹出“无法查看工作组计算机”提示怎么办?...
  5. 第一个linux桌面,Ubuntu 4.10 “Warty Warthog”:回顾第一个Ubuntu Linux桌面
  6. 小学计算机考查方案,宋家塘街道中心学校2020年理化生实验操作和信息技术考试方案...
  7. 华硕计算机用户名默认,华硕路由器后台默认网址是多少
  8. 先来先服务算法代码_一致性哈希算法编写
  9. 管理服务器一般的作用,管理服务器作用
  10. python常用运维模块_python常用模块之一