A.拦截器是什么

--- Interceptor:拦截器,起到拦截Action的作用。

---Filter:过滤器,过滤从客户端向服务器发送的请求。

---Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。(拦截Action中的具体的方法)。Struts2框架核心的功能都是依赖拦截器实现。

B.Struts2的执行流程

     

客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。在这个方法中,调用executeAction()方法,在这个方法内部调用dispatcher.serviceAction();在这个方法内部创建一个Action代理,最终执行的是Action代理中的execute(),在代理中执行的execute方法中调用ActionInvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标Action,根据Action的返回的结果进行页面跳转。

c.拦截器入门

  1.搭建Struts2环境

    

  2.编写拦截器类

       --编写一个类实现Interceptor接口或者继承AbstractInterceptor。当然继承AbstractInterceptor的子类MethodFilterInterceptor更好,里面两个变量专门可以拦截或者放行某些方法。

自定义拦截器:   

public class MyInterceptor extends AbstractInterceptor {

    @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("自定义拦截器开始执行");
String obj = invocation.invoke();
System.out.println("自定义拦截器执行结束");
return obj;
}
}

配置拦截器:

1.定义拦截器方式配置

<package name="struts" extends="struts-default"><interceptors>    <!--配置自己的拦截器-->
<interceptor name="MyInterceptor" class="com.xxx.web.action.MyInterceptor"/>
</interceptors>
<action name="upload" class="com.xxx.web.action.FileUploadAction">
<interceptor-ref name="MyInterceptor"></interceptor-ref> <!--引入拦截器,让它生效-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/File/success.jsp</result>
</action>
</package>

2.自定义拦截器栈

<interceptors>
<interceptor name="MyInterceptor" class="com.xxx.web.action.MyInterceptor"/>
<interceptor-stack name="mystack"> <!--直接定义自己的拦截器栈,将所有需要的拦截器放进去,在action中直接放拦截器栈声明生效就行了-->
<interceptor-ref name="MyInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="upload" class="com.xxx.web.action.FileUploadAction">
<interceptor-ref name="mystack"></interceptor-ref>
<result>/File/success.jsp</result>
</action>

上面两种方式都有一个defaultStack,这是struts2框架的拦截器栈,如下图所示,里面有很多拦截器,如国际化,校验,文件上传等等,想要运行struts2,就需要该defaultStack拦截器栈,当然,如果你可以做出比他更好,功能更强的,那就用你自己的就行,只要配置了自定义拦截器栈,原先struts2的拦截器就不会生效,要想原先的生效,要加上defaultStack就行。

 

Struts2笔记_拦截器的更多相关文章

  1. Struts2笔记——自定义拦截器

    需要两个步骤,自定义类实现拦截器接口和在struts.xml注册拦截器 =============================== 1.自定义类实现com.opensymphony.xwork2. ...

  2. Struts2学习笔记(拦截器配置添加)

    一.拦截器工作原理: 根据Struts2的工作原理图,拦截器在action执行前进行顺序调用,之后执行Action并返回结果字符串,再逆序调用拦截器.(结构类似递归方式...)大部分时候,拦截器方法都 ...

  3. Struts2学习笔记五 拦截器

    拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. Struts2中,拦截器是动态拦截Action调用的对象.它提供了一种机制可以使 ...

  4. 5.Struts2中的拦截器

    拦截器是Struts2中的核心,其自带很多很多的拦截器,这里主要介绍一下自定义拦截器,恩多一半情况下呢?我们不需要使用到自定义的拦截器,Struts2本身已经提 供了很多的拦截器供我们使用,对于自定义 ...

  5. struts2基础——自定义拦截器

    一.自定义拦截器 默认的拦截器能实现的功能是有限的,Struts2 支持自定义拦截器. 二.拦截器类 1.实现 Interceptor 接口 2.继承 AbstractInterceptor 抽象类, ...

  6. Struts2(十四)拦截器实现权限管理

    一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...

  7. 十五、struts2中的拦截器(框架功能核心)

    十五.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 功能是一回事. 过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面 ...

  8. Struts2透过自定义拦截器实现登录之后跳转到原页面

    Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...

  9. Struts2的核心——拦截器

    虽然以前已经学了很多的拦截器,但是在这里还是想重头梳理一下所有有关拦截器的知识,尤其是struts2中的拦截器 1:拦截器是什么? java里的拦截器是动态拦截Action调用的对象.它提供了一种机制 ...

随机推荐

  1. apigateway-kong(二)admin-api(结合实例比官网还详细)

    部署好kong之后,则需要将我们自己的接口加入到kong中管理,kong提供了比较全面的restful api,每个版本会有所不同,下面的记录基于kong v0.13.x kong的8001端口是re ...

  2. 【转】视频H5 video最佳实践

    原文地址:https://github.com/gnipbao/iblog/issues/11 随着 4G 的普遍以及 WiFi 的广泛使用,手机上的网速已经足够稳定和高速,以视频为主的 HTML5 ...

  3. wGenerator代码生成工具

    由来 以前一直用window系列的操作系统,有不少可以用的代码生成工具,如:动软的代码生成器(.net),可以自定义模板,然后按需生成代码.后来用mac系统,发现好像没有什么太好用的生成工具,所以自己 ...

  4. C#-Xamarin的Android项目开发(一)——创建项目

    创建项目 使用Xamarin开发安卓项目,首先需要安装VS2017以上版本.因为VS2017以上的版本,可以直接创建Xamarin项目. 另外用Xamarin开发安卓项目,还需要使用Intel的CPU ...

  5. 【野草】SQL Server之索引解析(一)

    1.写在前面 微软专门给出SQL Server设计思路及实现路线,从7大体系结构阐述是如何实现,通过了解这些,我们就可以总结出数据库设计原则.编程中sql写法及注意事项,从而优化我们的系统性能,本系列 ...

  6. DSAPI DS密法

    DS密法是DYLIKE本人研发的一种针对文本字符串的高强度加密方法,本加密方法的优点是同源不同密,同一个源文本每次加密的结果都不同,长度也不同.密钥最大可达String类型的字符最大长度.缺点是解密时 ...

  7. [ArcGIS API for JavaScript 4.8] Sample Code-Popups-1-popupTemplate的概念和popup中属性字段值的多种表现形式

    [官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html] 一. ...

  8. ArcPy 将mxd格式转换为msd格式

    在控制程序进行地图服务更新时,如果只是修改MXD中的渲染是不行的,需要写脚本将MXD转换为MSD,替换原有的MSD文件,并重新启动地图服务,这样才能读取到新的渲染方式. 附上Python代码: # - ...

  9. Visual Studio Code快速删除空行及几个常用快捷键总结

    在使用notepad++工具的时候,很多情况下我们会遇到批量替换空行的操作,之前的操作方法是快捷键Crtl+h调出窗口选择替换栏,在查找目标栏中输入\r\n\r\n,替换为 栏中输入\r\n并选择全部 ...

  10. 记录SoapUI使用说明

    一.SoapUI简介 SoapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到E ...