Struts拦截器
- 格式:doc
- 大小:672.00 KB
- 文档页数:14
在Struts2框架中,如果你想排除某些拦截器方法,可以使用以下几种方法:1. 使用`@SkipValidation`注解:在需要排除拦截的方法上添加`@SkipValidation`注解。
这将告诉Struts2框架在执行该方法时跳过验证拦截器。
例如:```javapublic class MyAction extends ActionSupport {@SkipValidationpublic String execute() {// 执行不需要验证的方法逻辑return SUCCESS;}}```2. 使用`interceptor`属性:在需要排除拦截的方法上添加`interceptor`属性,并将其设置为`-1`。
这将指示Struts2框架不使用任何拦截器。
例如:```javapublic class MyAction extends ActionSupport {public String execute() {// 执行不需要拦截的方法逻辑return SUCCESS;}}```在上述示例中,`interceptor`属性的值设置为`-1`,相当于告诉Struts2框架不使用任何拦截器。
3. 配置拦截器排除列表:在Struts2框架的配置文件(struts.xml)中,可以使用`<excludes>`标签来排除指定拦截器。
例如,如果你想排除某个拦截器,可以在配置文件中添加以下内容:```xml<struts><!-- 其他配置--><excludes><exclude>com.example.MyInterceptor</exclude></excludes><!-- 其他配置--></struts>```在上述示例中,`<excludes>`标签用于指定需要排除的拦截器类名。
Java三⼤器之拦截器(Interceptor)的实现原理及代码⽰例1,拦截器的概念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容器。
struts2框架特征Struts2框架特征Struts2是一种流行的Java Web应用程序开发框架,其特征使其成为许多开发者的首选。
本文将介绍Struts2框架的特征,包括MVC 架构、强大的标签库、拦截器、数据验证、国际化支持以及灵活的配置等。
一、MVC架构Struts2采用了MVC(Model-View-Controller)架构,将应用程序的业务逻辑、数据模型和用户界面分离。
这种架构使开发者能够更好地组织代码、提高代码的可维护性,并能够更容易地进行代码重用和测试。
在Struts2中,Model代表数据模型,可以是POJO(Plain Old Java Object)或者是与数据库交互的实体类;View代表用户界面,通常是JSP页面;Controller则负责处理用户请求、调用业务逻辑,并将处理结果返回给用户。
二、强大的标签库Struts2提供了丰富的标签库,使开发者能够更轻松地构建用户界面。
这些标签库包括表单标签、数据展示标签、控制流标签等,可以大大简化页面开发的工作量。
例如,开发者可以使用Struts2的表单标签库来生成表单,并自动处理表单的数据绑定、验证和错误提示。
这样,开发者无需手动编写大量的HTML和JavaScript代码,能够更快速地完成表单开发。
三、拦截器Struts2的拦截器是其核心特性之一,可用于在请求到达Controller之前和之后执行一些通用的处理逻辑,如日志记录、权限验证、异常处理等。
开发者可以通过配置拦截器栈,将多个拦截器按照特定的顺序组合起来,实现复杂的请求处理流程。
拦截器的使用使得开发者能够将通用的处理逻辑从业务逻辑中分离出来,提高了代码的可维护性和重用性。
同时,Struts2还提供了许多内置的拦截器,如参数封装拦截器、文件上传拦截器等,方便开发者处理不同类型的请求。
四、数据验证在Web应用程序中,数据验证是一项重要的任务。
Struts2提供了强大的数据验证机制,开发者可以通过简单的配置实现对表单数据的验证。
import java.util.Map;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;/**拦截指定方法*/public class MyFilterInterceptor extends MethodFilterInterceptor{private static final long serialVersionUID = 1L;private String name;public void setName(String name){ = name;}@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception { //取得请求相关的ActionContext实例ActionContext ctx = invocation.getInvocationContext();Map session = ctx.getSession();//取出名为user的Session属性String user = (String)session.get("user");//如果没有登陆,或者登陆所用的用户名不是scott,都返回重新登陆if (user != null && user.equals("scott") ){return invocation.invoke();}//没有登陆,将服务器提示设置成一个HttpServletRequest属性ctx.put("tip" , "您还没有登陆,请输入scott,tiger登陆系统");//直接返回login的逻辑视图return Action.LOGIN;}}2.struts.xml配置<package name="site" extends="struts-default" namespace="/site"><interceptors><!-- 定义了一个名为authority的拦截器--><interceptor name="authority" class="cn.zgcyx.filter.MyFilterInterceptor"/> <!--上面自定义的拦截器类--><interceptor-stack name="myDefault"><interceptor-ref name="authority"> <!-- 引用拦截器--><param name="includeMethods">getALL,getPart,listUser</param> <!-- 设置需要拦截的方法,多个以逗号隔开--></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><default-interceptor-ref name="myDefault"></default-interceptor-ref><!-- 全局--><global-results><!-- 当返回login视图名时,转入/login.jsp页面--><result name="login">/login.jsp</result></global-results><action name="site" class="siteServiceAction"><!--省略跳转--></action></package>。
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)这是本系列的最后一章,大象对示例进行适当的扩充并说明。
其实到第四篇,对于示例的说明就已经全部讲完了,如果按照这样的例子,很难有什么值得学习的地方。
大象本着写点有用东西的原则,在这章,对示例进行一下适当的扩充并说明。
第五部分:扩展框架paramsPrepareParamsStack拦截器栈paramsPrepareParamsStack这个拦截器栈是在struts2-default.xml中定义的,里面包含了很多个拦截器,最重要的是这三个:params、prepare、modelDriven。
我们只要记住这样几点。
params:它负责将请求参数值设置到Action中与之同名的属性中。
prepare:当Action实现了Preparable接口时,这个拦截器就会调用prepare()方法。
如果你有想在execute()方法之前执行的逻辑处理,它就可以帮你完成这个功能。
modelDriven:如果Action实现了ModelDriven接口,这个拦截器就会把getModel()方法中的返回结果压入值栈。
这就意味着,可以在结果页面上直接使用model对象的属性。
它的执行顺序是这样的首先,params拦截器会给action中的相关参数赋值,如id,username,password等等。
然后,prepare拦截器执行prepare()方法,prepare()会根据参数,如id,去调用相关的方法,设置model对象。
当然,实现的这个接口方法由你自己来定义,不局限只设置model之类的功能。
接着,modelDriven拦截器会将model对象压入值栈,因为它是把getModel()方法中的返回结果放到值栈中,而这个方法的返回类型是个泛型参数,在实现ModelDriven接口的时候,可以给它指定一个具体的对象类型,因此返回类型也将是这个指定的对象类型,如ModelDriven<User>最后,params拦截器会将参数再赋值给model对象。
struts2异常拦截处理在实际开发中,我们需要将捕获的异常信息打印出来,换上通俗的语言让客户能够大概了解是原因引起的异常,所以我们需要将异常信息显示到页面上来,让客户能够看得见。
这里介绍以下struts2的异常处理机制。
在sturts2的struts-default.xml中,引用了struts2定义的拦截器:<interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/下面是一个小例子来说明struts2中,应该如何捕获异常信息,并将异常信息显示到页面:一个简单的index.jsp页面,只有一个按钮,点击进入action:<s:form action="login"><s:submit value="submit"/></s:form>struts.xml的配置:<struts><package name="Action" extends="struts-default"><global-results><result name="all">/error.jsp</result></global-results><global-exception-mappings><exception-mapping result="all" exception="ng.Exception"></exception-mapping></global-exception-mappings><action name="login" class="com.action.LoginAction"><result name="success">/success.jsp</result></action></package></struts>Action:public class LoginAction extends ActionSupport {@Overridepublic String execute() throws Exception {try{int i = 9/0;}catch (Exception e) {throw new Exception(e);}return "success";}}打印错误信息的页面 error.jsp:<body><s:property value="exception.message"/></body>这样就可以把异常信息打印到指定的页面,当然也可以在struts.xml中定义局部的异常映射信息。
Struts2拦截器Interceptor的原理与配置实例详解⼀、Struts2拦截器原理:Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置⽂件,并根据其配置实例化相对的拦截器对象,然后串成⼀个列表,最后⼀个⼀个地调⽤列表中的拦截器。
⽐如:应⽤要求⽤户登陆,且必须为指定⽤户名才可以查看系统中某个视图资源;否则,系统直接转⼊登陆页⾯。
对于上⾯的需求,可以在每个Action的执⾏实际处理逻辑之前,先执⾏权限检查逻辑,但这种做法不利于代码复⽤。
因为⼤部分Action⾥的权限检查代码都⼤同⼩异,故将这些权限检查的逻辑放在拦截器中进⾏将会更加优雅。
PS:1. Struts2拦截器是在访问某个Action或Action的某个⽅法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的⼀种实现.2. 拦截器栈(Interceptor Stack)。
Struts2拦截器栈就是将拦截器按⼀定的顺序联结成⼀条链。
在访问被拦截的⽅法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调⽤。
⼆、Struts2 拦截器接⼝实现:Struts2规定⽤户⾃定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接⼝。
该接⼝声明了3个⽅法,其中,init和destroy⽅法会在程序开始和结束时各执⾏⼀遍,不管使⽤了该拦截器与否,只要在struts.xml中声明了该Struts2拦截器就会被执⾏。
intercept⽅法就是拦截的主体了,每次拦截器⽣效时都会执⾏其中的逻辑。
void init();void destroy();String intercept(ActionInvocation invocation) throws Exception;1:所有拦截器都使⽤接⼝Interceptor ,Action去实现这个接⼝;Init()⽅法:在服务器起动的时候加载⼀次,并且只加载⼀次;Destroy()⽅法:当拦截器销毁时执⾏的⽅法;Interceptor()⽅法:其中⾥边有⼀个参数invocation;public String intercept(ActionInvocation invocation) throws xception {System.out.println("interceptor!!");String result=invocation.invoke();return result;}其中intercept⽅法是拦截器的核⼼⽅法,所有安装的拦截器都会调⽤之个⽅法。
1、用户浏览器向Web服务器发送HttpServletRequest请求;
2、这个请求经过一系列的过滤器(Filter)的过滤并传递给核心控制FilterDispatcher。
在此指定了defaultStack为struts-default包的默认拦截器。
Struts-default包的默认拦截器栈defaultStack中包含了exception,alias
系列拦截器,这些拦截器能够满足开发都所需要的大部分要求。
我们需要注意它们
(2)在SRC目录下创建包com.action,在该包下创建PrepareAction.java动作类,并实现Preparable接口.
3.6.2 自定义拦截器的配置
掌握了自定义拦截器的创建方法后,需要对自定义拦截器进行配置。
配置的方法与前面介绍的方法是一致的。
只需要在<interceptor>标签的class属性中指定自定义拦截器类就可以了。
例如我们为上面自己编写的拦截器进行配置。
在该包下创建SecondAction.java,其内容如下:
在src目录下创建包com.interceptor,在此包下创建FirstInterceptor.java, SecondInterceptor.java 和ThirdInterceptor.java此三个文件的代码如下:
在src目录下创建struts2的配置文件struts.xml,在这个文件中对Action和拦截器进行配置.
在webroot下创建index.jsp文件.
在webroot下创建结果视图页面success.jsp页面.。