首页写一个自定义的拦截器类MyInterceptor,实现Interceptor接口(或者继承自AbstractInterceptor)的类。
Interceptor接口声明了三个方法:
public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}
nit方法在拦截器类被创建之后,在对Action镜像拦截之前调用,相当于一个post-constructor方法,
使用这个方法可以给拦截器类做必要的初始话操作。
Destroy方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。
Intercept是拦截器的主要拦截方法,如果需要调用后续的Action或者拦截器,只需要在该方法中调用
invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。
如果不需要调用后续的方法,则返回一个String类型的对象即可,例如Action.SUCCESS。
另外AbstractInterceptor提供了一个简单的Interceptor的实现,这个实现为:
public abstract class AbstractInterceptor implements Interceptor {
public void init() {
}
public void destroy() {
}
public abstract String intercept(ActionInvocation invocation) throws Exception;
}
在不需要编写init和destroy方法的时候,只需要从AbstractInterceptor继承而来,实现intercept方法即可。
我们尝试编写一个拦截器,该拦截器,代码为:
package com.sunny.action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class MyInterceptor implements Interceptor {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void init() {
System.out.println("init");
}
@Override
public String intercept(ActionInvocation invoker) throws Exception {
System.out.println("intercept");
String result = invoker.invoke();
return result;
}
@Override
public void destroy() {
System.out.println("destory");
}
}
然后定义在struts.xml中注册拦截器
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name="custom-default" extends="struts-default">
<interceptors>
<interceptor name="annotationInterceptor" class="com.sunny.action.MyInterceptor" />
<interceptor-stack name="annotatedStack">
<interceptor-ref name="annotationInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 设置全局 全局默认的拦截器栈-->
<default-interceptor-ref name="annotatedStack"></default-interceptor-ref>
</package>
</struts>
最后在Action类中通过注解引用
package com.sunny.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ExceptionMapping;
import org.apache.struts2.convention.annotation.ExceptionMappings;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
import com.sunny.entity.Users;
@ParentPackage("custom-default")
@Namespace("/login")
// 公共异常捕获
@ExceptionMappings({ @ExceptionMapping(exception = "java.lang.Exception", result = "exception") })
// 拦截器
@InterceptorRefs({ @InterceptorRef("annotatedStack") })
public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private Users users;
public Users getUsers() {
return users;
}
public void setUsers(Users users) {
this.users = users;
}
@Action(value = "add", results = {
@Result(name = "success", location = "/a.jsp"),
@Result(name = "error", location = "/index.jsp") })
@Override
public String execute() throws Exception {
if (users.getUsername().equals("sunny")
&& users.getPassword().equals("sunny")) {
return "success";
} else {
return "error";
}
}
}
完成后启动服务就可以看到自定义的拦截器输出init
在浏览器中输入:http://localhost:8080/Struts2/login/add.action调用execute()后会看到输出intercept。之后停止服务会看到输出destory。
一个简单的拦截器已经配置完成。
分享到:
相关推荐
该例子为struts2注解与拦截器demo,利用myEclipse8.5开发,导入刚才后,自动加载所需struts2的jar包,可以直接运行,是初学struts2注解、拦截器很好的例子,保证10分钟学会2种技术,愿意分享给大家。
struts2注解配置Action及拦截器几种不同方式写法对应的路径指向.docx
使用struts拦截器+注解实现日志审计功能 详见博客: http://blog.csdn.net/lk_blog/article/details/10248395
NULL 博文链接:https://johnson2132.iteye.com/blog/721069
struts 拦截器实现权限拦截,例子简单易懂,有详细的注释。
NULL 博文链接:https://takeme.iteye.com/blog/1651417
Struts2在com.opensymphony.xwork2.interceptor.annotations包中定义了3个拦截器注解类型。
NULL 博文链接:https://zhouxianglh.iteye.com/blog/523783
struts2拦截器原理模拟,示例里面做了大量注释,对所有可能让你产生疑惑的地方都详细描述了原因。
struts2+spring4+mybatis3,登录jquery ajax,struts拦截器,springAOP的例子。带部分注释。
4.3 研究内建的Struts 2拦截器 67 4.3.1 工具拦截器 67 4.3.2 数据转移拦截器 67 4.3.3 工作流拦截器 69 4.3.4 其他拦截器 72 4.3.5 内建的拦截器栈 73 4.4 声明拦截器 74 4.4.1 声明独立的拦截器和拦截器栈 74 ...
自定义拦截器的实现以及拦截器的详细配置,配置文件里面有特别详细的注释,希望对刚接触拦截器的同学有帮助
Struts2提供了许多方法来创建Action类,并通过struts.xml中或通过注释进行配置。我们可以创建自己的拦截器实现常见任务。 Struts2中自带了很多的标签,并使用OGNL表达式语言。我们可以创造我们自己的类型转换器来...
一、准备工作及实例 3 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 ... 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图来看: 60
struts2文件上传,配置了拦截器,只能穿txt,小于10M, 取消限制可以去struts.xml修改,注释详细
本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...
· 引入拦截器: Struts 2为拦截器(interceptor)提供了全面支持。拦截器可在Action类执行前后加以执行。拦截器经配置后,可以把工作流程或者验证等常见功能作用到请求上。所有请求通过一组拦截器传送,之后再发送到...