Struts2知识点回顾(五)拦截器的工作流程以及如何实现
来源:互联网 发布:软件激活码拿码平台 编辑:程序博客网 时间:2024/05/29 09:01
工作流程
顾名思义,拦截器就是在请求前后对请求进行拦截,抽象的说法就是拦截器将Action抱在了自己怀里,别人想要访问就必须经过拦截器这道门,离开也要从这道门经过。抽象的图如下:
应用场景
在Web应用中,很多地方都用到了拦截器,例如权限验证,编码转换,参数类型转换(Struts2对参数的封装就是通过拦截器实现的),日志输出等。
拦截器栈
在Struts2中,拦截器像栈一样将action方法压在栈的最底层,要访问到最底层的action方法,就必须从栈顶逐级访问拦截器,到达最底层执行完方法后,又依次从栈底按照顺序逐级退出。在struts-default中预先定义了很多默认的拦截器,在我们编写自定义拦截器的时候最好在其之前声明默认的拦截器栈,以防参数获取出错或其它错误。以下为默认拦截器栈defaultStack中的拦截器们:
<interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="i18n"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="scopedModelDriven"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="multiselect"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="debugging"/></interceptor-stack>
具体定义方式
要求
- 实现Interceptor接口,或者继承AbstractInterceptor类。
- 实现包含intercept方法,这个方法为每次请求访问时拦截器执行的方法他有一个ActionInvocation类型的参数,我们可以通过这个方法轻易地获取到请求访问的Action。方法签名为:
public String intercept(ActionInvocation actionInvocation) throws Exception
- 根据需要选择覆盖以下方法:
简单示例
下面做一个简单示例,模拟用户注册事件,在密码传输到Action之前,将其使用MD5加密,其中MD5加密使用的是自己实现的一个工具类。此处没有重写init()和destory()方法。注意:配置文件中一定要配置默认的拦截器栈,因为一旦加入了自定义拦截器,默认拦截器栈就会失效,在加入时要注意将其放在自定义拦截器之前。
InterceptorAction.java
package action;import util.MD5Code;import com.opensymphony.xwork2.ActionSupport;public class InterceptorAction extends ActionSupport{ private String account; private String password; public String regist(){ //模拟存进数据库 System.out.println("把用户:" + account +"存进了数据库"); System.out.println("密码为:" + password); return SUCCESS; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
自定义拦截器
RegistInterceptor.java
package interceptor;import util.MD5Code;import action.InterceptorAction;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class RegistInterceptor extends AbstractInterceptor{ public String intercept(ActionInvocation actionInvocation) throws Exception { System.out.println(">>>到达action前进入拦截器..."); InterceptorAction action = (InterceptorAction)actionInvocation.getAction(); String password = (action.getPassword()); //通过工具类将加密后的密码设置成参数 action.setPassword(MD5Code.MD5(password)); //放行,之后将进入action actionInvocation.invoke(); System.out.println(">>>执行完action进入拦截器..."); return null; }}
配置文件
struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <!-- namespace要用"/" action不用--> <package name="interceptorTest" extends="struts-default" namespace="/itest"> <interceptors> <interceptor name="registInterceptor" class="interceptor.RegistInterceptor"></interceptor> </interceptors> <action name="regist" class="action.InterceptorAction" method="regist"> <result name="success">/success.jsp</result> <!-- 要加上默认的拦截器,不然无法获取参数 --> <interceptor-ref name="defaultStack"/> <interceptor-ref name="registInterceptor"></interceptor-ref> </action> </package></struts>
运行结果
阅读全文
0 0
- Struts2知识点回顾(五)拦截器的工作流程以及如何实现
- Struts2知识点回顾(一)Struts工作流程
- 【struts2】拦截器的工作模拟实现
- Struts2的运行流程以及关键拦截器介绍
- struts2拦截器回顾
- struts2中拦截器的简单实现流程
- Struts2的工作流程以及原理
- 拦截器在Struts2中的作用以及Struts2工作机制
- Struts2学习---拦截器+struts的工作流程+struts声明式异常处理
- 模拟struts2的拦截器的流程
- Struts2 Interceptor 拦截器的使用流程
- Struts2的拦截器工作原理
- MVC以及Struts2工作流程
- Struts2的拦截器实现
- Struts2拦截器的实现
- Struts2中为什么要使用拦截器?拦截器的使用原理以及如何配置拦截器。
- struts2复习(五)拦截器总结
- Struts2(五)自定义拦截器
- JBPM工作流原理
- shell命令--tar
- Hadoop读取文件的方法,及其错误解决
- 本地连mysql报错 1045
- SpringMVC札集(04)——SpringMVC传递参数
- Struts2知识点回顾(五)拦截器的工作流程以及如何实现
- uva题目笔记——高精度
- ROS学习笔记(三)
- shell--ch5 理解shell
- Eclipse设置选中内容亮化显示
- OpenCV学习之摄像头录制存储视频
- my_shell.c
- 1159: 最大的两个数(指针专题)
- [WUA APIs]Using the Windows Update Agent API