Filter过滤器

  filter是对客户端访问资源的过滤,符合条件的放行,不符合的不放行,并且可以对目标资源访问前后进行逻辑处理。

设置步骤

  1. 创建类实现Filter接口
  2. 在 doFilter 方法中编写放行和拦截的代码
  3. 在 web.xml 文件中进行配置
  4. <filter>
    <display-name>UserFilter</display-name>
    <filter-name>UserFilter</filter-name>
    <filter-class>com.zhiyou100.filter.UserFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>UserFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <servlet-name>MyServlet01</servlet-name>
    </filter-mapping>
  5. 对于<url-pattener> /* </url-pattener>  将路径配置为  /*  就是拦截所有的请求
  6. 也可以配置<servlet-name> MyServlet  </servlet-name> 表示指拦截指定的servlet
  7. url-pattener  和   servlet-name  可以同时配置多个
  8. <filter-mapping>
    <filter-name>UserFilter</filter-name>
    <servlet-name>MyServlet01</servlet-name>
    <servlet-name>MyServlet02</servlet-name>
    <url-pattern>*.do</url-pattern> <url-pattern>*.action</url-pattern> </filter-mapping>

url­pattern

  1. 完全匹配  /servlet ,也可以使用<servlet-name> servlet </servlet-name>
  2. 目录匹配 
    • /aaa/bbb/*  使用情况较多
    • /user/*     访问前台的资源进入此过滤器
    • /admin/*  访问后台的资源执行此过滤器
  3. 扩展名匹配  *.adc  *.jsp    *.action
  4. /* 拦截所有,包括静态资源和jsp页面
  5. 目录匹配和扩展名匹配不能同时使用,会造成服务器无法正常启动
  6. 如果有多个filter ,按照web.xml 中 <filter-mapping> 标签前后顺序进行过滤,并不依照<filter>的前后顺序

dispatcher:访问的方式(了解)

  1. REQUEST :默认值,代表直接访问某个资源执行的filter
  2. FORWARD: 转发时才执行filter
  3. INCLUDE : 包含资源时执行 filter
  4. ERROR :发生错误时进行跳是执行filter

生命周期

  • 服务器启动到时候  init 方法调用,  filter  被创建
  • 服务器关闭的时候destory方法调用,filter被销毁
  • 当有请求过来并符合拦截规则的时候  dofilter 方法执行

应用

  • 权限限制

    • 实例:用户不登陆不允许访问浏览器其他内容
    •  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
      throws ServletException, IOException {
      HttpServletRequest req = (HttpServletRequest) request;
      HttpServletResponse res = (HttpServletResponse) response;
      User u = (User) req.getSession().getAttribute("user");
      String path = req.getServletPath();
      if (path.equals("/index.jsp") || path.equals("/login")) {
      chain.doFilter(request, response);
      return;
      }
      if (u == null) {
      res.sendRedirect(req.getContextPath() + "/index.jsp");
      return;
      }
      chain.doFilter(request, response);
      }
      }
  • 全局编码

    • 设置  request,response  的编码格式
    • tomcat内置编码过滤器设置

    • 自动登录过滤器

Listener监听器

  监听器就是监听某个对象的的状态变化的组件,其主要是监听三个域对象(ServletContext 域,HttpSession域,ServletRequest域)的创建和销毁以及域对象内的属性的改变,一共有6+2个

ServletContextListener

  监听ServletContext域的创建和销毁

  • 设置步骤

    • 写一个监听器类去实现监听器接口
    • 覆盖接口方法
    • 在web.xml中进行配置
  • 应用范围

    • 加载配置文件,spring中加载配置文件使用

HttpSessionListener

  监听session的创建和销毁

  • 应用范围

    • 统计网站的访问数量

对象放在session中一共有四种状态

  • 1.  绑定状态:就一个对象被放到session域中
  • 2.  解绑状态:就是这个对象从session域中移除了
  • 3.  钝化状态:是将session内存中的对象持久化(序列化)到磁盘
  • 4.  活化状态:就是将磁盘上的对象再次恢复到session内存中

session中的绑定的对象相关的监听器(对象感知监听器)

  • 绑定与解绑的监听器HttpSessionBindingListener

    • 此接口是需要对象去实现,并且不需要去注册
  • 钝化与活化的监听器HttpSessionActivationListener

    • 实质上就是session中对象的序列化和反序列化,可用于服务器的优化,所以需要将放在session 中的对象实现此接口,如果需要对象存在磁盘中,需要当前类实现Serializable接口
    • 服务器的优化处理

      • 通过一个xml文件进行配置session中的对象多久被钝化
        在META­INF中创建一个名字为context.xml文件 将下面代码拷贝进文件

注解

  注解Annotation是一种属于代码级别的说明,是一种具有功能的说明.是从jdk1.5版 本以后添加的新特性,其格式为@注解名称.对比注释而言,注释是写给人看的,是没有功能的文字. 注解是写个JVM看的,具有功能的代码

注解的作用

在目前的主流应用在替代配置文件

  • 对比servlet2.5,Servlet3.0新加了很多的新特性,其中就有提供了注解的支持,也就是不需要使用 web.xml可以进行路径的配置
  • 优点:开发效率高
  • 确定:耦合性太强,不便于维护

常见注解

  @Override:告知编译器此方法是覆盖父类的

  @Deprecated:标注过时

  @SuppressWarnings:压制警告

自定义注解(了解)

  • 使用关键字@interface表示注解
  • 注解中定义的属性格式为修饰符 数据类型 属性名称() default 具体的值;
    • 修饰符只能是public abstract,和接口相同会默认添加
    • 数据类型可以是:基本类型,String,枚举类型,注解类型,Class类型,以上类型的一维数组类型
  • default是默认值可以不写,如果不写在使用注解的时候就必须进行设置,如果有默认值就可以 不用进行设置
  • 注意:如果属性的名字是value,并且注解的属性设置的时候只需设置这一个 那么在使用注解时 可以省略value

使用注解(掌握)

  在类,方法,字段 上面是@注解名称(属性名=属性值,属性名=属性值)  

元注解

  可以认为是注解的注解

@Retention  注解的可见范围
  • SOURCE: 注解在源码级别可见(默认是source级别)
  • CLASS:注解在字节码文件级别和源码级别可见
  • RUNTIME:注解在整个运行阶段以及之前的两个级别都可见
  • 注意:要想解析使用了注解的类 , 那么该注解的Retention必须设置成Runtime
@Target  注解修饰的范围:类上使用,方法上使用,字段上使用
  • FIELD:字段上可用此注解 METHOD:方法上可以用此注解
  • TYPE:类/接口上可以使用此注解
  • PARAMETER:参数上可以使用
  • CONSTRUCTOR:构造函数上可以使用
  • LOCAL_VARIABLE:局部变量上可以使用
 
通过反射的方式进行获取(了解)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

(Filter + Listener )Day18的更多相关文章

  1. 过滤器模式(Filter Pattern)

    过滤器模式 一.什么是过滤器模式   过滤器模式(Filter Pattern),这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种类型的设计模式属于结构型 ...

  2. sqlserver 筛选索引(filter index)在使用时需要注意的事项

    sqlserver 的筛选索引(filter index)与常规的非筛选索引,加了一定的filter条件,可以按照某些条件对表中的字段进行索引,但是filter 索引在查询 使用上,并不等同于常规的索 ...

  3. 执行监听器( Execution listener)

    相关类: org.activiti.engine.delegate.ExecutionListener org.activiti.engine.delegate.TaskListener org.ac ...

  4. Spring Security(2):过滤器链(filter chain)的介绍

    上一节中,主要讲了Spring Security认证和授权的核心组件及核心方法.但是,什么时候调用这些方法呢?答案就是Filter和AOP.Spring Security在我们进行用户认证以及授予权限 ...

  5. 任务侦听器(Task listener)

    任务侦听器:用于在任务相关的事件发生时执行一段java逻辑或者是表达式 <userTask id="myTask" name="My Task" > ...

  6. Java基础(二十八)Java IO(5)RandomAccessFile类与过滤器流(Filter Stream)

    一.RandomAccessFile类 使用RandomAccessFile类可以读取任意位置数据的文件. 1.构造方法 RandomAccessFile(String name, String mo ...

  7. Python学习笔记系列——高阶函数(filter/sorted)

    一.filter #filter()函数用于过滤序列.和map()类似,也接收一个函数和一个序列,把函数依次作用于每个元素,根据返回值是True还是False决定是否保留该元素. #filter()函 ...

  8. Cannot call sendError() after the response has been committed(filter问题)

    就是因为执行了filter的dofilter方法中 chain.doFilter(request,response)了 执行了两遍 if(){}else{chain.doFilter(request, ...

  9. Spring Boot 知识笔记(Filter过滤器)

    Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 htm ...

随机推荐

  1. OSCP Learning Notes - Post Exploitation(1)

    Linux Post Exploitation Target Sever: Kioptrix Level 1 1. Search the payloads types. msfvenom -l pay ...

  2. P1433 吃奶酪(洛谷)状压dp解法

    嗯?这题竟然是个绿题. 这个题真的不(很)难,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的状压dp就可以了. 是的状压dp. 这个题的数据加 ...

  3. IDM的“免费版”NDM免费的下载工具

    软件截图 软件介绍 免费小巧的多线程下载工具,支持断点续传,支持浏览器扩展,嗅探下载音视频文件. 和IDM差不多,只不过是免费的 下载软件 Win 我提供的UCloud-OSS 官网下载 Mac 我提 ...

  4. 拿下Netty这座城,从现在开始!

    你好,我是彤哥,技术公号主"彤哥读源码"的运营者. 其实,我刚学习Netty的时候,也是很迷茫的,直到有一天,一个同事收到了阿里的offer,他要去阿里做中台了,临走前他偷偷地告诉 ...

  5. Git的自定义和特殊文件配置

    目录 备注: 知识点 自定义Git 忽略特殊文件 .gitignore忽略文件 忽略文件的原则是: 忽略文件示例 .gitignore文件查看和强制添加 备注: 本文参考于廖雪峰老师的博客Git教程. ...

  6. vue如何使用excel导出后台数据

    let params = { // 请求参数 要下载Excel的id 'id':this.excelId }; //导入的接口名 api_excel_exportExcel().then(res =& ...

  7. 面试题五十七:和为s的数字

    题目一:和为s的数字,在一个递增数组中寻找两个数字的和等于s 方法:双指针法,一个在头一个在尾:如果两个指针指向的和小于,那么be++:大于end--: 题目二:打印所有和为s的连续正数序列 方法:双 ...

  8. python(xlsxwriter模块使用)

    XlsxWriter简介XlsxWriter是一个Python模块,可用于在Excel 2007+ XLSX文件中写入多个工作表的文本,数字,公式和超链接.它支持格式化等功能.可到官网了解更多详情,官 ...

  9. MyBatis--动态插入多条数据

    MySQL支持的一种插入多行数据的INSERT语句写法是 INSERT INTO 表名 (字段名1,字段名2,字段名3) VALUES (值1,值2,值3,...),(值1,值2,值3,...)... ...

  10. IO流——字节流、字符流

    在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 流的分类 ①   流按其流向分为“输入流”和“输出 ...