玩转Struts2之Struts2拦截器的自定义实现

版权声明:乘梦碧溪QQ:2838635235 https://blog.csdn.net/zy13651953784/article/details/84899949

首先,一起复习下Struts2处理请求的过程

主要思路是:
a) 客户端初始化一个指向Servlet容器的请求;
b) 根据Web.xml配置,请求首先经过核心过滤器StrutsPrepareAndExcuteFilter,执行doFilter方法,在该方法中,这只编码,创建valuestack对象,询问ActionMapper来决定这个请求是否需要调用某个Action;如果ActionMapper决定需要调用某个Action,则ActionMapper会返回一个ActionMapping实例(存储Action的配置信息),调用executeAction()方法,
c) 调用dispatcher.serviceAction()方法,创建ActionProxy(Action代理)对象,将请求交给代理对象继续处理;
d) ActionProxy对象根据ActionMapping和Configuration Manager询问框架的配置文件,找到需要调用的Action类;
e) ActionProxy对象创建时,会同时创建一个ActionInvocation的实例,并对action进行初始化,压入值栈栈顶;
f) 执行proxy.execute()方法,调用invocation.invoke()方法
g) ActionInvocation的invoke()方法中,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用;
h) 一旦Action执行完毕,ActionInvocation实例负责根据struts.xml中的配置创建并返回Result。Result通常是一个需要被表示的JSP或者FreeMarker的模版,也可能是另外的一个Action链;
i) 如果要在返回Result之前做些什么,可以实现PreResultListener接口,PreResultListener可以在Interceptor中实现,也可以在Action中实现;
j) 根据Result对象信息,生成用户响应信息response,在生成响应过程中可以使用Struts2 框架中继承的标签,在此过程中仍会再次涉及到ActionMapper

在这里插入图片描述
其次,解析Struts2自定义拦截器

如上图:1-2-3-4-5-6-7-8-9-10-11-12-13,对应代码(代码附后)其罗马数字代表含义:
1:JSP页面上的Http请求
2-3-4:此处所涉及的action指的是形如“*.action”请求转发过程,并不是真正的action业务
5-6:自定义的拦截器
7:真正的action业务层,用来完成编程者预设的任务
8:此处的Result实际上就是一个String类型的返回值,是由对应所调用的Action中的方法的返回值,一般返回的是内置变量SUCCESS,其实就是个String类型的success…,另外这种问题你可以使用system.out.println()的方法去看看输出的具体是什么.
9:
10:拦截器回访
11:服务回访
12:可视化JSP响应

最后,附代码如下:

猜你喜欢

转载自blog.csdn.net/zy13651953784/article/details/84899949