struts2 的几个问题
1 什么时候加载web.xml 和strut.xml等等配置文件(是在服务器启动的时候,加载的是strutsPreparedAndExecutorFilter 里面的init方法 ,当服务器启动的时候,其实就已经把action 字节码文件已经加载到classloader 中了
2 通过什么样的方式找到了action
通过配置文件-----》Action的映射器----》Action的代理对象---》并且把action的对象链放在ActionProxy栈中,最后通过,通过方法名和action名称,ActionProxy类实例找到对应的action类实例(用户自己定义的类).,通过ObjectFactory创建action 实例,创建拦截器
struts2中涉及的设计模式有
拦截器中涉及的设计模式
动态代理去执行action 当中的方法,拦截器就是责任链模式
当服务器加载的时候,通过dom4j 的技术解析,相关的配置信息,解析struts.xml,或者是引入的xml文件
当服务器启动的时候就通过反射的机制把class 文件加载到classloader 中
上面的目的就是获得dispatch对象,最终执行action的也是dispatch 对象
通过配置文件得到Action的映射器,通过Action映射器得到Action的代理对象并且把action的对象链放在ActionProxy栈中,最后通过,通过方法名和action名称,ActionProxy类实例找到对应的action类实例(用户自己定义的类).,通过ObjectFactory创建action 实例,创建拦截器
拦截器的原理源码解读
https://www.cnblogs.com/hayasi/p/5882397.html
执行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
对于解析上面的代码的源码解读
https://www.cnblogs.com/hayasi/p/5857183.html
对与上面的代码的解读
https://www.cnblogs.com/hayasi/p/5846643.html
我们通过拦截器里面去用动态代理(参考设计模式动态代理)的方式去创建action对象目的就是为了放行,执行action 后面的代码
执行action当中的execute() 方法执行了以后就放行
invocation.invoke() 就是通知struts2接着干下面的事情,目的就是放行