struts2 的请求流程

struts2 的几个问题

1 什么时候加载web.xml 和strut.xml等等配置文件(是在服务器启动的时候,加载的是strutsPreparedAndExecutorFilter 里面的init方法 ,当服务器启动的时候,其实就已经把action 字节码文件已经加载到classloader 中了

2 通过什么样的方式找到了action

通过配置文件-----》Action的映射器----》Action的代理对象---》并且把action的对象链放在ActionProxy栈中,最后通过,通过方法名和action名称,ActionProxy类实例找到对应的action类实例(用户自己定义的类).,通过ObjectFactory创建action 实例,创建拦截器

struts2 的请求流程_第1张图片

 

 

struts2 的请求流程_第2张图片

struts2中涉及的设计模式有

拦截器中涉及的设计模式

动态代理去执行action 当中的方法,拦截器就是责任链模式

当服务器加载的时候,通过dom4j 的技术解析,相关的配置信息,解析struts.xml,或者是引入的xml文件

当服务器启动的时候就通过反射的机制把class 文件加载到classloader 中

struts2 的请求流程_第3张图片

struts2 的请求流程_第4张图片

上面的目的就是获得dispatch对象,最终执行action的也是dispatch 对象

struts2 的请求流程_第5张图片

通过配置文件得到Action的映射器,通过Action映射器得到Action的代理对象并且把action的对象链放在ActionProxy栈中,最后通过,通过方法名和action名称,ActionProxy类实例找到对应的action类实例(用户自己定义的类).,通过ObjectFactory创建action 实例,创建拦截器

拦截器的原理源码解读

https://www.cnblogs.com/hayasi/p/5882397.html

struts2 的请求流程_第6张图片 执行serviceAction 的方法的源码解读内容

 https://www.cnblogs.com/hayasi/p/5872944.html

创建action实例的方法

https://blog.csdn.net/qq_20610631/article/details/82426099

dispatch的对象的创建过程的源码分析 ,dispatcher 对象是本地线程对象不是

https://www.cnblogs.com/hayasi/p/5822169.html
https://www.cnblogs.com/hayasi/p/5832578.html
https://www.cnblogs.com/hayasi/p/5841721.html 

struts2 的请求流程_第7张图片

struts2 的请求流程_第8张图片

struts2 的请求流程_第9张图片

对于解析上面的代码的源码解读

 https://www.cnblogs.com/hayasi/p/5857183.html

struts2 的请求流程_第10张图片

对与上面的代码的解读

https://www.cnblogs.com/hayasi/p/5846643.html

struts2 的请求流程_第11张图片

 

struts2 的请求流程_第12张图片

我们通过拦截器里面去用动态代理(参考设计模式动态代理)的方式去创建action对象目的就是为了放行,执行action 后面的代码

struts2 的请求流程_第13张图片

执行action当中的execute() 方法执行了以后就放行

 struts2 的请求流程_第14张图片

invocation.invoke() 就是通知struts2接着干下面的事情,目的就是放行

struts2 的请求流程_第15张图片

struts2 的请求流程_第16张图片

 

struts2 的请求流程_第17张图片

 

你可能感兴趣的:(配置】)