• Struts2基本流程


    转载:https://www.cnblogs.com/wkrbky/p/5894174.html

    概述

    Struts2框架由三部分构成:核心控制器、业务控制器和用户实现的业务逻辑组件。在这三部分中,struts2框架提供了核心控制器StrutsPrepareAndExecuteFilter,而用户需要实现业务控制层和业务逻辑层。

    一、核心控制器 StrutsPrepareAndExecuteFilter

     StrutsPrepareAndExecuteFilter与struts2以前版本中的FilterDispatcher一样。它是struts2框架的核心控制器,该控制器作为一个Filter运行在web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求,如果用户请求以action结尾,该请求就会被转入struts2框架来处理。

    Struts2框架获取*.action请求后,将根据*.action请求的前面部分决定调用那个业务逻辑组件,例如:对于login.action请求,Struts2调用名为login的Action来处理该请求。

    Struts2用户处理请求的Action实例,并不是用户实现的业务控制器,而是Action代理--因为用户实现的业务控制器并没有与ServletAPI耦合,显示无法处理用户请求,而struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的桉树解析出来,传入Action中,并huidiaoAction的execute方法来处理用户请求。

    上面的处理过程是典型的AOP(面向切面编程)处理方式,如图所示的处理模型:

    从图看出,用户实现的Action仅仅是struts2的Action代理的代理目标,用户实现的业务控制器Action则包含了对用户请求的处理,用户的请求数据包含在HttpServletRequest对象中, 而用户Action类无需访问HttpServletRequest对象,拦截器会将请求数据解析出来并传给业务逻辑组件Action实例

    二、业务控制器

    简述:左右项目开发中action控制层,用户接受数据,封装数据,调用业务逻辑层

    业务控制器组件就是用户Action类的实例,Action类通常包含了一个excute方法,该方法返回一个字符串-----该字符串就是一个逻辑视图名,当业务控制器处理完用户请求后,根据处理结果不同,excute方法返回不同字符串。

    每个字符串对应一个视图名

    在写完控业务制器后,需要配置Action的如下三个部分定义

    ●Action所处理的URL

    ●Action组件所对应的实现类

    ●Action里包含的逻辑视图和物理资源之间的对应关系

    每个Action都要处理一个用户请求,而用户请求总是包含了指定URL,当StrutsPrepareAndExecuteFilter拦截到用户请求后,根据请求的URL和Action处理URL之间的对应关系来处理转发

    三、struts2的模型组件

    Java EE 应用里的模型组件,通常指系统的业务逻辑组件,而隐藏在系统逻辑组件下面的,可能还包含了DAO,领域对象等组件。

    MVC框架里的业务控制器会调用模型组件的方法来处理用户请求,也就是说,业务控制器不会对用户请求进行实际处理,用户请求最终由模型组件负责处理,业务控制器只是中间负责调度器,这也是称Action为控制器的原因

    四、Struts2的视图组件

    Struts2已经改变了struts1只能使用JSP作为视图技术的现状,允许使用其他模版技术。

    当struts2的控制器返回逻辑视图名时,逻辑视图并未与任何的视图技术关联,仅仅是返回一个字符串,该字符串作为逻辑视图名。

    当我们在struts.xml文件中配置Action时,要为Action元素指定系列result子元素,每个result子元素定义一个逻辑视图和物理视图之间的映射,如果没有指定type属性,默认使用JSP左右视图资源。也可以指定很多类型 chain 转发到指定action中,redircter,重定向。

    五、运行流程

    Struts2框架的运行流程非常相似于WebWork框架的流程,struts2其实就是WebWork2.2的升级版,因此,struts2的运行流程与WebWork运行流程完全相同,如图WebWork的运行流程:

     

    •1、客户端向Servlet容器(如Tomcat)提交一个请求
     
    •2、请求经过一系列过滤器(如ActionContextCleanUp过滤器等)
     
    •3、核心控制器被调用,询问ActionMapper来决定请求是否需要调用某个Action
     
    •4、如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy (备注:JSP请求无需调用Action)
     
    •5、ActionProxy通过Configuration Manager询问框架的配置文件(struts.xml),找到需调用的Action类
     
    •6、ActionProxy创建一个ActionInvocation的实例
     
    •7、 ActionInvocation负责调用Action,在此之前会依次调用所有配置的拦截器
     
    •8、Action执行完毕,ActionInvocation负责根据结果码字符串在struts.xml的配置中找到对应的返回结果
     
    •9、拦截器被再次执行
     
    •10、过滤器被再次执行
     
     
    Struts  2核心接口和类
    •ActionMapper
    –根据请求的URI查找是否存在对应Action调用
    •ActionMapping
    –保存调用Action的映射信息,如namespace、name等
    •ActionProxy
    –在XWork和真正的Action之间充当代理
    •ActionInvocation
    –表示Action的执行状态,保存拦截器、Action实例
    •Interceptor
    –可以在请求处理之前或者之后执行的Struts 2组件
    –Struts 2绝大多数功能通过拦截器完成
  • 相关阅读:
    自定义key解决zabbix端口监听取值不准确的问题
    Redis——主从同步原理
    Leetcode 24——Swap Nodes in Pairs
    Struts2——第一个helloworld页面
    Leetcode 15——3Sum
    Leetcode 27——Remove Element
    C#简单入门
    Leetcode 12——Integer to Roman
    Leetcode 6——ZigZag Conversion
    eclipse如何debug调试jdk源码(任何源码)并显示局部变量
  • 原文地址:https://www.cnblogs.com/Jeely/p/11438105.html
Copyright © 2020-2023  润新知