java拦截器的作用(什么是拦截器,如何配置拦截器,如何使用拦截器)

本文目录
什么是拦截器,如何配置拦截器,如何使用拦截器
需在web.xml文件中配置《filter》标签,这个标签就是用作拦截器的,具体的配置如下:
《filter》 --- 配置过滤器
《filter-name》FirstFilter《/filter-name》
---为过滤器起一个名字
《filter-class》com.itheima.filter.FirstFilter《/filter-class》
---过滤器类的全路径名
《init-param》
--- 可选的 可以配置多个 过滤器的初始化参数可以在过滤器中通过FilterConfig对象来获取
《param-name》name1《/param-name》
《param-value》value1《/param-value》
《/init-param》
《/filter》
《filter-mapping》
--- 配置过滤器的拦截路径 ,一个《Filter》可以配置多个《filter-mappint》
《filter-name》FirstFilter《/filter-name》
---为哪个过滤器进行配置
《url-pattern》/*《/url-pattern》
--- 拦截哪个路径 其中url-pattern的写法和学习Serlvet时的url-pattern的写法相同 这个url-pattern可以配置多个
《servlet-name》Demo1Servlet《/servlet-name》
---拦截哪个名字的Servlet 可以配置多个
《dispatcher》REQUEST《/dispatcher》
--- 配置拦截哪种类型的对资源的访问,可选的值有REQUESTFORWARD INCLUDE ERROR,如果不配置默认只拦截REQUEST方式,如果具体配置了就拦截具体配置的方式的对资源的访问,此标签可以配置多个
《/filter-mapping》
简单点说就是需要配置《filter》和《filter-mapper》标签,filter标签里《filter-name》、《filter-class》是必须要的,filtermapper中《filter-name》、《url-pattern》是必须要的,其他标签都是可选的
java拦截器和直接返回的区别
拦截器是基于java的反射机制,而过滤器基于函数回调。
过滤器依赖于servlet容器,拦截器不依赖于servlet容器。
拦截器只能对action请求起作用,而过滤器几乎对所有的请求都起作用。
拦截器可以访问action上下文,值栈里的对象,而过滤器不能。
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
拦截器可以获取IOC容器中的各个bean,而过滤器就不行,(在拦截器里注入一个service,可以调用业务逻辑)。
过滤器是在请求进入容器后,但进入servlert前进行预处理的。响应请求也是,在servlet处理结束后,返回给客户端前触发。而拦截器提供了三个方法支持(1)preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们上一章的Controller实现); 返回值:true表示继续流程(如调用下一个拦截器或处理器);false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
java如何实现拦截短信功能
java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action
执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截
然后再之前或者之后加入某些操作。目前,我们需要掌握的主要是Spring的拦截器,Struts2的拦截器不用深究,知道即可。
2,拦截器的原理
大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts2
会查找配置文件,并根据配置实例化相对的拦截器对象,然后串成一个列表(List),最后一个一个的调用列表中的拦截器。Struts2的拦截器是可
插拔的,拦截器是AOP的一个实现。Struts2拦截器栈就是将拦截器按一定的顺序连接成一条链。在访问被拦截的方法或者字段时,Struts2拦截器链
中的拦截器就会按照之前定义的顺序进行调用。
3,自定义拦截器的步骤
第一步:自定义一个实现了Interceptor接口的类,或者继承抽象类AbstractInterceptor。
第二步:在配置文件中注册定义的拦截器。
第三步:在需要使用Action中引用上述定义的拦截器,为了方便也可以将拦截器定义为默认的拦截器,这样在不加特殊说明的情况下,所有的
Action都被这个拦截器拦截。
4,过滤器与拦截器的区别
过滤器可以简单的理解为“取你所想取”,过滤器关注的是web请求;拦截器可以简单的理解为“拒你所想拒”,拦截器关注的是方法调用,比如拦截
敏感词汇。
4.1,拦截器是基于java反射机制来实现的,而过滤器是基于函数回调来实现的。(有人说,拦截器是基于动态代理来实现的)
4.2,拦截器不依赖servlet容器,过滤器依赖于servlet容器。
4.3,拦截器只对Action起作用,过滤器可以对所有请求起作用。
4.4,拦截器可以访问Action上下文和值栈中的对象,过滤器不能。
4.5,在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时调用一次。
5,Spring拦截器
struts2 拦截器和过滤器的作用是什么
拦截器的工作原理:
***隐藏网址***
***隐藏网址***
b)初始到了servlet容器 传递给一个标准的过滤器链
c)FilterDispatecher会去查找相应的ActionMapper,如果找到了相应的ActionMapper它将会将控制权限交给ActionProxy
d)ActionProxy将会通过ConfigurationManager来查找配置struts.xml
i. 下一步将会 通过ActionInvocation来负责命令模式的实现(包括调用一些拦截Interceptor框架在调用action之前)
ii. Interceptor做一些拦截或者初始的工作
e)一旦action返回,会查找相应的Result
f)Result类型可以是 jsp或者freeMark 等
g)这些组件和ActionMapper一起返回给请求的url(注意拦截器的执行顺序)
h)响应的返回是通过我们在web.xml中配置的过滤器
i)如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。
拦截器实现原理:
1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
过滤器的作用:
(1)执行Actions
过滤器通过ActionMapper对象,来判断是否应该被映射到Action.如果mapper对象指示他应该被映射,过滤链将会被终止,然后Action被调用。这一点非常重要,如果同时使用SiteMesh filter,则SiteMesh filter应该放到该过滤器前,否则Action的输出将不会被装饰。
(2)清除ActionContext
过滤器为了确保内存溢出,会自动的清除ActionContext。这可能会存在一些问题,在和其它的框架集成时,例如SiteMesh。ActionContextCleanUp提供了怎么处理这些问题的一些信息。
(3)维护静态内容
过滤器也会维护在Struts2中使用的一些公共的静态的内容,例如JavaScript文件,CSS文件等。搜索/struts/*范围内的请求,然后将/struts/后面的值映射到一些struts的公共包中,也可以在你的类路径中搜索。默认情况下会去查找以下包:org.apache.struts2.static.template。这样你只用请求/struts/xhtml/styles.css,XHTML UI主题默认的样式表将会被返回。同样,AJAX UI组件需要的JavaScript文件,也可以在org.apache.struts2.static包中被找到。如果你想加入其它被搜索的包,在web.xml中设置filter时,通过给"actionPackages"初始参数一个逗号隔开的包列表值来设定。

本文相关文章:
安卓手机配置文件在哪(android中应用需要的配置应该存放在哪呢)
2026年9月25日 21:00
android studio代码混淆(AndroidStudio自带的混淆配置)
2026年9月15日 16:15
linuxbind服务(在Linux系统的服务器中,使用BIND配置域名服务,主配置文件存放在( )中)
2026年9月6日 01:45
eclipse如何配置maven(linux eclipse 怎么配置maven)
2026年9月3日 19:15
idea配置tomcat路径(idea 设置虚拟路径和tomcat配置虚拟目录映射)
2026年7月21日 01:00
更多文章:
fontcreator怎么导入字体(如何在FontCreator中加入我想要的字)
2025年7月10日 20:00
wordpress主题二次元(怎么用wordpress搭建情侣博客怎么自己弄情侣主题求达人详细赐教!)
2025年7月4日 02:00
腾讯会议怎么向主持人询问后台记录并保存?手机储存内容会被APP浏览并上传保存APP后台服务器吗连着WIFI
2025年7月21日 04:00
正则高考复读学校(2022南京高三复读有哪些学校 南京复读学校名单)
2025年8月7日 13:30
verify例句(please-slide-to-verify是什么意思)
2025年12月5日 06:45
false的副词(英语试卷判断对错,T和F,哪个是对,那个是错)
2026年7月29日 00:00
go语言需要编译吗(Go语言能在安卓运行吗 Go是脚本语言还是汇编)
2026年3月18日 20:00
有哪些js框架(web前端三大主流框架是什么 都有哪些功能)
2025年9月22日 16:30
springfestival六年级作文(六年级过春节英语作文300字)
2026年2月27日 20:45
在java语言中下列说法正确的是(Java语言说法正确的有())
2026年9月9日 20:30
edittext下划线颜色(android 如何使EditText中不同行显示不同的颜色(两种颜色))
2026年5月15日 11:30
帝国cms手机端(请教帝国cms中的手机端同步插件bug 修复方法)
2026年1月18日 22:15











