Struts2笔记_拦截器
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笔记_拦截器的更多相关文章
- Struts2笔记——自定义拦截器
需要两个步骤,自定义类实现拦截器接口和在struts.xml注册拦截器 =============================== 1.自定义类实现com.opensymphony.xwork2. ...
- Struts2学习笔记(拦截器配置添加)
一.拦截器工作原理: 根据Struts2的工作原理图,拦截器在action执行前进行顺序调用,之后执行Action并返回结果字符串,再逆序调用拦截器.(结构类似递归方式...)大部分时候,拦截器方法都 ...
- Struts2学习笔记五 拦截器
拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. Struts2中,拦截器是动态拦截Action调用的对象.它提供了一种机制可以使 ...
- 5.Struts2中的拦截器
拦截器是Struts2中的核心,其自带很多很多的拦截器,这里主要介绍一下自定义拦截器,恩多一半情况下呢?我们不需要使用到自定义的拦截器,Struts2本身已经提 供了很多的拦截器供我们使用,对于自定义 ...
- struts2基础——自定义拦截器
一.自定义拦截器 默认的拦截器能实现的功能是有限的,Struts2 支持自定义拦截器. 二.拦截器类 1.实现 Interceptor 接口 2.继承 AbstractInterceptor 抽象类, ...
- Struts2(十四)拦截器实现权限管理
一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...
- 十五、struts2中的拦截器(框架功能核心)
十五.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 功能是一回事. 过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面 ...
- Struts2透过自定义拦截器实现登录之后跳转到原页面
Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...
- Struts2的核心——拦截器
虽然以前已经学了很多的拦截器,但是在这里还是想重头梳理一下所有有关拦截器的知识,尤其是struts2中的拦截器 1:拦截器是什么? java里的拦截器是动态拦截Action调用的对象.它提供了一种机制 ...
随机推荐
- C#中使用Bogus创建模拟数据
原文:CREATING SAMPLE DATA FOR C# 作者:Bruno Sonnino 译文:C#中使用Bogus创建模拟数据 译者: Lamond Lu 背景 在我每次写技术类博文的时候,经 ...
- 流程控制之if判断
目录 语法(掌握) if if...else if...elif...else 练习(掌握) 练习1:成绩评判 练习2:模拟登录注册 if的嵌套(掌握) 语法(掌握) if判断是干什么的呢?if判断其 ...
- 别开心太早,Python 官方文档的翻译差远了
近几天,很多公众号发布了 Python 官方文档的消息.然而,一个特别奇怪的现象就发生了,让人啼笑皆非. Python 文档的中文翻译工作一直是“默默无闻”,几个月前,我还吐槽过这件事<再聊聊P ...
- javascript入门篇(三)
字符串属性和方法 原始值字符串,如'liang', 没有属性和方法(因为他们不是对象). 原始值可以使用 JavaScript 的属性和方法,因为 JavaScript 在执行方法和属性时可以把原始值 ...
- Cron表达式详解【转】
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...
- Java之Spring mvc详解
文章大纲 一.Spring mvc介绍二.Spring mvc代码实战三.项目源码下载四.参考文章 一.Spring mvc介绍 1. 什么是springmvc springmvc是sprin ...
- sqlite数据库如何远程连接?
sqlite数据库如何远程连接代码如下:QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE"); db.setHostName( ...
- 多线程总结之旅(1):线程VS进程
一.进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,也就是应用程序的执行实例,进程是系统进行资源分配和调度的一个独立单位.每个进程是由私有的虚拟地址空间.代码.数据和其它各种系统资 ...
- [FromBody]与[FromForm]区别
[FromBody]与[FromForm]区别 1,fromBody:在cation方法传入参数后添加[frombody]属性,参数将以一个整体的josn对象的形式传递. 2,fromform:在ca ...
- Pytorch系列教程
介绍 不久前Pytorch发布了1.0版本,官网的doc页也更新了.这里说下官网的教程很实用,边学pytorch搭网络边学NLP-图像等领域的先进技术. 官网的教程都是英文的,本人就用这个系列博客做个 ...