struts2自定义拦截器

拦截器

  1. 拦截器的概述
  • 拦截器就是AOP(Aspect-Oriented Programming)的一种实现。(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。)

  • 过滤器:过滤从客服端发送到服务器端请求的

  • 拦截器:拦截对目标Action中的某些方法进行拦截

    • 拦截器不能拦截JSP
    • 拦截到Action中某些方法
  1. 拦截器和过滤器的区别
    1)拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的
    2)过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器
    3)拦截器只能对Action请求起作用(Action中的方法),而过滤器可以对几乎所有的请求起作用(CSS JSP JS)
  • 拦截器 采用 责任链 模式

    在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链
    责任链每一个节点,都可以继续调用下一个节点,也可以阻止流程继续执行

  • 在struts2 中可以定义很多个拦截器,将多个拦截器按照特定顺序 组成拦截器栈 (顺序调用 栈中的每一个拦截器 )

  1. 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是跟子路老师学的
特此感谢,写这些文章的目的是为了自己方便查阅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值