拦截器
- 拦截器的概述
拦截器就是AOP(Aspect-Oriented Programming)的一种实现。(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。)
过滤器:过滤从客服端发送到服务器端请求的
拦截器:拦截对目标Action中的某些方法进行拦截
- 拦截器不能拦截JSP
- 拦截到Action中某些方法
- 拦截器和过滤器的区别
1)拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的
2)过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器
3)拦截器只能对Action请求起作用(Action中的方法),而过滤器可以对几乎所有的请求起作用(CSS JSP JS)
拦截器 采用 责任链 模式
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链
责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )
- Struts2的核心是拦截器,看一下Struts2的运行流程
编写拦截器类
需要继承Interceptor接口,实现intercept方法
或者继承MethodFilterInterceptor接口,实现doIntercept方法,来对某些方法不拦截
package com.daben.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 编写简单的拦截器
* @author Administrator
*/
public class DemoInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = 4360482836123790624L;
/**
* intercept用来进行拦截的
*/
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("Action方法执行之前...");
// 执行下一个拦截器
String result = invocation.invoke();
System.out.println("Action方法执行之后...");
return result;
}
}
配置拦截器
在strut.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.action.extension" value="action,,"></constant>
-->
<!-- 包结构 -->
<package name="default" namespace="/" extends="struts-default">
<!-- 配置自定义拦截器 -->
<interceptors>
<interceptor name="DemoInterceptor" class="com.daben.interceptor.DemoInterceptor">
<!--某一方法不拦截,拦截类需要继承MethodFilterInterceptor接口
<param name="excludeMethods">login</param>
-->
</interceptor>
</interceptors>
<!-- 配置action -->
<action name="hello" class="com.daben.action.HelloAction" method="sayHello">
<!-- 引用自定义拦截器 -->
<interceptor-ref name="DemoInterceptor"></interceptor-ref>
<!-- 只要是引用自己的拦截器,默认栈的拦截器就不执行了,必须要手动引入默认栈 -->
<interceptor-ref name="defaultStack"/>
<result name="success">/demo1/success.jsp</result>
</action>
</package>
</struts>
声明:
有一些博文是看的黑马程序员视频,然后跟着老师做的笔记
Spring是跟子路老师学的
特此感谢,写这些文章的目的是为了自己方便查阅