《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方法并没有被拦截器拦截。

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

一些Golang小技巧

今天给大家介绍3个我觉得比较有启发的Golang小技巧,分别是以下几个代码片段 nsq里的select写文件和socket io模块里的sendfile fas...

4009
来自专栏LEo的网络日志

tempfile.NamedTemporaryFile创建临时文件在windows没有权限打开

4978
来自专栏FreeBuf

利用Hook技术实现浏览器HTTPS劫持

现在很多网站都使用了 https 的方案,保证了传输中的数据不被修改或者被第三方封包软件看见,但是由于https有一些隐含的缺陷或者服务器验证的不严格,http...

4099
来自专栏Django Scrapy

python3使用zookeeper和私钥解密及编码转化配置信息

python3相关的zookeeper包支持的少,互联网上大量的文章都是使用的zkpython,可是zkpython只支持到python2.7,找了半天才寻找到...

3575
来自专栏菩提树下的杨过

ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表

zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机...

8406
来自专栏FreeBuf

隐藏在证书文件中的PowerShell(一)

最近,NVISO实验室分析人员开发了某种YARA规则,利用它发现了多种恶意证书文件(.crt),这些证书文件中包含的并不是真正的认证证书,而是一个恶意的Powe...

1733
来自专栏PHP在线

我所理解的接口设计

2718
来自专栏程序员宝库

我所理解的接口设计

前言 自己做接口开发的时间也算不短了(三年),想写这篇文章其实差不多已经有一年多的时间了。我将从下面的方向来对我所理解的接口设计做个总结: 接口参数定义 -> ...

3187
来自专栏orientlu

BLE 广播格式定义

低功耗蓝牙两类报文 : 广播报文 和 数据报文。 本文讨论广播报文数据段,不包括完整报文其他部分,比如前导,接入地址等

7302
来自专栏FreeBuf

浅谈拒绝服务攻击的原理与防御(3)| 反射DDOS攻击利用代码

0×01 前言 之前发了一篇关于反射DDOS攻击原理以及反射资源扫描的文章,本来今天的这个应该并到那篇文章里,共称为反射DDOS攻击扫描与利用,但是我怕这样做会...

2989

扫码关注云+社区

领取腾讯云代金券