JavaEE--SSH--structs2-拦截器(Interceptor)的原理及使用

一.介绍:

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.测试运行:

服务器控制台:


浏览器页面:



觉得对你有帮助或者喜欢的可以点个赞哦~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stalin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值