一.介绍:
struts2的拦截器(Interceptor)是是动态拦截Action调用的对象.它提供了一种机制可以在Action执行的前后加入执行的代码,也可以在action执行前进行阻止,是可以增强Action功能的一种方式.
当然在struts2中可以定义一组拦截器,他们在action执行前按照顺序执行,被称之为拦截器链.又称拦截器栈.
下面是struts2的运行结构图:
通过观察我们可以发现拦截器(Interceptor)一层一层把action包裹在最里面.这个结构类似于堆栈.具有先进后出的特性.在访问struts2核心内部时,拦截器在action方法前顺序执行,在执行完action方法后又倒序执行拦截器链.
二.拦截器和过滤器的区别:
过滤器是servlet规范的一部分.所有JavaWeb工程中都可以使用.
而拦截器是struts2框架的,只有使用了该框架才可以使用拦截器.
过滤器在url-pattern中配置了/* 可以对所有资源进行拦截.
而拦截器只能拦截action,只有在进入struts2核心内部之后才会起作用.
特别注意:
拦截器是AOP(面向切面编程)思想的具体体现形式之一:在不修改源码的基础上对方法进行动态增强.拦截器可以对action方法进行增强,具体的说就是把action中重复性的代码提取出来放到拦截器中,统一管理和调用.
三.自定义一个拦截器:
1.自定义一个编写一个java类,继承MethodFilterInterceptor
public class MyInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
//进入拦截器
System.out.println("MyInterceptor拦截器执行");
String value = arg0.invoke();
System.out.println("MyInterceptor拦截器放行");
return value;
}
}
2.在struts2.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>
<!-- 开启开发者模式 -->
<constant name="struts.devMode" value="true"></constant>
<package name="p1" extends="struts-default" abstract="true"></package>
<package name="p2" extends="p1" namespace="/user01">
<!-- 配置自定义拦截器 -->
<interceptors>
<interceptor name="myInterceptor" class="cn.asiainfo.intercepter.MyInterceptor"></interceptor>
</interceptors>
<action name="demo01" class="cn.asiainfo.action.ActionDemo"
method="demo01">
<!-- 为当前的Action配置一个拦截器 如果自己引入拦截器,系统默认的拦截器将不起作用,struts2 很多核心功能无法使用 -->
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/demo01.jsp</result>
</action>
</package>
</struts>
3.编写action
public class ActionDemo extends ActionSupport {
public String demo01() {
System.out.println("demo01.......");
return SUCCESS;
}
}
4.编写jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>demo01.jsp</h1>
</body>
</html>
5.测试运行:
服务器控制台:
浏览器页面:
觉得对你有帮助或者喜欢的可以点个赞哦~~