高手速成 | 过滤器、监听器的创建与配置

news2024/9/29 9:31:18

 

 本节讲解过滤器、监听器的创建以及监听事件配置示例。

01、过滤器的创建与配置

【例1】创建过滤器及配置过滤规则。

(1) 在Eclipse中新建一个Web项目,取名为Chapt_09。在src目录下,新建一个名为com.test.filter的包。选中该包并按Ctrl+N组合键,在弹出的菜单中选择Web→Filter。选择创建过滤器,如图1所示,单击Next按钮。

■ 图1 选择创建过滤器

(2) 为创建的过滤器命名,如图2所示。在弹出的Create Filter对话框的Class name的文本框内输入TestFilter后,单击Next按钮。

■ 图2 为创建的过滤器命名

(3) 为过滤器添加过滤规则,如图3所示。在Filter mapping设置部分,单击Add按钮,在弹出的对话框中选中URL pattern单选框,并在Pattern下的文本框中填写/TestServlet,单击OK按钮,返回到Create Filter选项卡中并单击Finish按钮,即完成了对过滤器的设置。

 (4) 根据以上配置,TestFilter.java源文件自动生成的代码如下:

package com. test. filter;
import java. io. IOException;
import javax. servlet. Filter;
import javax. servlet. FilterChain;
import javax. servlet. FilterConfig;
import javax. servlet. ServletException;
import javax. servlet. ServletRequest;
import javax. servlet. ServletResponse;
import javax. servlet. annotation. WebFilter;
@WebFilter( {" /TestServlet" J)
public class TestFilter implements Filter {
public TestFilter() {
]
public void destroy() {
}
public void doFilter (ServletRequest request,
ServletResponse response, FilterChain chain) throws
chain. doFilter (request, response);
public void init(FilterConfig fConfig) throws ServletExcept{
             }
}

以上操作步骤是对一个过滤器的创建和过滤规则的配置,即TestFilter过滤器对访问路径为/TestServlet的访问资源进行过滤。

(5) 在TestFilter类中的各方法中填写代码如下:

public TestFilter() {
System.out.print 1n("过滤器构造器两数运行");
public void destroy() {
System.out.print 1n("过滤器消亡两数运行");

public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain)
throws I0Exception, ServletException {
System,out. printin(“对请求进行过滤处理”);
chain, doFilter (request, response);
System.out. println(”执行 chain. dorilter 方法后面的代码”);
}
public void init( FilterConf ig fConf ig ) throws ServletExcept ion {
System. out. print 1n("过滤器初始化两数运行”);

 (6) 在src目录下新建一个名为com.test.servlet的包,在该包下新建一个名为TestServlet的Servlet,匹配URL为/TestServlet,然后编写代码如下:

@WebServlet (" /TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public TestServlet () {
System. out.print1n("servlet 构造两数运行”);
)
protected void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletExcept ion, IOException {
Systen. out. Drint In( "servlet 请求处理”);

protected void doPost (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet (request, response);
}

(7) 验证当访问/TestServlet时,过滤器TestFilter是否对其进行过滤。

首先启动Tomcat,运行项目Chapt_09,在浏览器中输入http://localhost:8080/Chapt_09。Tomcat服务器启动后的后台输出显示如图4所示。此时控制台输出了过滤器构造函数与初始函数中的输出语句,说明当Web容器启动时,先初始化过滤器TestFilter。

■ 图4 Tomcat服务器启动后的后台输出显示

其次,再访问TestServlet,在浏览器中输入http://localhost:8080/Chapt_09/TestServlet,此时匹配过滤规则,因此过滤器对该Servlet请求进行了过滤。进行过滤后的Tomcat服务器控制台输出如图5所示。

■ 图5 进行过滤后的Tomcat服务器控制台输出

通过以上结果可以得出以下结论。

(1) 过滤器在服务器启动时也随之初始化。

(2) 当符合过滤规则的URL请求访问时,首先调用Filter的doFilter()函数,对请求进行过滤,过滤完毕后,过滤器执行chain.doFilter(request, response)语句,将请求提交给过滤链中的下一个过滤器。

(3) 当所有过滤器都执行完对请求的过滤后,服务器执行Servlet处理请求的doGet()函数。

(4) 执行完Servlet的代码后,再执行chain.doFilter语句的后续代码。

注意,在上面的例子中,TestFilter类使用了以下注解语句:

@ WebFilter(["/TestServlet"})

 该注解表示对访问URL为/TestServlet的请求进行过滤。和Servlet配置一样,也可以在web.xml文件中对Filter进行过滤规则的配置。上面的注解等价于在web.xml中编写下面的配置语句:

< filter >
< filter - name > TestFilter </filter - name›
< filter - class > com. test. filter. TestFilter </filter - class>
</filter>
< filter - mapping >
< filter - name > TestFilter </filter - name >
< url - pattern >/TestServlet </url - pattern>
</filter - mapping ›

注意,在标签体内部还可以通过和两个标签来设置初始化参数,也可以通过上面创建Filter的第(3)步中的选项卡里的initialization parameters来设置。

事实上,在url-pattern过滤规则中可以非常灵活地指定需要过滤的资源,一般有以下3种。

(1) 过滤一个或多个Servlet或者JSP文件。

① 注解的形式如下:

@WebFilter(! "path/Serwlet1","path/Serwlet2"
"path/xxx. jsp"...})

 ② 在web.xml中编写语句如下:

<filter >
< filter - name >过滤器多称</filter - name >
< filter - class >过滤器的类名</filter - class ></filter >
< filter - mapping >
< filter - name >过滤器名称</filter - name >< url - pattern >/ path/Servlet1 </url - pattern ></filter - mapping >
<filter - mapping >
<filter - name >过滤器名称</filter - name >
< url - pattern >/ path/Servlet2 </url - pattern >/filter - mapping >
<filter - mapping >
<filter - name >过滤器名称</filter - name ><url - pattern >/ path/xxX. jsp </url - pattern >
</filter - mapping >

 

该方式一般针对特定的Servlet或者JSP文件进行过滤处理。

(2) 过滤一个或者多个目录下的资源。

① 注解的形式如下:

@WebFilter({ "path/ *"})

 ② 在web.xml中编写语句如下:

<filter >
< filter - name >过滤器名称</filter - name >
< filter - class >过滤器的类名</filter - class ></filter >
< filter - mapping >
< filter - name>过滤器名称</filter - name ><url - pattern >/ path/ x </url - pattern ></filter - mapping >

 

注意,此时使用了通配符*,表示路径下的所有文件。

(3) 过滤所有文件。

① 注解的形式如下:

@WebFilter({"/*})

 ② 在web.xml中编写语句如下:

< filter >
< filter - name>过滤器名称</filter - name>
< filter - class >过滤器的类名</filter - class ></filter >
<filter - mapping >
< filter - name >过滤器名称</filter - name><url - pattern >/ * </url - pattern ></filter - mapping >

 

注意,url-pattern内部以“/”开头,“/”表示的是应用系统的根目录。

另外,在内部还可以通过标签更加细化地指定过滤的URL的请求方式,该元素的值有以下4种。

(1) request:直接由客户端输入对应URL的访问请求。

(2) forward:通过request转发中的forward方式跳转的访问请求。

(3) include:通过request转发中的include方式跳转的访问请求。

(4) error:通过跳转的访问请求。

请求方式的配置也可以在图9-4中的Select dispatchers部分进行设置,设置后会直接在注解中生成对应的配置语句。如果没有在配置文件中指定标签元素,也没有在注解中指定,就默认只过滤request方式。

02、监听器的创建与配置

【例2】监听器的创建以及监听事件配置。

(1) 在src目录下创建一个名为com.test.listener的包,选中该包并按Ctrl+N组合键,在弹出的对话框中选择Web→Listener。选择创建监听器,如图6所示,然后单击Next按钮。

■ 图6 选择创建监听器

(2) 在弹出的Create Listerner对话框中对监听器进行命名,如图7所示。在Class name文本框内输入TestListener,单击Next按钮。

 

■ 图7在Create Listerner对话框中对监听器进行命名

(3) 在监听对象事件选项中,选中需要监听的对象事件,如图8所示。此处选择监听HttpSession对象,以及其属性的改变,然后单击Next按钮。

■ 图9 选中要监听的事件

(4) 确定监听器对象要实现的接口,如图10所示。单击Finish按钮即可完成对监听器的创建。

■ 图10 确定监听器要实现的接口

此时,IDE自动生成了TestListener.java需要实现的接口方法名称,代码如下:

import javax. servlet. annotation. WebListener;
import javax. servlet. http. HttpSessionAttributeListener;
import javax. servlet. http. HttpSessionBindingEvent;
import javax. servlet. http. HttpSessionEvent;
import javax. servlet. http. HttpSessionListener;
@WebListener
public class TestListener implements HttpSessionListener,
HttpSessionAttributeListener {
public TestListener ( ) |
public void sessionCreated (HttpSessionEvent se) {
}
}
public void sessionDestroyed(HttpSessionEvent se) {
public void attributeAdded (HttpSessionBindingEvent se){
public void attributeRemoved(HttpSessionBindingEvent se) {
public void attributeReplaced(HttpSessionBindingEvent se) {
}
}

 注意,在TestListener类的上面一行出现了@WebListener的注解语句,表明这是一个Web监听器。这条注解等价于在web.xml中编写了如下配置。

< listener >
<listener - class > com.test,listener,Testlistener </listener - class>
</listener >

如果想实现具体的监听功能,就必须实现接口中定义的相关方法。 

03、文末送书

 

 

 

 

 

 

 送书活动参与方式:

文章三连并评论:“人生苦短,我爱Java”,48小时后程序自动抽奖,送出6本技术图书【如上图】,版本可选(例如选卷1或卷2),欢迎大家积极参与,早点中奖!

再次感谢机械工业出版社对本次活动的大力支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux之软件包管理

软件包管理 RPM RPM 概述 RPM&#xff08;RedHat Package Manager&#xff09;&#xff0c; RedHat软件包管理工具&#xff0c; 类似windows里面的setup.exe&#xff0c;是Linux这系列操作系统里面的打包安装工具&#xff0c; 它虽然是RedHat的标志&#xff0c; 但理念是通用…

Python自动化对每个文件夹及其子文件夹的Excel表加个表头(Excel不同名且有xls文件)...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 惟将旧物表深情&#xff0c;钿合金钗寄将去。 大家好&#xff0c;我是皮皮。 一、前言 上一篇文章&#xff0c;我们抛出了一个问题&#xff0c;这篇文章…

【iOS锁_@synchronized源码浅析】

文章目录 前言synchronized介绍加锁实例synchronized实现objc_sync_enter 和 objc_sync_exit objc_sync_enterobj存在SyncList的结构SyncList和SyncData的关系id2data函数的实现1. 使用快速缓存2. 获取该线程下的SyncCache3. 全局哈希表查找4. 生成新数据并写入缓存 总结 前言 …

35从零开始学Java之析构方法又是咋回事?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家详细地介绍了构造方法的使用、特点等内容。我们知道&#xff0…

ESP32 :项目的创建及项目架构解析

一、项目的创建 方式一&#xff1a;基于IDF示例创建 在ESP&#xff0d;IDF中有example示例库&#xff0c;以其中的一个示例为模板创建项目。 1、打开示例库 查看 - 命令面板&#xff08;也可以按住CtrlShiftP 或 F&#xff11;&#xff09; 输入 show examples projects 2…

大数据开发之Hive案例篇8-解析XML

文章目录 一. 问题描述二. 解决方案2.1 官方文档2.2 XML格式不规范 一. 问题描述 今天接到一个新需求&#xff0c;hive表里面有个字段存储的是XML类型数据 数据格式: <a><b>bb</b><c>cc</c> </a>二. 解决方案 2.1 官方文档 遇到不懂的…

PyTorch-Forecasting一个新的时间序列预测库

时间序列预测在金融、天气预报、销售预测和需求预测等各个领域发挥着至关重要的作用。PyTorch- forecasting是一个建立在PyTorch之上的开源Python包&#xff0c;专门用于简化和增强时间序列的工作。在本文中我们介绍PyTorch-Forecasting的特性和功能&#xff0c;并进行示例代码…

xhs小红薯【帖子】采集工具python爬虫抓取

一、xhs【帖子/笔记/视频】采集工具链接 &#xff08;请复制链接至浏览器&#xff0c;进行数据采集&#xff09; http://106.53.68.168:9920/xhs-keyword-spider 能爬取到的属性字段如图1 (点击右侧下拉按钮&#xff0c;可任选字段&#xff09; 图1属性字段 二、爬取规则 …

计算机毕业论文选题推荐|软件工程|系列九

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)学生在校信息管…

哪些pdf编辑软件值得下载?办公常备软件

PDF&#xff08;Portable Document Format&#xff09;是一种广泛用于电子文件传输的文档格式。为了更好的编辑和管理PDF文档&#xff0c;许多PDF编辑软件逐渐发展出来。本文将介绍PDF编辑软件的功能和使用方法。 使用PDF编辑软件可以提高我们的工作效率和文档管理能力。下面介…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)迭代提示词笔记(中文chatgpt版)...

Iterative Prompt Develelopment 迭代提示词开发 在本课中&#xff0c;您将反复分析和优化您的提示&#xff0c;以从产品说明书生成营销文案。 设置 import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env fil…

漫画管理工具Kapowarr

之前老苏写过不少漫画相关的软件&#xff0c;Mango、Kavita、Komga等等&#xff0c;但和今天要介绍的 Kapowarr 不太一样&#xff0c;如果你之前用过 Radarr、Sonarr 等 *arr 系列软件&#xff0c;应该是很容易上手的 什么是 Kapowarr &#xff1f; Kapowarr&#xff08;以前的…

基于Android studio二手车交易系统app

客户端&#xff1a; 用户注册&#xff1a;通过输入用户名&#xff0c;密码&#xff0c;所在地&#xff0c;联系地址以及电话和电子邮件等信息进行用户信息的注册。 二手车查看&#xff1a;用户注册登录系统后&#xff0c;可以查看二手车的基本信息&#xff0c;通过二手车的品牌…

【使用教程】NIMC2000控制器EtherCAT通讯下SDO位置清零

NIMC2000控制器是一种高性能的运动控制器&#xff0c;可通过EtherCAT通讯进行控制。在使用过程中&#xff0c;有时需要将位置清零&#xff0c;这可以通过SDO命令实现。 首先&#xff0c;需要确保NIMC2000控制器已经通过EtherCAT连接到了主机。然后&#xff0c;使用SDO命令将位…

AI技术:智慧交通时代的道路识别(文末送书四本)

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 自动驾驶是当前最热门的技术之一&#xff0c;而道路识别则是自动驾驶系统中的重要一环。它需要自动驾驶车辆能够识别和解读道路标志、路面标线、交通信号灯等道路条件&#xff0c;及时准确地做出驾驶决策。接下来Dream将带…

医药行业除钾钠,物料液体钾钠分离,特殊溶剂钾的提取

Tulsimer T-42是特级强酸型离子交换树脂&#xff0c;氢 H/钠 Na阳离子交换树脂&#xff0c; 是一款有较的交换容量 ,并同时拥有物理及化学稳定品质。可应用于汽电共生发电厂冷凝水处理及超纯水系统中的混床, 去除水中的阳离子。 Tulsimer T-42其无裂纹特性和均匀的粒度&#x…

【源码分析】【netty】FastThreadLocal 为什么快?

写在前面 接下来几篇文章&#xff0c;我们来聊一聊 netty 相关的。这里作者想先从 FastThreadLocal 开始说&#xff0c;而不是可能大家更熟悉的 reactor 啊&#xff0c;责任链设计啊&#xff0c;ByteBuf 啊&#xff0c;池化啊等等。不过虽然说 FastThreadLocal 熟知程度不如其…

剑指offer 2--数组中重复的元素

数组中重复的数字_牛客题霸_牛客网 (nowcoder.com) 【排序法】思路和代码&#xff1a; 对数组进行排序。遍历排序后的数组&#xff0c;如果当前元素与下一个元素相等&#xff0c;则找到了重复数字&#xff0c;返回该数字。如果遍历完数组都没有找到重复数字&#xff0c;则返回-…

ChatGPT应用组队学习来了!

Datawhale学习 联合主办&#xff1a;Datawhale、百度文心 Datawhale联合百度文心&#xff0c;五月为大家带来AIGC应用专题&#xff1a;大模型从入门到应用&#xff0c;学习大纲如下&#xff08;文末整理了这次学习的所有资料&#xff09;&#xff1a; 参与学习 ▶ 活动时间&am…

量子力学专题:线性谐振子

任何体系在平衡位置附近的小振动&#xff0c;例如 分子振动、晶格振动、原子核表面振动以及辐射场的振动等往往都可以分解成 若干彼此独立的一维简谐振动简谐振动往往还作为复杂运动的初步近似 见理论力学专题&#xff08;小振动&#xff09; 双原子分子&#xff0c;两原子间的…