Struts2中的拦截器教学示例及课后练习参考资料 - 图文

更新时间:2023-10-21 09:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

有关拦截器技术的一些概念

1、为什么要应用拦截器

拦截器就是一种AOP的实现方式,传统的JSP&Servlet架构中,客户端发送一个请求,服务器端生成一个request对象,并执行相应的doGet()或者doPst()方法,最后由response返回一个响应到客户端,整个服务过程就结束了。

所以所有的业务逻辑功能只能在doGet ()或者doPst()方法中调用,这样整个业务就写死了,如果想增加新的功能,只能修改doGet ()或者doPst()方法,不符合开闭原则(OCP)。

2、Struts 2框架中的默认拦截器

在Struts2中每发送一个请求都要经过好几层的拦截器最终才到达所调用的action。由多个拦截器组成的就是一个intercptor-stack,如果扩展了struts-default就默认集成了defaultstack。里面包含了许多常用的拦截器,比如文件上传时会用到fileUpload,要调出session对象由servletConfig来做。 因为defaultstack里的拦截器,默认已经配好了,所以无需要专门对这些拦截器进行配置。 3、Struts 2框架中的各种形式的拦截器的主要作用 拦截器 名字 Alias Interceptor Chaining Interceptor alias chain 说明 在不同请求之间将请求参数在不同名字件转换,请求内容不变 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用。 Checkbox Interceptor checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。 Cookies Interceptor Conversion Error Interceptor Create Session Interceptor cookies conversionError createSession 使用配置的name,value来是指cookies 将错误从ActionContext中添加到Action的属性字段中。 自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。 Debugging Interceptor Execute and Wait Interceptor debugging execAndWait 提供不同的调试用的页面来展现内部的数据状况。 在后台执行Action,同时将用户带到一个中间的等待页面。 将异常定位到一个画面 提供文件上传功能 记录用户选择的locale 输出Action的名字 存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。 如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。 Exception Interceptor exception File Upload Interceptor fileUpload I18n Interceptor Logger Interceptor Message Store Interceptor i18n logger store Model Driven Interceptor model-driven Scoped Model Driven scoped-model-driven 如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入ActionParameters Interceptor Prepare Interceptor Scope Interceptor Servlet Config Interceptor Static Parameters Interceptor Roles Interceptor Timer Interceptor Token Interceptor Token Session Interceptor Validation Interceptor Workflow Interceptor Parameter Filter Interceptor Profiling Interceptor params prepare scope servletConfig 内部。 将请求中的参数设置到Action中去。 如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。 将Action状态存入session和application的简单方法。 提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。 staticParams roles timer token tokenSession validation workflow N/A profiling 从struts.xml文件中将中的中的内容设置到对应的Action中。 确定用户是否具有JAAS指定的Role,否则不予执行。 输出Action执行的时间 通过Token来避免双击 和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中 使用action-validation.xml文件中定义的内容校验提交的数据。 调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面 从参数列表中删除不必要的参数 通过参数激活profile

WebWork提供的拦截器介绍

1、 自动为Action设置Http请求数据的拦截器(Parameters Interceptor)。这个拦截器非常方便实用,但完全自动组装对象数据,很可能会带来安全问题。如果Action不需要设置数据,那么这个Action只要实现com.opensymphony.xwork.interceptor.NoParameters接口即可。如果是Action中部分数据需要自动

com.opensymphony.xwork.interceptor.ParameterNameAware,可以在这个接口的acceptableParameterName(String parameterName)方法中,定义我们可以接受哪些方法,如果允许只要让这个方法返回True就可以了。

2、 过虑参数功能的拦截器(Parameter Filter Interceptor)。它可以全局阻止非法或不允许Action访问的参数。可以很好的和上面的组装参数的拦截器一起使用。

3、 为Action设置静态数据的拦截器(Static Parameters Interceptor)。它可以将Action定义的静态参数,设置到Action中。

4、 数据验证拦截器(Validation Interceptor)。定义之后,会调用验证文件或实现验证接口com.opensymphony.xwork.Validateable的所有验证。

5、 验证流程处理拦截器(Workflow Interceptor)。它和上面的拦截器一起使用,处理验证的流程。如果验证通过则继续前进,如果发现有验证错误消息,直接转到Action中定义的输入结果(input)页面。

6、 类型转换错误处理拦截器()。它首先去取得类型转换的错误消息(主要是由设置Http请求参数的拦截器产生),如果取到错误消息,它会将错误消息传递给实现接口com.opensymphony.xwork.ValidationAware的Action,这样我们可以将这些错误消息暴露到页面中。

7、 Action链拦截器(Chaining Interceptor)。它是用来拷贝前一个Action的属性数据到当前Action中。它要求前一个Action必须是chain Result(

8、 防止页面重复提交(或页面重复刷新)拦截器。Token Interceptor和Token Session Interceptor都是防止重复提交的拦截器。不同点是后者在Session存贮了最近一次请求的结果数据。

9、 文件上传的拦截器(File Upload Interceptor)。实现文件上传的功能。如果有人曾经手工写过文件上传程序,那一定会惊叹于这个拦截器。我们可以在这个拦截器中设定上传文件的大小和类型限制。记得需要第三方的文件上传库的支持,只要在webwork.properties中配置过,并拷贝相应的jar包就可以了。

10、 进度条等待拦截器(Execute and Wait Interceptor)。当Action的执行需要很长实际的时候,我们可以使用这个进度条等待的拦截器。它会将Action放到后台执行,而在前端显示进度条或等待消息提示的页面。

应用Struts2中的拦截器技术---自定义拦截器组件、并且了解拦截器组件的工作机制

1、添加一个拦截器组件

类名称为AuthorizedUserInterceptor、包名称为com.px1987.sshwebcrm.interceptor、并且从com.opensymphony.xwork2.interceptor.AbstractInterceptor基类进行继承。

2、编程该拦截器组件

Struts2截获Action请求,在Action执行之前或之后调用拦截器方法。这样,可以用插拔的方式将功能注入到Action中。WebWork框架的很多功能都是以拦截器的形式提供出来。例如:参数组装,验证,国际化,文件上传等等。

package com.px1987.sshwebcrm.interceptor;

import java.util.Map;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.px1987.sshwebcrm.actionform.UserInfoActionForm;

public class AuthorizedUserInterceptor extends AbstractInterceptor {

public AuthorizedUserInterceptor() { }

@Override

public String intercept(ActionInvocation oneActionInvocation) throws Exception { //前置效果(在被拦截的目标Action类中的方法执行之前执行) System.out.println(\在第一个拦截器中的前置拦截代码已经被执行!\

String returnResult=oneActionInvocation.invoke();

System.out.println(\原来的Action类中的目标方法已经被执行!\

//后置效果(在被拦截的目标Action类中的方法执行以后再执行) System.out.println(\在第一个拦截器中的后置拦截代码已经被执行!结果为:

\ return returnResult; }

}

3、在struts.xml文件中配置和定义出该拦截器组件

\ \

class =\

class =\

class =\

本文来源:https://www.bwwdw.com/article/b5pf.html

Top