JavaWeb17(过滤器&监听器)

简介: JavaWeb17(过滤器&监听器)

1.过滤器/拦截器-Filter.

1.1过滤器介绍.

  • 过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。
  • S2阶段使用过滤器主要进行页面编码设置和登录状态验证。

1.2过滤器使用步骤.

1.2.1创建过滤器.

  • 创建过滤器包filter,创建普通java类并实现Filter接口;
  • 重写destroy(销毁)doFilter(执行/处理)init(初始化),作用如下:
  1. init方法,初始化Filter,Filter在服务器启动阶段被实例化。并且调用init方法,init方法只执行一次,因为Filter只被实例化一次。
  2. destory方法,销毁Filter,释放内存,在web服务正常停止时调用此方法。或者项目重新部署,或者服务器重新启动的时候,会销毁所有的Filter对象,销毁之前会先调用Filter对象的destroy方法,完成销毁前的准备工作,也是只执行一次。
  3. doFilter方法里面编写过滤器要执行的逻辑代码(重点)。
  • 如下所示:


1.2.2映射配置.

  • web.xml方式:

  • 注解方式:
  1. @WebFilter("/*");
  2. @WebFilter("/home/*");
  3. @WebFilter("*.do");

1.3案例1-编码设置.

  • 代码如下:


1.4案例2-登陆状态验证.

  • 效果:没有登陆则不能访问项目的某些页面,比如:购物车页面、订单页面、所有servlet文件等。
  • 哪些页面不需要被登陆就可以访问?登陆前后端jsp页面以及对应的servlet文件;
  • 实现代码:

  • 注,getWrite()方法如果执行两次及以上程序会报500错,当过滤资源过多的时候,过滤器里面的代码会被执行多次,所以不建议在过滤器里面调用 getWrite()方法获取 PrintWriter对象。因此在过滤器里面跳转到登陆页面通过:response.sendRedirect(request.getContextPath()+"/admin/login.jsp");
  • 思考,如果在同一个过滤器里面实现前端的登陆状态验证,该如何处理?

1.4过滤链-略带.

  • 在一个Web应用程序中,可以部署多个过滤器进行拦截,这些过滤器组成了一个过滤器链。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递。具体执行流程如下:


2.监听器-Listener.

2.1监听器介绍.

  • 一个实现特定接口的普通java程序,而这个java程序专门用于监听另一个java对象的方法调用或属性的改变,当被监听对象发生上述事件后,监听的某个方法将立即被执行。常用于监听Web应用中某些对象的创建、销毁、增加、修改、删除等动作的发生,然后作出相应的响应处理。当监听范围的对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计网站在线人数、系统加载时进行信息初始化、统计网站的访问量等等。
  • 监听器分类:按照监听的对象不同可分为HttpRequest域,HttpSession域和ServletContext域。如:
  1. ServletContextListener监听器,此监听器主要用来监听ServletContextListener的创建与销毁即服务器的创建与销毁;
  2. HttpSessioinListener监听器,此监听器用来监听Session的创建与销毁;
  3. HttpSessionAttributeListener 是SessionAttribute的监听,当在会话对象中加入属性、移除属性或替换属性时,就会调用HttpSessionAttributeListener监听器。
  4. ServletRequestListener监听器,此监听器用来监听每一次请求调用请求创建时的方法,当请求结束时,调用销毁的方法。

2.2案例演示1-统计在线人数.

  • 思路分析:
  • 每当有一个访问连接到服务器时,服务器就会创建一个 session来管理会话;
  • 那么就可以通过统计 session的数量来获得当前在线人数。所以这里用到的监听器是 HttpSessionListener
  • 创建 Java类 OnLineCountListener 实现 HttpSessionListner接口,并添加监听器注解:@WebListener。代码如下:

  • jsp页面:<h1>在线人数:${sessionCount} </h1>
  • 注,
  1. 因为同一类型浏览器不管打开多少个会话,都是共享一个sessoin(无痕模式和非无痕模式不共享)。所以要打开不同类型浏览器访问项目(google/IE/Edge)进行测试。
  2. 关闭浏览器人数不会减少,必须以注销 session的方式退出才能实现人数减少。
  • 注销功能:

退出按钮:

<a href="loginOut.jsp">

   <h2>退出</h2>

</a>

loginOut.jsp:

<%session.invalidate();%>

<h3>您已退出本系统</h3>


2.3案例演示2-统计历史在线人数.

  • 该功能的实现思路:在用户退出的时候不减少人数。其实就是注释掉统计在线人数案例里面销毁方法-sessionDestroyed的代码。
相关文章
|
7月前
|
Java
Jsp之五 过滤器与监听器
Jsp之五 过滤器与监听器
31 0
|
7月前
|
前端开发 Java 数据安全/隐私保护
SpringBoot2.0(过滤器,监听器,拦截器)
SpringBoot2.0(过滤器,监听器,拦截器)
|
9月前
|
存储 Java 数据安全/隐私保护
servlet过滤器与监听器
前言 Servlet 过滤器和监听器是 Java Web 应用程序中常见的两种组件,它们提供了各种扩展 Web 应用程序功能的方式。 总的来说,过滤器和监听器都可以通过 Java Web 应用程序的配置文件或注解进行使用,方便灵活,并可以很好地实现框架与业务逻辑的分离,提高代码可维护性和扩展性。 过滤器(Filter) 1. 参数验证和转换:可以拦截用户提交的数据,并对数据格式进行验证、修正或转换。 2. 访问控制和认证:可以拦截请求并检查用户是否有访问特定资源的权限。 3. 日志记录:可以拦截请求并输出相应的日志信息,用于系统运行时的监测与故障排除。 4. 资源压缩和解密: 可以拦截响应并对
49 0
|
10月前
|
XML JSON 前端开发
javaweb(四)——过滤器与监听器(下)
javaweb(四)——过滤器与监听器
|
10月前
|
传感器 Java
javaweb(四)——过滤器与监听器(上)
javaweb(四)——过滤器与监听器
|
10月前
|
算法 Java
javaweb(四)——过滤器与监听器(中)
javaweb(四)——过滤器与监听器
|
9月前
|
设计模式 监控 前端开发
JavaWeb中的Filter过滤器和Listener监听器
JavaWeb中的Filter过滤器和Listener监听器
|
10月前
|
前端开发 Java
springboot中的过滤器和监听器
springboot中的过滤器和监听器
|
12月前
|
前端开发 Java 应用服务中间件
【SpringBoot】过滤器,监听器,拦截器介绍
【SpringBoot】过滤器,监听器,拦截器介绍
147 0