JavaWeb学习笔记之Filter和Listener

Filter:过滤器

过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤...

过滤器相当于浏览器与 Web 资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求进行修改、判断以及拦截等,也可以对响应进行修改、判断以及拦截等。

执行流程:

客户端发出请求,先经过过滤器, 如果过滤器放行,那么才能到servlet

如果有多个过滤器, 那么他们会按照注册的映射顺序 来 排队。 只要有一个过滤器, 不放行,那么后面排队的过滤器以及咱们的servlet都不会收到请求。

使用方法:

1.定义一个类,实现接口Filter。

2.重写其中的方法(执行拦截的动作)

3.配置拦截路径:使用注解@WebFilter或web.xml

@WebFilter("/*")//访问所有资源之前,都会执行该过滤器
public class FilterDemo1 implements Filter {
       @Override
       public void init(FilterConfig filterConfig) throws ServletException {
            //过滤器初始化的方法,一般用于申请资源
   // init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
       }
            
       @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
   //执行拦截的动作,具体的拦截逻辑写在这里  
   //doFilter:每一次请求被拦截资源时,会执行。执行多次         
   System.out.println("filterDemo1被执行了....");
            
           //放行
           filterChain.doFilter(servletRequest,servletResponse);
            
       }
            
       @Override
       public void destroy() {
            //过滤器销毁的方法,一般用于释放资源
   //destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
       }
}

过滤器配置详解

拦截路径配置:

1. 具体资源路径: /index.jsp   只有访问index.jsp资源时,过滤器才会被执行

2. 拦截目录: /user/*    访问/user下的所有资源时,过滤器都会被执行

3. 后缀名拦截: *.jsp        访问所有后缀名为jsp资源时,过滤器都会被执行

4. 拦截所有资源:/*        访问所有资源时,过滤器都会被执行

Listener:监听器

Servlet 规范中定义的一种特殊的组件,用来监听 Servlet 容器产生的事件并进行相应的处理。

事件监听机制

* 事件    :一件事情

* 事件源 :事件发生的地方

* 监听器 :一个对象

* 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码

ServletContextListener

在 ServletContext 创建和关闭时都会通知 ServletContextListener 监听器。

需要在 web.xml 里面配置监听器。

使用方法:

1.定义一个类,实现ServletContextListener接口。

2.重写方法。

3.进行配置

ServletContextListener:监听ServletContext对象的创建和销毁

* 方法:
  * void contextDestroyed(ServletContextEvent sce) :ServletContext对象被销毁之前会调用该方法
  * void contextInitialized(ServletContextEvent sce) :ServletContext对象创建后会调用该方法

使用Filter的登录拦截的案例

@WebFilter("*.jsp")
public class FilterTest1 implements Filter {
 public void destroy() {
 }

 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
  //判断是否已经登录了,如果没有登录就需要跳转到登录界面,但是如果访问的资源路径本来
  //就是登录页面,那么就不需要拦截了,这里需要进行判断排除

  //记得强制转型
  HttpServletRequest request = (HttpServletRequest)req ;

  //获取session对象,看看对应的属性是否有值
  HttpSession session = request.getSession();
  Object login = session.getAttribute("login");

  //获取url路径,看看里面是否是登录资源相关的
  String requestURI = request.getRequestURI();

  //在过滤掉登录相关时,一定要排除一些js,css文件
  if (login != null || requestURI.contains("/longin.jsp") || requestURI.contains("/css/") ||
    requestURI.contains("/js/") || requestURI.contains("/fonts/") ) {
   chain.doFilter(req, resp);
  } else {
   request.getRequestDispatcher("/longin.jsp").forward(request, resp);
  }
 }

 public void init(FilterConfig config) throws ServletException {

 }

}

总结

到此这篇关于JavaWeb学习笔记之Filter和Listener的文章就介绍到这了,更多相关JavaWeb Filter和Listener内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • javaweb中Filter(过滤器)的常见应用

    一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 package me.gacl.web.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException;

  • JavaWeb监听器Listener实例解析

    首先来介绍一下什么是监听器: 监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听另外一个类的方法调用. 这是使用观察者模式的. 什么是观察者模式: 定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新. 示例: GUI编程中的addXxxxListener都是观察者模式. 比如为按钮点击添加监听事件,为键盘添加监听等等- 观察者模式的三个重要类: 被监听的事件源,也就是我们在使用的对象. 注册的那个监听器,是专门用来监听当前使用的对象的.

  • 详解JavaWeb中的 Listener

    一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色:观察者和被观察者(通常也叫做主题).观察者在主题里面注册自己感兴趣的事件,当这个事件发生时,主题会通过回调接口的方式通知观察者. 举个生活中的例子:订阅报纸.任何一个家庭或个人都可以向报社订阅报纸.这里报社就是"主题",家庭就是"观察者".比如家庭需要订阅明天早晨的报

  • JavaWeb Servlet中Filter过滤器的详解

    JavaWeb Servlet中Filter过滤器的详解 1.简述 Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制.过滤敏感词汇.压缩响应信息).Filter能够对Servlet容器的请求和响应进行检查和修改,其本身不能生成请求request和响应response,只提供过滤作用(Servlet被调用之前检查Request对象修改其相关信息,Servlet被调用后检查Response修改其相关信息),Filter对象常驻服务器. 2.Lifecyc

  • 快速学习JavaWeb中监听器(Listener)的使用方法

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 1.2.监听器案例--监听window窗口的事件监听器 package me.gacl.listener.demo; import java.awt.Frame; imp

  • javaweb设计中filter粗粒度权限控制代码示例

    1 说明 我们给出三个页面:index.jsp.user.jsp.admin.jsp. index.jsp:谁都可以访问,没有限制: user.jsp:只有登录用户才能访问: admin.jsp:只有管理员才能访问. 2 分析 设计User类:username.password.grade,其中grade表示用户等级,1表示普通用户,2表示管理员用户. 当用户登录成功后,把user保存到session中. 创建LoginFilter,它有两种过滤方式: 如果访问的是user.jsp,查看sess

  • JavaWeb之Filter过滤器详解

    原本计划这一篇来总结JSP,由于JSP的内容比较多,又想着晚上跑跑步减减肥,所以今天先介绍Filter以及它的使用举例,这样的话还有些时间可以锻炼锻炼.言归正传,过滤器从字面理解她的话有拦网.过滤的功能,可以算是JavaWeb的拦精灵. 一.由来 客户端发起请求,那服务器不能什么请求都做出响应,做拦截处理,不仅能减轻服务器的压力,还能保护数据的安全,同样服务端做出响应给客户端时有时也需要进行过滤,比如我们常见的图片添加水印.为了处理这些问题,于是过滤器出现了.有时不仅仅对请求与响应进行一层的过滤

  • 深入学习JavaWeb中监听器(Listener)的使用方法

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换

  • JavaWeb学习笔记之Filter和Listener

    Filter:过滤器 过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能.一般用于完成通用的操作.如:登录验证.统一编码处理.敏感字符过滤... 过滤器相当于浏览器与 Web 资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求进行修改.判断以及拦截等,也可以对响应进行修改.判断以及拦截等. 执行流程: 客户端发出请求,先经过过滤器, 如果过滤器放行,那么才能到servlet 如果有多个过滤器, 那么他们会按照注册的映射顺序 来 排队. 只要有一个过滤器, 不放行

  • JavaWeb学习笔记分享(必看篇)

    自定义列表 <dl></dl>:表示列表的范围 **在里面 <dt></dt>:上层内容 **在里面 <dd></dd>:下层内容 有序列表 <ol></ol>:有序列表的范围 --属性 type:设置排序方式,1(默认),a,i.. **在ol标签里面 <li>具体内容</li> 无序列表 <ul></ul>:无序列表的范围 --属性 type:circle(空

  • SpringBoot中使用Servlet三大组件的方法(Servlet、Filter、Listener)

    本篇主要讲解SpringBoot当中使用Servlet三大组件,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧! 三大组件作用 1.Servlet Servlet是用来处理客户端请求的动态资源,也就是当我们在浏览器中键入一个地址回车跳转后,请求就会被发送到对应的Servlet上进行处理. Servlet的任务有: 1.接收请求数据:我们都知道客户端请求会被封装成HttpServletRequest对象,里面包含了请求头.参数等各种信息. 2.处理请求:通常我

  • angularjs学习笔记之简单介绍

    一.angularjs简介 AngularJS 是一个为动态WEB应用设计的结构框架.它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚.简洁地构建你的应用组件.它的创新点在于,利用 数据绑定 和 依赖注入,它使你不用再写大量的代码了.这些全都是通过浏览器端的Javascript实现,这也使得它能够完美地和任何服务器端技术结合. 说了这么多,估计你啥都没有理解...对吗?别着急,我来说说他的几个特点吧:模块化,数据双向绑定,依赖注入,指令.下面我们就跟着这几个特点进行学习.

  • JavaScript高级程序设计(第三版)学习笔记1~5章

    第2章,在html中使用JavaScript Html引入外部js脚本 <script type="text/javascript" src="test.js">两个</script>之间不应放脚本,因为并不会被执行</script> <script>标签有一个defer属性可以延迟脚本执行,但是并不保证会按脚本排列顺序执行 建议:将脚本引入放在<body>标签的所有内容之后,而不放在<head>

  • Vue学习笔记进阶篇之函数化组件解析

    这两天学习了Vue.js 感觉函数化组件这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记 介绍 之前创建的锚点标题组件是比较简单,没有管理或者监听任何传递给他的状态,也没有生命周期方法.它只是一个接收参数的函数. 在这个例子中,我们标记组件为 functional, 这意味它是无状态(没有 data),无实例(没有 this 上下文). 一个 函数化组件 就像这样: Vue.component('my-component', { functional: true, // 为了弥补缺少的

  • JavaScript学习笔记之数组去重

    推荐阅读:JavaScript学习笔记之数组的增.删.改.查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 话说面试常会碰到面试官会问JavaScript实现数组去重的问题,最近刚好在学习有关于JavaScript数组相关的知识,趁此机会整理了一些有关于JavaScript数组去重的方法. 下面这些数组去重的方法是自己收集和整理的,如有不对希望指正文中不对之处. 双重循环去重 这个方法使用了两个for循环做遍历.整个思路是: 构建一个空数组用来存放去重后

  • ES6学习笔记之Set和Map数据结构详解

    本文实例讲述了ES6学习笔记之Set和Map数据结构.分享给大家供大家参考,具体如下: 一.Set ES6提供了新的数据结构Set.类似于数组,只不过其成员值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. 1 . Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. var s = new Set(); var set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4] var items =

  • Spring学习笔记3之消息队列(rabbitmq)发送邮件功能

    rabbitmq简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBM WEBSPHERE MQ. 本节的内容是用户注册时,将邮

  • 《JavaScript高级编程》学习笔记之object和array引用类型

    本文给大家分享我的javascript高级编程学习笔记之object和array引用类型,涉及到javascript引用类型相关知识,大家一起看看把. 1. Object类型 大多数引用类型值都是Object类型的实例:而且Object也是ECMAScript中使用最多的一个类型. 创建Object实例有如下两种方式: new操作符后跟Object构造函数: var person=new Object( ); person.name="webb"; person.age=25; 对象字

随机推荐