Struts2学习——(十一)Struts2拦截器
2015-12-15 10:47
344 查看
Struts2拦截器和servlet过滤器很相似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器。在执行完所有引用的拦截器的intercept方法之后,会执行Action的execute方法。
一般来说,struts2自带的拦截器足够完成我们日常的工作,一般来说不需要创建自己的拦截器。
首先举一个创建自身拦截器的例子:
①写拦截器,继承AbstractInterceptor类或者继承Interceptor接口:
②配置struts.xml:
<interceptor>标签定义了拦截器,<interceptor-ref>定义了拦截器的引用。需要注意的是,在定义了自己的拦截器之后,通常需要加上defaultStack中
默认拦截器的引用。拦截器一般都是不断累加,如果不加上默认拦截器的话会被省略掉,而产生很多别的问题。在没有定义自定义拦截器时,系统会自
动使用defaultStack里面定义好的拦截器,而定义了自定义拦截器而不加上defaultStack的话会有很多不便。
在每个拦截器中,都会执行invocation.invoke()方法,会自动转向执行下一个interceptor的intercept方法,当没有后面的拦截器时,会自动转向执行
action,随后在逆向执行完原先的拦截器中invoke方法之后的函数内容。
Struts2中内建的拦截器在帮助文档中都有介绍,需要时去读帮助文档即可。
一般来说,struts2自带的拦截器足够完成我们日常的工作,一般来说不需要创建自己的拦截器。
首先举一个创建自身拦截器的例子:
①写拦截器,继承AbstractInterceptor类或者继承Interceptor接口:
package cn.wqy.interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class MyFirstInterceptor implements Interceptor { /** * */ private static final long serialVersionUID = 1L; @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init() { // TODO Auto-generated method stub } @Override public String intercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub long start = System.currentTimeMillis(); String s = arg0.invoke(); long end = System.currentTimeMillis(); System.out.println("Time :" + (end - start)); return s; } }invoke的返回值通知了struts2下一步应该执行什么。
②配置struts.xml:
<package name="struts_demo" namespace="/demo" extends="struts-default"> <interceptors> <interceptor name="timeInterceptor" class="cn.wqy.interceptor.MyFirstInterceptor"></interceptor> </interceptors> <action name="login" class="cn.wqy.LoginAction"> <result name="success">/loginsuc.jsp</result> <result name="error">/loginfal.jsp</result> <interceptor-ref name="timeInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- <result name="invalid.token">/index.jsp</result> <interceptor-ref name="token"></interceptor-ref> --> </action> </package>
<interceptor>标签定义了拦截器,<interceptor-ref>定义了拦截器的引用。需要注意的是,在定义了自己的拦截器之后,通常需要加上defaultStack中
默认拦截器的引用。拦截器一般都是不断累加,如果不加上默认拦截器的话会被省略掉,而产生很多别的问题。在没有定义自定义拦截器时,系统会自
动使用defaultStack里面定义好的拦截器,而定义了自定义拦截器而不加上defaultStack的话会有很多不便。
在每个拦截器中,都会执行invocation.invoke()方法,会自动转向执行下一个interceptor的intercept方法,当没有后面的拦截器时,会自动转向执行
action,随后在逆向执行完原先的拦截器中invoke方法之后的函数内容。
Struts2中内建的拦截器在帮助文档中都有介绍,需要时去读帮助文档即可。
相关文章推荐
- Java中反射机制案例分析
- JAXB注解小示例
- Java中类HashSet<E>和类LinkedHashSet<E>的区别
- 通过Spring Session实现新一代的Session管理
- java 调试
- Ivy安装及编译hadoop2x-eclipse-plugin
- 对多线程java内存模型JMM
- Java并发编程:线程池的使用
- java synchronized详解
- Spring MVC入门(1)――非注解方式
- 在CMD下用java命令出现“找不到或无法加载主类”问题
- 最简单的cxf restful webservice Demo(包括与spring集成)
- 如何在Spring容器中加载自定义的配置文件
- 【转】eclipse luna 无法安装veloeclipse问题
- MyEclipse Hibernate环境搭
- Spring MVC传递URL到后台参数为空
- Assert和Enumeration的用法
- Java 获取用户请求ip
- JAVA+Selenium 开发环境搭建
- jsp+servlet+javaBean实现用户留言