Struts的工作流程

Struts在项目启动的时候进行基本资源的初始化工作:

1. initInternal();初始化资源文件

2. initOther();初始化Web.xml对struts的定义信息

3. initServlet();初始化Web.xml对ActionServlet的定义信息.

4. initChain();初始化Struts的处理链,如果自己配置了处理链则要重写这个配置(Web.xml)

5. initModuleConfigFactory(); //设置模块模块工厂,如果自己配置了解析工厂则要重写这个配置(Web.xml)

6. initModuleConfig("prefix", config);初始化Struts-config.xml中的定义.

7. initModuleMessageResources(moduleConfig);初始化自定义消息资源

8. initModulePlugIns(moduleConfig);初始化插件信息

9. initModuleFormBeans(moduleConfig);初始化FormBean信息

    [  baseFormBean = new FormBeanConfig();
        baseFormBean.setName("baseForm");
        baseFormBean.setType("org.apache.struts.action.DynaActionForm");

 

        FormPropertyConfig property = new FormPropertyConfig();
        property.setName("id");
        property.setType("java.lang.String");
        baseFormBean.addFormPropertyConfig(property);

   ]

    这里设置FormBean的初始化工作,根据[Struts-config.xml]

10.initModuleForwards(moduleConfig);初始化Fowwards信息

   [

       baseForward = new ActionForward("success", "/succes.jsp", false);

   ]

   这里设置ActionForward的信息

11.initModuleExceptionConfigs(moduleConfig);初始化异常信息

    [

        baseException = new ExceptionConfig();
        baseException.setType("java.lang.NullPointerException");
        baseException.setKey("msg.exception.npe");

       

        ExceptionConfig exceptionConfig = new ExceptionConfig();
        exceptionConfig.setType("java.sql.SQLException");
        exceptionConfig.setKey("msg.exception.sql");
        baseAction.addExceptionConfig(exceptionConfig);

    ]

    这里设置Exception的处理

12.initModuleActions(moduleConfig);初始化Action

    [

       baseAction = new ActionMapping();
        baseAction.setPath("/index");
        baseAction.setType("org.apache.struts.actions.DummyAction");
        baseAction.setName("someForm");
        baseAction.setInput("/input.jsp");
        baseAction.addForwardConfig(new ActionForward("next", "/next.jsp", false));
        baseAction.addForwardConfig(new ActionForward("prev", "/prev.jsp", false));

    ]

    这里设置Action的信息

13.moduleConfig.freeze();标记这个配置文件已经配置

 

Struts在项目启动成功后,进行Action的执行工作。

1. ModuleUtils.getInstance().selectModule(request, getServletContext());根据请求信息搜索模块配置信息

2. getRequestProcessor(config);得到请求处理器

3. processor.process(request, response);处理这个请求

4. request = processMultipart(request);初始化请求信息,主要是区别Multipart,也就是请求头信息是multipart/form-data

5. String path = processPath(request, response);识别和返回一个Path组件[从requestURI中取](XXX.do)

5. processLocale(request, response);初始化Locale信息

6. processContent(request, response);设置请求和头信息[默认为text/html]

7. processNoCache(request, response);设置头信息的不允许缓存

8. this.processCachedMessages(request, response);如果缓存的信息在Session中没有找到就移除

9. processMapping(request, response, path);初始化ActionMapping[根据Struts-config.xml]

10.processActionForm(request, response, mapping);初始化ActionForm[根据Struts-config.xml]

11.processPopulate(request, response, form, mapping);把请求参数中的属性设置到form当中。

12.processValidate(request, response, form, mapping);处理验证

13.processForward(request, response, mapping);处理响应

14.processInclude(request, response, mapping);处理包含

15.processActionCreate(request, response, mapping);处理Action的创建.

     [Actions是一个HashMap,线程不安全的,所以这里采用的是synchronized,其实还有一个类为

      HashTable是线程安全的,但是作者这里不使用HashTable,可见HashTable已经被废弃了]

16.processActionPerform(request, response, action, form, mapping);这里是处理Action,默认为execute方法

17.processForwardConfig(request, response, forward);处理ActionForward.

 

Struts封装了各环节的处理,在我们操作的时候,我们只需要编写Action,只需要编写execute方法就可以了,

采用了很多优秀的设计模式.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值