当前位置:
搜档网 › struts2拦截器配置详解
struts2拦截器配置详解
Struts2拦截器详细配置过程
1:所有拦截器的超级接口Interceptor,拦截器去实现这个接口; Interceptor它其中有三个方法
(init(),destroy(),interceptor()):Init()方法:在服务器起动的时候加载一次,并且只加载一次;
Destroy()方法:当拦截器销毁时执行的方法;
Interceptor()方法:其中里边有一个参数invocation
public String intercept(ActionInvocation invocation)throws xception
{
System.out.println("interceptor!!");
String result=invocation.invoke();
return result;
}Invocation.invoke()是如果只有一个拦截器执行完这个方法后,会返回给视图,如果有多
个拦截器,它顺序的执行完所有的拦截器,才返回给视图.
2:可以在系统初始化中给拦截器指定默认的参数(也包括了定义拦截器方式)如下:在拦截器类中把hello当做属性set/get方式注入到拦截器类中;
class="com.zzz.struts2.interceptor.MyInterceptor
">
张钊钊
ref>
也可以在使用拦截器的时候给它设置参数:
就是在一个action的reslut下面配置上如下:
class="com.zzz.struts2.action.RegisterAction
">
/success.jsp
/register.jsp
welcome
2.拦截器,拦截器栈和默认的拦截器之间的关系
1:拦截器和拦截器栈是一个级别的,也就是说一个拦截器栈中包括许多拦截器,一个拦截器栈中还可以包括许多拦截器栈,配置如下方式:
class="com.zzz.struts2.interceptor.MyInterceptor
">
张钊钊
ref>
拦截器的使用:1.先定义;2.在引用使用;
class="com.zzz.struts2.interceptor.MyInterceptor
">
2:struts2中有一个系统默认的拦截器栈是defaultStack,如果你手动引用自己的拦截器,系统默认的拦截器栈将不起作用;这样必需手动引入系统的拦截器栈
如果想改变系统默认的拦截器栈,可以这样配置:
其中myStack是自己定义的拦截器栈名字;
如果拦截器栈中有多个拦截器,在执行action之前的顺序跟配置拦截器的顺序一致,而在action之后执行的顺序是相反的;
3:抽象的拦截器类AbstractInterceptor
1:Interceptor这个超级拦截器接口,有三方法需要实现,但是如果不想使用init();
destroy())方法,可以去继承这个抽象拦截器类;
和destroy(
它的使用跟上边的没有什么区别;
4:方法过滤拦截器MethodFilterInterceptor
1:上边的拦截器都要是针对整个action的,如果针对某个方法进行拦截可以去继承这个类;它的使用跟上边的使用方法差不多,只是需要要配置它对那个方法进行拦截,方法过滤拦截器最好不要配置到自己设置默认的拦截器栈里边,自己手动配置.
interceptor-ref name="myInterceptor3">
execute
execute
其中includeMethods,excludeMethods是固定写法:includeMethods包含拦截那些
方法,多个方法需要用”,”隔开;excludeMehtods是排除拦截的那些方法;
5:
1:它的鉴听点在拦截器执行完某个action方法后,在渲染视图之前做一些事情;让某个类去实现这个接口;然后
向需要它的拦截器中注册进去如下代码:
publicclass MyInterceptor3extends MethodFilterInterceptor{ privatestaticfinallong g serialVersionUID=3756655410194005443L;
privatestaticfinallon
@Override
protected String doIntercept(ActionInvocation invocation) throws
Exception{
//把鉴听器注册到拦截中去;
invocation.addPreResultListener(new
MyListener());System.out.println("my
Interceptor3");
String result=arg0.invoke();
System.out.println("my interceptor3finshed!");
return result;
}
}
SCME_STRUTS2试卷
--------------------------------------装--------------------------------------订------------------------------线---------------------------------------- **学院课程考试试卷 课程名称:《使用Struts2开发基于MVC设计模式的企业级应用》(A)卷 年级:班级: 姓名:_______________ 学号:_________________ 考试(考查) 闭卷 选择题(每题2分,共计100分) 1.在控制器类中一般需要添加相应属性的( A )和(C )。(选两项) A.setter方法 B.as方法 C.getter方法 D.is方法 2.业务控制器需要在( B )配置文件中进行配置 A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 3.不属于Struts 2表单标签库的是( D )。 A. B. C. D.
struts2拦截器配置详解
Struts2拦截器详细配置过程 1:所有拦截器的超级接口Interceptor,拦截器去实现这个接口; Interceptor它其中有三个方法 (init(),destroy(),interceptor()):Init()方法:在服务器起动的时候加载一次,并且只加载一次; Destroy()方法:当拦截器销毁时执行的方法; Interceptor()方法:其中里边有一个参数invocation public String intercept(ActionInvocation invocation)throws xception { System.out.println("interceptor!!"); String result=invocation.invoke(); return result; }Invocation.invoke()是如果只有一个拦截器执行完这个方法后,会返回给视图,如果有多 个拦截器,它顺序的执行完所有的拦截器,才返回给视图. 2:可以在系统初始化中给拦截器指定默认的参数(也包括了定义拦截器方式)如下:在拦截器类中把hello当做属性set/get方式注入到拦截器类中;
张钊钊 也可以在使用拦截器的时候给它设置参数: 就是在一个action的reslut下面配置上如下: struts2教程(完全版)
Yaio 4 一、准备工作及实例 4 1.解压struts- 2.1.6-all.zip 4 2.六个基本包 4 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 5 (5)其它配置文件 5 4.让MyEclipse提示xml信息 5 5.如何使用alt+/提示 5 6.实例 5 7.开启struts2自带的开发模式常量 7 8.vo传参模式 8 9.ModerDriven传参模式(不建议采用) 8 10.为什么要使用struts2代替struts1.x 9
二、struts.xml配置及例程 9 1.配置文件的优先级 9 2.配置形式 9 3.package配置相关 10 4.分工合作include:指定多个配置文件 12 5.tomcat认证访问 12 6.初识拦截器 13 7.Action中的method属性 15 8.使用ForwardAction实现页面屏蔽。 17 8.使用default-Action配置统一访问 17 小结Action 18 9.使用通配符 18 10.使用0配置:ZERO Annotation 19 11.Result配置详解 19 12.异常处理 24 三、在Action获取Scope对象 25 方式一、与Servlet解耦合的非IOC方式 25
方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28 四、OGNL与ValueStack(VS) 29 1.值栈入门 29 2.OGNL入门 31 3.普通方法访问 31 4.静态方法访问 31 5.默认类Math的访问 32 6.调用普通类的构造方法 32 7.集合对象初步 32 8.集合对象进阶 33 9.N语法top语法 34 10.获取Stack Context中的信息 35 11.总结$ # %的区别 35 12.总结OGNL[重点] 35 五、拦截器 36
Struts2中 struts.xml的Action配置详解
Struts2中struts.xml的Action配置详解 使用package可以将逻辑上相关的一组Action,Result,Interceptor等组件分为一组,Package 有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。 由于struts.xml文件是自上而下解析的,所以被继承的package要放在继承package的前边。Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。使用name space可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Men u和Help action,但是事项方式各有不同。Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。 “/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个pa ckage中查找。 “”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。 例如,有如下配置: CODE: greeting.jsp bar1.jsp
Struts2中的拦截器与过滤器学习
拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法,比如动态代理就是拦截器的简单实现,过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如 过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些 非法字符。 拦截器与过滤器的区别: 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能 5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 过滤器 也就是写一个自己的类,让这个类实现于Filter这个接口,这个接口里有三个方法。 init(),doFilter(),destroy();主要是对doFilter()进行操作,你可以 在这个方法里写你想进行的操作. 写完这些之后,就是在web.xml里的配置了 myFilter 包名+实现Filter接口的类 myFilter /* 在里面设置了/*之后,也就是说在进行每一个操作时都会自动去
STRUTS2零配置
简述STRUTS2 Convention零配置 从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行配置,甚至不需要使用Annotation进行配置,而是由struts2根据约定自动配置。 如何使用Convention 1. 将struts-Convention-plugin- 2.1.6.jar文件复制到WEB-INF/lib路径下 2. 对于Convention插件而言,它会自动搜索位于action,actions,struts,struts2包下的所 有java类,Convention插件会把如下两种java类当成Action处理: 1)所有实现了com.opensymphony.xwork2.Action的java类 2)所有类名以Action结尾的java类 3. Convention插件还允许设置如下三个常量: 1) struts.Convention.exclude.packges:指定不扫描哪些包下的java类,位于这些包结构下的java类将不会自动映射成Action; 2) struts.convention.package.locators:Convention插件使用该常量指定的包作为搜寻Action 的根包。对于actions.fore.LoginAction类,按约定原本应映射到/fore/login;如果将该常量 设为fore,则该Action将会映射到/login 3) struts.convention.action.packages:Convention插件以该常量指定包作为根包来搜索Action 类。Convention插件除了扫描action,actions,struts,struts2四个包的类以外,还会扫描该常量指定的一个或多个包,Convention会视图从中发现Action类。 注意:struts.convention.package.locators和struts.convention.action.packages两个常量的作用比较微妙,开发者在利用这两个常量时务必小心。 如:下面Action所在包被映射的命名空间如下: com.fun.actions.LoginAction 映射到 / com.fun.actions.myoffice.CarInfoAction 映射到 /myoffice com.fun.struts.myoffice.EntINfoAction 映射到 /myofiice 4. 映射Action的name时,遵循如下两步规则: 1)如果该Action类名包含Action后缀,将该Action类名的Action后缀去掉。否则不做任何处理。 2)将Action类名的驼峰写法(每个单词首字母大写、其他字母小写的写法)转成中画线写法(所有字母小写,单词与单词之间以中画线隔开) 如:LoginAction映射的Acion的name属性为login,GetBooks映射的Action的name的属性为get-books,AddEmployeeAction映射的Action的name属性为add-employee 5. 默认情况下。Convention总会到WEB应用的WEB-INF/content路径下定位物理资源,定位资源 的约定是:actionRUL+resultCODE+suffix。当某个逻辑视图找不到对应的视图资源时,Convention 会自动视图使用ActionURL+suffix作为物理视图资源。 如:actions.fore.LoginAction 返回success字符串时,Convention优先考虑使用 WEB-INF/content/fore目录下的login-success.jsp作为视图资源。如果找不到该文件,login.jsp也可作为对应的视图资源。如果返回input字符串,Convention会将WEB-INF/content/fore里面查找 login-input.jsp
Struts2的拦截器总结
Struts2 中的拦截器和servelt 中的过滤器是非常的相似的。如果学过过滤器的话,肯定能够感觉的到,尽管有些微的不同。可是struts2的拦截器到底如何使用呢,为什么会有这些配置呢?接下来一一来看。 过滤器和拦截器是非常相似的,过滤器public interface Filter 接口里面有三个方法: ?init(FilterConfig filterConfig), ?destroy(), ?doFilter(ServletRequest request, ServletResponse response, FilterChain chain), 这里面的doFilter() 方法是最重要的,在struts2 中String intercept(ActionInvocation invocation)就相当于此方法。 如何完成一个拦截器呢?在struts2 中要实现一个接口这个接口是什么呢?在哪呢?,是否在哪听说过?是webwork 是我们以前听的最多的关于拦截器的框架,struts2 用了其中一个核心的东西,这个东西在是什么呢?是xwork 。恩,有了它才可以拦截,好了我们在哪找呢?在com.opensymphony.xwork2.interceptor 中找,里面有个Interceptor 这是个接口,里面也有三个方法,有init,destroy 和intercept 三个方法,而在struts2 里面的所有的拦截器都继承这个接口!
为了看这些是怎么实现的,加入了一些打印! 将上面的配置整合起来就是:
这样就可以让Aciton 被拦截了,到此,好了,可以运行程序了: 输出结果是:启动服务器init 被打出 运行后提交action 输出intercept 这个就是初步的一个拦截器。 ======= 在此可能出现一个问题,是什么呢?如果就我们做的注册程序而言,可以想一下,有数据转换,有数据校验,以前当转换和校验不符合的时候,点击提交,会提示相关错误信息,然而,此时当转换和校验依然不符合要求时,点击提交,却不会提示错误信息,为什么呢? ==== 当然你答对了,这些功能都包含在struts2的默认拦截器中,这里没执行是被添加的拦截器myinterceptor取代了。 为了查明原因可以查看一下struts2-core-2.xx.jar中的struts-default.xml 这个文件 这里定义的很多的东西,和我们的程序相关的非常紧密 首先这里有个 ... 和struts.xml 里面的 ...有什么关系呢?很明显可以猜到struts.xml 继承的就是struts-default.xml中的包struts-default。 这个里面还看到标签,这个是定义拦截器栈的,仔细看可以发现里面有个validation 如此可以猜想,validation 也是定义的一个拦截器,猜想当注册信息出错后没有提示信息呢?肯定是相关的验证功能没有执行,以前的执行了,现在没执行,
strut2自定义拦截器的步骤
理解拦截器 1.1.什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。 谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。 1.2.拦截器的实现原理: 大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。如下图: 2.拦截器的配置 Struts 2已经为您提供丰富多样的,功能齐全的拦截器实现。大家可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与拦截器链的配置。 Struts2(XWork)提供的拦截器的功能说明:
3.使用拦截器 一旦定义了拦截器和拦截器栈后,就可以使用这个拦截器或拦截器栈来拦截 栈将会失去作用。为了继续使用默认拦截器,所以上面配置文件中手动引入了默认拦截器。 4.自定义拦截器 作为“框架(framework)”,可扩展性是不可或缺的。虽然,Struts 2为我们提供如此丰富的拦截器实现,但是这并不意味我们失去创建自定义拦截器的能力,恰恰相反,在Struts 2自定义拦截器是相当容易的一件事。 4.1.实现拦截器类: 所有的Struts 2的拦截器都直接或间接实现接口 com.opensymphony.xwork2.interceptor.Interceptor。该接口提供了三个方法: 1)void init(); 在该拦截器被初始化之后,在该拦截器执行拦截之前, 系统回调该方法。对于每个拦截器而言,此方法只执行一次。 2)void destroy();该方法跟init()方法对应。在拦截器实例被销毁之前, 系统将回调该方法。
struts2拦截器
Struts2 中的拦截器和 servelt 中的过滤器是非常的相似的。如果学过过滤器的话,肯定能够感觉的到,尽管有些微的不同。可是struts2的拦截器到底如何使用呢,为什么会有这些配置呢?接下来一一来看。 过滤器和拦截器是非常相似的,过滤器 public interface Filter 接口里面有三个方法: ?init(FilterConfig filterConfig), ?destroy(), ?doFilter(ServletRequest request, ServletResponse response, FilterChain chain), 这里面的doFilter() 方法是最重要的,在struts2 中String intercept(ActionInvocation invocation)就相当于此方法。 如何完成一个拦截器呢?在 struts2 中要实现一个接口这个接口是什么呢?在哪呢?,是否在哪听说过?是 webwork 是我们以前听的最多的关于拦截器的框架, struts2 用了其中一个核心的东西,这个东西在是什么呢?是 xwork 。恩,有了它才可以拦截,好了我们在哪找呢?在com.opensymphony.xwork2.interceptor 中找,里面有个 Interceptor 这是个接口,里面也有三个方法,有 init, destroy 和 intercept 三个方法,而在struts2 里面的所有的拦截器都继承这个接口! 实现如下 1.Java代码package com.interceptor; 2.import com.opensymphony.xwork2.ActionInvocation; 3.import com.opensymphony.xwork2.interceptor.Interceptor; 4. 5.public class MyInterceptor implements Interceptor{ 6. private String hello;//一定要写,后面会用上 7. get和set方法 8. 9. public void init() { 10. System.out.println("init"); 11. } 12. 13. public String intercept(ActionInvocation invoker) throws Ex ception { 14. System.out.println("intercept"); 15. 16. String result=invoker.invoke(); 17. 18. return result; 19. }
ssh(struts2.2.1+ hibernate3.6+spring3.0.5)整合配置
手工搭建最新版本的SSH(struts2.2.1+ hibernate3.6+spring3.0.5)组合 一、为SSH做好准备 1.struts2- 2.2.1-all.zip 2.hibernate-distribution- 3.6.0.Final-dist.zip 3.spring-framework-3.0.5.RELEASE.zip 4.spring-framework-2. 5.6-with-dependencies.zip 5.slf4j-1. 6.1.zip apache-tomcat-6.0.29.zip mysql-connector-java-5.1.13-bin.jar mysql-essential-5.1.53-win32.msi 工具用eclipse或者myeclipse 文件都行 二、搭建开发环境打开MyEclipse,新建一个web project (选择Java EE5.0)
三、需要的jar包 1、hibernate-3.6.0 配置 Java代码 hibernate-distribution-3.6.0.Final-dist.zip中需要如下jar hibernate3.jar lib/required/antlr-2.7.6.jar lib/required/commons-collections-3.1.jar lib/required/dom4j-1.6.1.jar lib/required/javassist-3.12.0.GA.jar lib/required/jta-1.1.jar lib/required/slf4j-api-1.6.1.jar lib/jpa/hibernate-jpa-2.0-api-1.0.0.Final.jar //新版本需要 jar slf4j-1.6.1.zip中需要如下jar slf4j-nop-1.6.1.jar mysql-connector-java-5.1.13-bin.jar //mysql 的驱动包 注意:新版本已经和Annotation做了组合要用Annotation不需要另外加入jar。 在测试的时候也不需要第一种写法: Java代码 1.SessionFactory sf = new AnnotationConfiguration().configure().b uildSessionFactory(); //现在已经过时
struts2 spring3 mybatis3拦截器分页技术
struts2 spring3.2.4 mybatis-3.2.3 通用分页(不同数据库)拦截器 mybatis没有根据数据库方言进行分页封装,但是提供了拦截器,我们可以在拦截其中获取数据库方言(数据库方言通过配置文件获取)和查询sql,根据数据库方言进行翻页分装,在拦截其中有两种实现方式: 1. 拦截器中计算总数,通过jdbc的方式,再封装翻页sql 2.计算总数在应用层计算,拦截器中只通过数据库方言进行查询sql的封装本人认为第一种方式可能会影响到性能,下面是通过第二种方法实现分页 1、拦截器类 [java]view plaincopyprint? 1.package com.zhou.bean; 2. 3.import https://www.sodocs.net/doc/144938081.html,ng.reflect.Field; 4.import java.sql.Connection; 5.import java.sql.PreparedStatement; 6.import java.sql.ResultSet; 7.import java.sql.SQLException; 8.import java.util.List; 9.import java.util.Properties; 10. 11.import org.apache.ibatis.executor.parameter.ParameterHandler; 12.import org.apache.ibatis.executor.statement.RoutingStatementHandler; 13.import org.apache.ibatis.executor.statement.StatementHandler; 14.import org.apache.ibatis.mapping.BoundSql; 15.import org.apache.ibatis.mapping.MappedStatement; 16.import org.apache.ibatis.mapping.ParameterMapping; 17.import org.apache.ibatis.plugin.Interceptor; 18.import org.apache.ibatis.plugin.Intercepts; 19.import org.apache.ibatis.plugin.Invocation; 20.import org.apache.ibatis.plugin.Plugin; 21.import org.apache.ibatis.plugin.Signature;