转载: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绝大多数功能通过拦截器完成

Struts2基本流程的更多相关文章

  1. Struts2学习第一天——struts2基本流程与配置

    struts2框架 什么是框架,框架有什么用? 框架 是 实现部分功能的代码 (半成品),使用框架简化企业级软件开发 ,提高开发效率. 学习框架 ,清楚的知道框架能做什么? 还有哪些工作需要自己编码实 ...

  2. Struts2 核心流程

    1.Struts2架构图  这是Struts2官方站点提供的Struts 2 的整体结构.  执行流程图 2.Struts2部分类介绍  这部分从Struts2参考文档中翻译就可以了. ActionM ...

  3. struts2 基本流程

    一.配置过程 1.在web.xml中配置过滤器 <filter> <filter-name>StrutsPrepareAndExecuteFilter</filter-n ...

  4. 【跟我一步一步学Struts2】——Struts2工作流程

    上一篇博客通过一个简单的小样例对struts2的流程有一个简单的了解,这篇博客继续. 当用户要登陆某一个站点.输入username,password,点击登陆就会触发以下一系列过程 : 1.请求过来之 ...

  5. Struts2 运行流程

    Struts2运行流程 1.在web.xml中使用Struts的核心过滤器拦截所有请求. <filter> <filter-name>struts2</filter-na ...

  6. springmvc与struts2执行流程比较

    之前写过一篇struts2的执行流程的文章了,这里对struts2的流程就不做过多的分析,这篇文章主要分析spring-mvc的执行流程以 及struts2与spring-mvc的差别. 1.stru ...

  7. struts2执行流程和架构图

    一.struts2执行流程 二.架构图 只需要编写黄色部分的代码:

  8. 8、Struts2 运行流程分析

    1.流程分析: 请求发送给 StrutsPrepareAndExecuteFilter StrutsPrepareAndExecuteFilter 询问 ActionMapper: 该请求是否是一个 ...

  9. struts2工作流程

    struts2的框架结构图 工作流程 1.客户端请求一个HttpServletRequest的请求,如在浏览器中输入http://localhost: 8080/bookcode/Reg.action ...

  10. struts2视频学习笔记 09-10(struts2处理流程,指定多个struts配置文件)

    课时9 Struts2的处理流程 StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它负责拦截由<url-pattern>/*</url- ...

随机推荐

  1. Linux部署Redis及PHP-redis扩展

    Redis是一个key-value存储系统,属于我们常说的NoSQL.它遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.它常用在缓存.队列.P ...

  2. 安装CRMEasy步骤

    生成CRMEasy安装包的步骤: 所需文件: InstallShieldExpress软件 CRMEasy.iwz工程文件 XP系统(虚拟机即可) 安装 CRMEasy 步骤: 1.windows X ...

  3. 关于 php for zookeeper

    原文:Distributed application in PHP with Apache Zookeeper 地址:http://systemsarchitect.net/distributed-a ...

  4. Tensort之uff

    # This sample uses a UFF MNIST model to create a TensorRT Inference Engine from random import randin ...

  5. python paramiko模块:远程连接服务器

    1.  SFTP基于 用户名密码 登录服务器,实现上传下载: import paramiko transport = paramiko.Transport(()) # 生成trasport,配置主机名 ...

  6. Okhttp拦截器统一异常处理并多次读取response.body().string()

    参考:https://blog.csdn.net/a624806998/article/details/73863606 引言: 写这篇文章,因为在自己编写实现Http日志拦截器的时候,在拦截器中使用 ...

  7. swiper保存

    //初始化swiper var index=0; if(sessionStorage.getItem("index")){ index=sessionStorage.getItem ...

  8. excel中汉字转拼音

    Excel中文转拼音(完整版)打开Excel->工具->宏->Viaual Basic编辑器在弹出来的窗口中对着VBAproject点右键->插入->模块下面会出现一个名 ...

  9. 【NOIP2016提高A组五校联考2】string

    题目 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^9 ...

  10. java——HttpClient 代理模式发送Http Https

    在setProxy()方法中设置代理IP后可以将url中的域名换成这个代理IP. http很简单,但是https这样会报错. 问题:如何使用代理发送https请求? 客户端发送https请求之前会先向 ...