Struts2拦截器
来源:互联网 发布:足球教练考试软件 编辑:程序博客网 时间:2024/05/17 03:56
什么是拦截器
拦截器(Interceptor)是Struts 2的一个强有力的工具,有许多功能都是构建于它之上,如国际化(前两篇博客介绍过)、转换器,校验等。
拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
说到拦截器有一个东西不能落下——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
实现原理
Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。
Struts 2提供了丰富多样的,功能齐全的拦截器实现。大家可以到struts2-all-2.0.1.jar或struts2-core-2.0.1.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置。
相关说明如下:
拦截器
名字
说明
Alias Interceptor
alias
在不同请求之间将请求参数在不同名字件转换,请求内容不变
Chaining Interceptor
chain
让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用。
Checkbox Interceptor
checkbox
添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。
Cookies Interceptor
cookies
使用配置的name,value来是指cookies
Conversion Error Interceptor
conversionError
将错误从ActionContext中添加到Action的属性字段中。
Create Session Interceptor
createSession
自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。
Debugging Interceptor
debugging
提供不同的调试用的页面来展现内部的数据状况。
Execute and Wait Interceptor
execAndWait
在后台执行Action,同时将用户带到一个中间的等待页面。
Exception Interceptor
exception
将异常定位到一个画面
File Upload Interceptor
fileUpload
提供文件上传功能
I18n Interceptor
i18n
记录用户选择的locale
Logger Interceptor
logger
输出Action的名字
Message Store Interceptor
store
存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。
Model Driven Interceptor
model-driven
如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。
Scoped Model Driven
scoped-model-driven
如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。
Parameters Interceptor
params
将请求中的参数设置到Action中去。
Prepare Interceptor
prepare
如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。
Scope Interceptor
scope
将Action状态存入session和application的简单方法。
Servlet Config Interceptor
servletConfig
提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。
Static Parameters Interceptor
staticParams
从struts.xml文件中将中的中的内容设置到对应的Action中。
Roles Interceptor
roles
确定用户是否具有JAAS指定的Role,否则不予执行。
Timer Interceptor
timer
输出Action执行的时间
Token Interceptor
token
通过Token来避免双击
Token Session Interceptor
tokenSession
和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中
Validation Interceptor
validation
使用action-validation.xml文件中定义的内容校验提交的数据。
Workflow Interceptor
workflow
调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面
Parameter Filter Interceptor
N/A
从参数列表中删除不必要的参数
Profiling Interceptor
profiling
通过参数激活profile
- <package name="MyInterceptor" extends="struts-default" namespace="/">
- <interceptors>
- <!-- 配置拦截器 -->
- <interceptor name="拦截器名" class="拦截器实现类完整路径"/>
- <!-- 配置拦截器栈 -->
- <interceptor-stack name="拦截器栈名">
- <interceptor-ref name="拦截器一"/>
- <interceptor-ref name="拦截器二"/>
- ...................................
- </interceptor-stack>
- </interceptors>
- </package>
- <action name="login" class="com.action.LoginAction">
- <result name="success">/success.jsp</result>
- <result name="error">/error.jsp</result>
- <!-- 引用拦截器,一般配置在result后面 -->
- <interceptor-ref name="拦截器名或拦截器栈名"/>
- <!-- 引用Struts默认拦截器 -->
- <interceptor-ref name="defaultStack"/>
- </action>
- package com.interceptor;
- import java.util.Map;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.Interceptor;
- import com.sun.org.apache.xml.internal.security.keys.content.RetrievalMethod;
- public class MyInterceptor implements Interceptor {
- @Override
- public void destroy() {
- System.out.println("---------destroy()---------");
- }
- @Override
- public void init() {
- System.out.println("---------init()---------");
- }
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
- System.out.println("---------intercept()---------");
- Map session = invocation.getInvocationContext().getSession();
- if (session.get("username") != null) {
- return invocation.invoke();
- } else {
- return "login";
- }
- }
- }
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.action.extension" value=","></constant>
- <package name="testLogin" namespace="/" extends="struts-default" >
- <interceptors>
- <interceptor name="MyInterceptor" class="com.interceptor.MyInterceptor"></interceptor>
- <interceptor-stack name="defaultInterceptorStack">
- <interceptor-ref name="MyInterceptor"></interceptor-ref>
- <interceptor-ref name="defaultStack"></interceptor-ref>
- </interceptor-stack>
- </interceptors>
- <!--配置默认拦截器,所有该包内的action如果没有单独配置拦截器,则默认执行默认拦截器-->
- <default-interceptor-ref name="defaultInterceptorStack"></default-interceptor-ref>
- <action name="login" class="com.action.LoginAction">
- <result name="success" type="redirect">/success.jsp</result>
- <result name="error" type="redirect">/error.jsp</result>
- <result name="login">login.jsp</result>
- </action>
- </package>
- </struts>
- 【Struts2】Struts2中拦截器
- struts2拦截器
- Struts2拦截器
- struts2.0拦截器
- struts2.0 拦截器
- struts2拦截器学习
- struts2 拦截器
- Struts2拦截器(Interceptor)
- struts2.0拦截器
- 用上struts2拦截器
- struts2拦截器简介
- Struts2:拦截器概述
- Struts2拦截器(Interceptor)
- struts2 拦截器
- 关于struts2拦截器
- Struts2的拦截器
- struts2拦截器
- Struts2拦截器总结
- <PY><core python programming笔记>C12 模块
- 百度之星资格赛,hdu 4825 XOR SUM
- SSRS的一些格式问题
- ios ARC工程中添加非ARC文件
- JDK自带工具-jstat详解
- Struts2拦截器
- Powerdesigner 学习笔记
- Java系统命令调用、序列化、JDO
- Sybase数据库维护技巧总结
- 和图片有关的几个旋转属性
- Struts2上传文件
- TabHost的使用方法
- Java修饰符
- linux 下编译c++