JavaWeb过滤器.监听器.拦截器-原理&区别-个人总结(转)

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 

3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 

4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 

 

     拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。 

 

     1.Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现。

     2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。

 

 

 

     附:面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。

      但是人们也发现,在分散代码的同时,也增加了代码的重复性。什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。

    也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。 

      一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。

这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。 

     AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充。

 

下面通过实例来看一下过滤器和拦截器的区别: 

 

使用拦截器进行/admin 目录下jsp页面的过滤 

 

<package name="newsDemo" extends="struts-default" 

        namespace="/admin"> 

        <interceptors> 

            <interceptor name="auth" class="com.test.news.util.AccessInterceptor" /> 

            <interceptor-stack name="authStack"> 

                <interceptor-ref name="auth" /> 

            </interceptor-stack> 

        </interceptors> 

        <!-- action --> 

        <action name="newsAdminView!*" class="newsAction" 

            method="{1}"> 

            <interceptor-ref name="defaultStack"/> 

            <interceptor-ref name="authStack"> 

            </interceptor-ref> 

 

下面是我实现的Interceptor class: 

 

package com.test.news.util; 

import java.util.Map; 

import com.opensymphony.xwork2.ActionContext; 

import com.opensymphony.xwork2.ActionInvocation; 

import com.opensymphony.xwork2.interceptor.AbstractInterceptor; 

import com.test.news.action.AdminLoginAction; 

/** 

* @author chaoyin */ 

 

public class AccessInterceptor extends AbstractInterceptor { 

 

    private static final long serialVersionUID = -4291195782860785705L; 

    @Override 

    public String intercept(ActionInvocation actionInvocation) throws Exception { 

         ActionContext actionContext = actionInvocation.getInvocationContext(); 

         Map session = actionContext.getSession();         

        //except login action 

         Object action = actionInvocation.getAction(); 

        if (action instanceof AdminLoginAction) { 

            return actionInvocation.invoke(); 

         } 

        //check session 

        if(session.get("user")==null ){ 

            return "logout"; 

         } 

        return actionInvocation.invoke();//go on 

     } 

} 

       过滤器:是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符。主要为了减轻服务器负载,减少压力。

 

使用过滤器进行/admin 目录下jsp页面的过滤,首先在web.xml进行过滤器配置: 

 

    <filter> 

        <filter-name>access filter</filter-name> 

        <filter-class> 

             com.test.news.util.AccessFilter 

        </filter-class> 

    </filter> 

    <filter-mapping> 

        <filter-name>access filter</filter-name> 

        <url-pattern>/admin/*</url-pattern> 

    </filter-mapping> 

 

下面是过滤的实现类: 

package com.test.news.util; 

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.http.HttpServletRequest; 

import javax.servlet.http.HttpServletResponse; 

import javax.servlet.http.HttpSession; 

public class AccessFilter implements Filter { 

/** 

* @author chaoyin 

*/     

    public void destroy() { 

 

     } 

    public void doFilter(ServletRequest arg0, ServletResponse arg1, 

             FilterChain filterChain) throws IOException, ServletException { 

         HttpServletRequest request = (HttpServletRequest)arg0; 

         HttpServletResponse response = (HttpServletResponse)arg1; 

         HttpSession session = request.getSession(); 

        if(session.getAttribute("user")== null && request.getRequestURI().indexOf("login.jsp")==-1 ){ 

             response.sendRedirect("login.jsp"); 

            return ; 

         } 

         filterChain.doFilter(arg0, arg1); 

 

     } 

    public void init(FilterConfig arg0) throws ServletException { 

 

     } 

}

 

编程改变生活,改变人生

智能车赛道识别:八邻域算法的实战解析与优化 本文深入解析了智能车赛道识别中八邻域算法的核心原理与实战优化。作为兼顾性能与稳定性的经典方案,该算法通过模拟探险家环顾八方的策略,能精准追踪弯道与直道边界。文章详细拆解了代码逻辑,并提供了边界平滑、异常处理及应对十字路口、环岛等复杂场景的关键优化策略,助力开发者提升智能车视觉系统的鲁棒性与实时性。 阅读详情

相关推荐

西门子S7-1200的PID应用(恒温热水器)

物料清单:1200PLC一台,模拟量输入模块SM1231(PLC自带的输入通道不支持4-20mA电流输入)一个,PT100一个,温度变送器,热得快,固态继电器。 第一步,硬件接线; 第二步,新建1200工程,添加PLC和模拟量输入模块,修改模块的模拟量输入类型为4-20mA,模拟量模块的IO地址为96-103(8个字); 第三步,新建循环组织块OB30,循环时间选择默认点1...

weixin_30835649的博客 6549

JavaWeb学习笔记:拦截器

当客户端发起请求时,Filter 过滤器可以将请求拦截下来,对请求进行一些判断,只有符合要求的请求才会放行。应用场景:登录验证,设置编码,过滤明杆字符等。

m0_72087285的博客 2195

飞腾Ubantu22.04.3安装OpenNebula测试

因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包,借此用源码编译进行测试。

坚持就是胜利的博客 1011

web.xml配置拦截器,拦截器获取web.xml中的配置

web.xml配置拦截器,拦截器获取web.xml中的配置 &lt;filter&gt; &lt;filter-name&gt;LoginFilterTwo&lt;/filter-name&gt; &lt;filter-class&gt;com.xx.xx.base.filter.LoginFilterTwo&lt;/filter-class&gt; &lt;async-supported&gt;true&lt;/async-supported&gt; &lt;init-param&gt; &l

qq_34004088的博客 2121

基于OpenCV的实时疲劳检测系统实现

本文介绍了一个基于OpenCV的实时疲劳检测系统,使用Python实现。系统通过Haar级联分类器检测人脸和眼睛,计算眼睛宽高比(EAR)和PERCLOS(眼睛闭合时间比例)来评估疲劳程度,分为4个等级:正常、轻度、中度和重度疲劳。核心代码包含人脸眼睛检测、疲劳评估和可视化显示功能,具有实时性、稳定性和直观的视觉反馈。系统可通过摄像头实时监控驾驶员状态,为疲劳驾驶预警提供简单有效的解决方案。

weixin_62135607的博客 232

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 153

Java三大器之拦截器(Interceptor)的实现原理及代码示例

过滤器与拦截器的区别 过滤器可以简单的理解为“取你所想取”,过滤器关注的是web请求;拦截器可以简单的理解为“拒你所想拒”,拦截器关注的是方法调用,比如拦截 敏感词汇。 4.1,拦截器是基于java反射机制来实现的,而过滤器是基于函数回调来实现的。(有人说,拦截器是基于动态代理来实现的) 4.2,拦截器不依赖servlet容器,过滤器依赖于servlet容器。 4.3,拦截器只对Action起作用,过滤器可以对所有请求起作用。 4.4,拦截器可以访问Action上下文和值栈中的对象,过滤器不能。 4

reggergdsg的博客 27万+

ESP32 VSCode开发环境配置

ESP32 VSCode开发环境配置

qq_53529450的博客 511

SpringMVC Day 10 : 拦截器

拦截器是Spring MVC框架提供的一种强大的机制,用于在请求到达控制器之前或之后进行预处理和后处理。它可以拦截并处理请求,对请求进行必要的修改或验证,以及在请求返回给客户端之前进行额外的操作。拦截器可以帮助我们实现各种需求,如身份验证、日志记录、性能监控等。在本篇博文中,我们将深入研究拦截器的概念、工作原理和使用方法。我们将学习如何创建和配置拦截器,以及如何将其应用于Spring MVC应用程序中。最后,我们还将探讨一些实际应用场景,并给出一些拦截器的最佳实践。

zhiqiuqiu2的博客 1974

【unity游戏开发入门到精通——UGUI】文本控件 —— TextetMeshPro新文本控件(TextMeshPro - Text(UI)和TextMeshPro - Text)

文本组件是UGUI中最常用的组件,它的作用是对文本数据进行处理并显示。UGUI的文本组件可以分两为种——Text旧文本控件、TextMeshPro新文本组件。本文主要是介绍TextMeshPro新文本控件,而TextMeshPro新文本控件又可以分为两种——TextMeshPro - Text(UI)和TextMeshPro - Text。TextMeshPro是Unity收购的一个第三方插件,现在已经自动内置到编辑器中,只要使用一次就会自动导入到工程。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3768

802.11be 的“上帝视角”:深入解析 CSI 技术原理与实现

IEEE 802.11be标准下的CSI技术解析 摘要:本文深入解析了802.11be标准中的信道状态信息(CSI)技术。CSI作为无线通信的&quot;高精度地图&quot;,通过显式反馈机制获取信道矩阵H,经SVD分解得到预编码矩阵V。802.11be在CSI反馈机制上实现重大改进:支持320MHz带宽、16空间流;引入灵活的子载波分组(Ng=4/16)、更高量化精度(最高9/7比特)、部分带宽反馈和触发式反馈。这些创新显著提升了MU-MIMO和波束成形性能,为Wi-Fi 7带来极速通信、精准感知和Me

1042484520@qq.com(邮箱) 210

web中的拦截器

拦截器 Filter过滤器 Filter过滤器它是JavaWeb的三大组件之一。三大组件分别是: Servlet 程序、Listener 监听器、Filter 过滤器 Filter过滤器它是JavaEE的规范。也就是接口 Filter过滤器它的作用是:拦截请求,过滤响应 Filter 的工作流程图 Filter 过滤器的使用 创建一个类实现Filter接口,实现接口方法 在doFilter方法中写功能需求 到 web.xml 中去配置 Filter 的拦截路径 创建拦截器 实现Filter接口 i

HUIEX的博客 2984

3、灵巧手的设计与构造

本文详细探讨了灵巧手的设计与构造,包括多指结构、关节和连杆设计、传感器集成以及分层控制架构等内容。同时,通过工业装配、医疗手术辅助和日常生活辅助等实际应用案例,展示了灵巧手的灵活性和适应性,并分析了当前设计面临的挑战及未来发展方向。

brandy的博客 493

JavaWeb过滤器.监听器.拦截器-原理&区别-个人总结(转) - - ITeye...

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 ...

weixin_30289831的博客 105

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an &ldquo;advanced algorithms&rdquo; book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用

JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->filter-->servlet; 而拦截器是在Spring MVC中配置的,如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param-->listener-->filter--

Jintao_Ma的博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

过滤器、监听器、拦截器的区别

本文主要介绍的时过滤器、监听器、拦截器的区别。

m0_62740234的博客 1097

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

javaWeb监听器、过滤器、拦截器

拦截器是在SpringMVC中配置的,如果从整个项目中看,一个servlet请求的执行过程就变成了这样: context-param   --&amp;gt;   listener   --&amp;gt;    filter    --&amp;gt;   servlet   --&amp;gt;  interceptor(拦截器) 为什么拦截器是在servlet执行之后,因为拦截器本身就是在servlet内部的  ...

beOkWithAnything 873

Java Web之拦截器Interceptor、过滤器Filter及监听器Listener

拦截器Interceptor:HandlerInterceptor、HandlerInterceptorAdapter被废弃、拦截器实战; 过滤器Filter:责任链模式,延迟加载过滤器,中文乱码过滤器; 监听器Listener:EventListener、三类监听器接口、配置监听器、监听器实战、监听器和事件驱动模型的区别; 拦截器和过滤器的区别、过滤器和监听器的区别;

lonelymanontheway的博客 3293

过滤器,拦截器,监听器的区别

SpringMVC 中的Interceptor 拦截请求是通过来实现的。在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Interceptor类要实现了Spring 的接口,或者是这个类继承实现了HandlerInterceptor 接口的类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter;第二种方式是实现Spring的。

m0_73757009的博客 513

JavaWeb过滤器.监听器.拦截器-原理&区别-个人总结

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 拦截器 :是在面向切面编程的就...

WOLF 464

Java Web三大组件:过滤器、拦截器、监听器原理全解

定义:基于Servlet规范,用于对HTTP请求和响应进行预处理或后处理。本质:实现接口,由容器在请求进入Servlet前后自动调用。作用范围:所有进入Servlet/JSP的请求。

IT技术学习与工作笔记分享 1013

拦截器,监听器和过滤器有什么作用?

这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【 拦截器,监听器和过滤器有什么作用?】 本质区别 过滤器和监听器是JavaWeb技术 拦截器是面向切面编程的技术 listener 通过listener可以监听web服务器中某一个执行动作,并根...

IT修真院:初学者转行到互联网的聚集地 396

JavaWeb-拦截器,过滤器,监听器的区别和执行顺序

一:拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,springmvc的aop中的前置通知和后置通知。 二: 过滤器:是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数, 然后再传入servlet或者struts的 action进行业务逻辑,...

96

JavaWeb中监听器+过滤器+拦截器区别和配置

1:过滤器 Servlet中的过滤器是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是在执行具体的方法前做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应...

qq_35286682的博客 248
上一篇: EL表达式语言
下一篇: Apache提供HttpPost
weixir123
博客等级 码龄16年 1粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值