Struts基本执行流程

时间:2022-11-01 17:08:42

Struts简单执行流程

对于ActionServlet的初始化前一篇已经详细讲解,想了解请看上一篇文章
1. 用户发送动态请求并且满足ActionServlet的url-pattern匹配,则该请求由交个ActionServlet处理
2. ActionServlet收到请求,根据请求的方式不同执行不同的方法get(doGet()) 或post(doPost()),当然源码里都是调用ActionServlet的同一个方法(porcess())
3. 在process的方法里主要是根据请求得到相应的MoudleConfig对象,找到之后会把该ModuleConfig对象放到request的Attribute属性里
4. 通过调用ActionServlet的getRequestProcessor的方法得到一个RequestProcessor对象,然后调用该对象得process方法
5. 在process方法里完成ActionForm的表单收集,调用Action的execute的方法,并且完成相应的跳转,请求转发给其他Action或者直接返回给用户相应的响应
6. 请求结束

Struts执行流程详细讲解

  1. 满足ActionServlet的url-pattern的请求交个ActionServlet后调用它的doGet或doPost方法,然后调用ActionServlet的process方法

    ActionServlet->process执行流程

    –>调用ModuleUtils的getInstance()方法得到一个ModuleUtils对象,该对象那个默认是通过new创建的
    –>得到ModuleUtils的对象后调用该对象的selectModule()方法
    –>selectModule方法会先去调用getModuleName方法,首先会判断request里是否有javax.servlet.include.servlet_patha属性(因为一般新的请求都不存在该属性),该属性为空则会得到request.getServletPath(),调用getModuleName的一个重载方法(因为ActionServlet的init方法里调用了initModulePrefixes方法,该方法的详细解释看上一篇文章),所以Application里存在org.apache.struts.globals.MODULE_PREFIXES属性

Struts基本执行流程

Struts基本执行流程
–>然后回到原selectModule方法里,继续调用该selectModule的另外一个重载方法,找到对应的ModuleConfig对象并且放到request里
Struts基本执行流程
–>回到ActionServlet的process方法,继续执行下面的语气,执行ActionServlet的getModuleConfig方法拿到request里的org.apache.struts.action.MODULE属性,如果没有就去Application取默认的那个,即prefix为空字符串的ModuleConfig对象,
Struts基本执行流程
–>得到RequestProcessor对象后调用它的process方法

RequestProcessor–>process执行流程

由于该执过程用文字表达表乱,所以直接用源码进行解释
Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程
3.请求结束

总结

如果你的ActionServlet配置了类似config/这个类型的初始化参数,如果想要使用该这些配置文件来处理请求,如表单,则需要在action的前面添加config/后面的那个字符串,然后就可以像config类似的那使用,但是config/的配置文件里的跳转就需要注意路径问题,因为请求中还包括config/后面的那个字符串.

例子

Struts基本执行流程

Struts基本执行流程

Struts基本执行流程

          以上是个人见解,如有不恰之处还望大家一起指正,如需转发请标明出处