《Java从入门到放弃》入门篇:Struts2的拦截器基本语法

拦截器,顾名思义,是拦截不是打劫!!!(图片来自于网络,如果有版权或道德问题,请通知本博主删除,谢谢)

是贼个样子滴,而不是这样滴。

闲扯完了,回到正题,struts2中的拦截器到底是什么东东呢?我们来百度一下···

呃,错了,我们来回顾一下,百度怎么有是我们这种熟练工做的事情呢!!!

记住,是回顾,回顾,回顾!!!

咳~,请打开我的第二篇博客,看到那张struts2的原理图了没,在Action上下有很多的

interceptor,这个就是拦截器,struts2默认配置了很多拦截器,具体的内容,大家可以打开struts2-core-2.2.1.jar中的struts-default.xml文件,看看里面的配置信息。

像前面我们的Action中定义的属性如何得到页面传递的数据,就是拦截器的作用。

还有上一篇写的数据校验方法validate为什么能够自动调用,也是拦截器的作用。

一不小心,又聊了五毛钱的废话,好吧,进入正题!!!

接下来我们就聊聊如果自定义拦截器。至于是劫财,还是劫色,那就看各位看官的意思了···

(再次声明,图片来源于网络,有问题请联系博主)

struts2中的自定义拦截器有两种,一种劫财,一种劫色!!!

啊呸,是一种拦截类(类中的所有方法都拦截),一种拦截方法!!!

  1. AbstractInterceptor(类拦截器)
  2. MethodFilterInterceptor(方法拦截器)

具体用法如下:

一、AbstractInterceptor(类拦截器)

1.1)自定义类MyInterceptor继承AbstractInterceptor,并实现对应方法

public class MyInterceptor extends AbstractInterceptor {
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        String result;
	System.out.println("Action执行之前进行拦截!");
	result = invocation.invoke();//表示我黑风岭劫完了,你可以去下一站了
	System.out.println("截完了,继续吧...");
	return result;
    }
}

1.2)修改struts.xml,添加拦截器,并使用该拦截器拦截对应的Action

<package name="default" namespace="/" extends="struts-default">
    <interceptors>
        <interceptor name="myInterceptor" class="com.pxy.interceptor.MyInterceptor"></interceptor>
    </interceptors>
    <!-- 通配符方式调用 -->
    <action name="smng_*" class="com.pxy.action.Hello" method="{1}">
        <result name="{1}">/WEB-INF/jsp/singer_{1}.jsp</result>
	<result name="input">/WEB-INF/jsp/singer_{1}.jsp</result>
	<!-- 绑定拦截器 -->
	<interceptor-ref name="myInterceptor"></interceptor-ref>
    </action>
</package>

1.3)访问http://localhost:8888/strutsDemo/smng_xxx.action查看结果。(这儿的xxx替换成CURD方法)

二、MethodFilterInterceptor(方法拦截器)

现在我们只拦截deletet和select方法。实现步骤如下:

2.1)修改自定义类MyInterceptor,让其继承MethodFilterInterceptor类,并实现对应方法

public class MyInterceptor extends MethodFilterInterceptor {
    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
	String result;
	System.out.println("Action执行之前进行拦截!");
	result = invocation.invoke();
	System.out.println("截完了,继续吧...");
	return result;
    }
}

2.2)修改struts.xml文件,并配置拦截器要拦截的方法

<!-- 通配符方式调用 -->
    <action name="smng_*" class="com.pxy.action.Hello" method="{1}">
	<result name="{1}">/WEB-INF/jsp/singer_{1}.jsp</result>
	<result name="input">/WEB-INF/jsp/singer_{1}.jsp</result>
	<interceptor-ref name="myInterceptor">
		<param name="includeMehtods">delete,select</param>
	</interceptor-ref>
    </action>

2.3)访问http://localhost:8888/strutsDemo/smng_xxx.action查看结果。

从上图可以看到,update方法并没有被拦截器拦截。

好了,关于如果拦截收过路费的问题,我们就研究到这儿

至于各位客官想截什么,接下来可以自己玩玩了···

时间: 2024-10-09 03:38:48

《Java从入门到放弃》入门篇:Struts2的拦截器基本语法的相关文章

java框架篇---struts实现拦截器

Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法. Struts2拦截器类必须从com.opensymphony.xwork2.interceptor.Interceptor接口继承,在Intercepter接口中有如下三个方法需要实现: void destroy(); void init(); St

struts2中拦截器的简介与配置使用

拦截器是struts2框架的核心,struts2很多的功能都是构建在拦截器基础之上的,它是动态拦截Action调用的对象,提供了一种机制,使得开发者能够在一个Action前后执行需要的代码,可以在一个Action执行前组织他的执行,也能在Action执行后做一些相应的工作.同时他也提供了一种可以提取Action中可重用部分的方式. 拦截器 struts2拦截器是在访问某个Action或它的某个方法 .字段之前或之后实施拦截,struts2拦截器是可插拔的,是AOP的一种实现(AOP是OOP(Ob

谈谈 Struts2 的拦截器

套话 相信很多人都用过 Struts2 了,当然,对 Struts2 的原理也都比较了解.之前在一个项目中就已经用到了,当初的理解也仅仅是局限在应用的层面上,对于更深层次的原理.机制,了解的并不是很多.现在回过头来,再看 Struts2 的拦截器,相比之前的理解,又别有另一番滋味. 理解 Struts2 的拦截器,英文名为 Interceptor ,至于为什么中文要翻译为拦截器,我想这一定是有原因的,肯定不是一拍脑门,就叫拦截器了(它必定有什么含义在里边).从字面的意思,就是在发送请求的时候,有

struts2 在拦截器进行注入(根据Action是否实现自定义接口)

例如:常常在Action中都需要获取当前登录的User,就需要获取Session,然后从Session获取当前登录的User,因为这些步骤都是重复操作,可以想办法在拦截器中进行实现,可以自定义一个接口,只要你的Action实现了这个接口,就在自定义拦截器中进行注入.即从拦截器中获取Session,然后设置进行注入. 简单的例子: 一个自定义接口,只要Action实现这个接口,就在拦截器中进行注入 package com.atguigu.surveypark.struts2; import com

struts2 灵魂拦截器

此文还是小零食..我将会用最通俗易懂的方式 来解释 面向切面编程 AOP 话不多说上图 管理拦截器最好的解释 就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作. 这货还有一个说法 就是可插拔因为Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,所以你可以先他插入可以

Spring的AOP,Struts2的拦截器(Interceptor),以及springMVC的(interceptor)

参考外链:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/ 1.首先,spring的AOP作用范围很广,可以使用Aspectj的execution表达式自定以切面的位置. 比如下面的配置service方法执行日志: 1 <!-- 系统日志 --> 2 <bean id="logUtils" class="com.tabchanj.crm.utils.SystemLogUtils&q

【struts2】拦截器的工作模拟实现

Main.java /** * 书本:[struts2] * 功能:模拟拦截器的工作,实际就是递归的思想 * 文件:Main.java * 时间:2014年11月9日20:04:55 * 作者:cutter_point */ public class Main { public static void main(String [] args) { new ActionInvocation().invoke(); } } ActionInvocation.java /** * 书本:[struts

Struts2中拦截器的简单实现

Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行struts.xml中引用 的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法.在Struts2的拦截器体系中, Struts2的内建拦截器完成了该框架的大部分操作,所以实际的开发过程中通常都是使用系统的拦截器而已.当然我们也可以开发自己的拦截器,类似于过滤器的开发. 原理: Struts2拦截器的实现原理相对简单,当请求Stru

调查管理系统 -(6)自定义Struts2的拦截器&amp;自定义UserAware接口&amp;Action中模型赋值问题&amp;Hibernate懒加载问题

1.对于一些功能,如我的调查或新建调查等,只有用户登录后才能进行操作,因此必须对用户是否登录进行判断.当用户登录后才能使用相应的功能,如果没有登录则需为用户导航到登录页面让其进行登录.这个功能可以通过自定义Struts2的拦截器来完成. 2.当用户登录之后,由于是将用户的信息保存在session中的.这样当一些Action中需要用到当前登录的用户的信息时需要手动的从session中获取,不太方便,因此我们声明了一个UserAware接口(即用户关注,类似于Struts2中的SessionAwar