JavaWeb17(过滤器监听器)

news/2024/11/26 1:23:02/

目录

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

1.1过滤器介绍.

1.2过滤器使用步骤.

1.2.1创建过滤器.

1.2.2映射配置.

1.3案例1-编码设置.

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

1.4过滤链-略带.

2.监听器-Listener.

2.1监听器介绍.

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

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


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的代码。



http://www.ppmy.cn/news/161054.html

相关文章

灵性·挖掘:自我迭代之路

灵性挖掘&#xff1a;自我迭代之路 灵性的起点强者三关破情关破情关一&#xff0c;人都活在自己心情和感受中&#xff0c;没有活在结果中破情关二&#xff0c;强者对做事也不动情&#xff0c;从来没有对某一件事百分百动情&#xff0c;没有感受和心情破情关三&#xff0c;我不是…

T9键盘

/* 重庆第5届ACM题 &#xff1a; T9键盘&#xff1a;在手机上输入字符串&#xff0c;求手指移动的次数 */ #include<stdio.h> main() {char s[501];int b[50],i,k,T,count,n1;scanf("%d", &T); //有T组输入 while(n<T){scanf("%s", s); /…

达人评测 i9 13900k和i9 12900k差距

i9-13900K采用5nm工艺24 核 32 线程&#xff0c;睿频 5.8GHz&#xff0c;基础功耗 125W&#xff0c;最大睿频功耗 253W; 组装电脑选i9 13900K还是i9 12900k怎么搭配更合适这些点很重要 http://www.adiannao.cn/du i9-12900K 处理器默频 3.2GHz&#xff0c;最大睿频 5.2GHz&…

r9 7845hx和i9 13900hx选哪个 锐龙r97845hx和酷睿i913900hx对比

i9 13900Hx采用10nm制作工艺最高睿频5.4GHz二十四核心三十二线程三级缓存36MB 热设计功耗(TDP) 157W 选i9 13900hx和r9 7845hx这些点很重要看过你就懂了 http://www.adiannao.cn/dy 锐龙9 7845HX采用Zen4架构&#xff0c;十二核心二十四线程&#xff0c;基础频率3.0GHz&#…

达人评测 i5 13600kf和i7 13700kf选哪个好

i5-13600KF采用10工艺 14 核 20 线程&#xff0c;睿频 5.1GHz&#xff0c;三级缓存 24.00 MB基础功耗 125W&#xff0c;最大睿频功耗 181W F组装电脑选 i5 13600kf还是7 13700kf怎么搭配更合适这些点很重要 http://www.adiannao.cn/du i7-13700KF采用10 nm工艺 16 核 24 线程&…

bay trail android 平板,英特尔再推9款平板专用BayTrail-T处理器

英特尔专为平板电脑所研发的BayTrail-T高效能芯片&#xff0c;能够为平板电脑产品提供超长电池续航和卓越的性能表现&#xff0c;并且支持Windows 和Android软件。大部分的10英寸以及更小尺寸的Windows平板电脑产品都采用BayTrail-T芯片&#xff0c;而选用BayTrail-T芯片的Andr…

T9,幸福是人的最高追求

描述 写出一个程序&#xff0c;接受一个十六进制的数&#xff0c;输出该数值的十进制表示。 数据范围&#xff1a;保证结果在 1≤n≤231−1 1≤n≤231−1 输入描述&#xff1a; 输入一个十六进制的数值字符串。 输出描述&#xff1a; 输出该数值的十进制字符串。不同组的…

e7 88系列服务器,英特尔至强E7处理器性能多项测试比拼

自英特尔2010年发布至强7500处理器家族以来&#xff0c;针对企业关键任务领域使得X86处理器在挑战RISC霸主地位上迈出坚实一步。今年4月6日&#xff0c;英特尔继续发力关键业务应用&#xff0c;推出了32纳米工艺制程、代号Westmere-EX的英特尔至强E7处理器家族。 英特尔至强E7处…