Struts2详细执行流程自己总结
Struts2详细执行流程总结
这篇文章是在参考大量资料之下总结出来的,一是减少学习Struts2同学的疑惑,二是顺便自己总结一下提升自己的知识水平,三是抗遗忘。欢迎纠正,谢谢各位朋友,若不慎涉及他人的版权,请qq联系1354611365,我将删除。
一、struts2总体框架。
先给出总体框架,从战略上分析。保持学习过程中不会出现走邪路的状况。
图1:Struts2的总体框架预览
二、解释框架图中的各个层次的意思。
1、我们一般会把我们做的项目部署到Tomcat服务器上,由服务器解析我们所做的Struts2项目。
2、项目部署完毕后通过jsp运行项目
其实jsp表单里面含有提交到action的内容的。
图2:jsp里的表单
服务器开始启动,会加载先web.xml文件,web.xml其实是一个监管器
图3:web.xml文件里的内容
StrutsPrepareAndExecuteFilter。表面意思就是struts准备并执行过滤器
其真正含义有两条与这句话差不多。
一是为struts2执行做一些相关的准备。如加载相关的配置信息。
二是为struts2的request请求处理相关的信息。如设置编码格式和找到对应的action映射类
StrutsPrepareAndExecuteFilter
包含两个主要方法:
void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)
void init(javax.servlet.FilterConfig filterConfig)
doFilter()主要是通过ActionContex包装httpServletRequest,和HttpServletRespone用ActionContext包装请求和响应信息然后提交各Action类。至于怎么搞的自己看源码。
Init()方法主要是读取响应的struts2的配置文件。顺序读取文件为;
1、default.properties(框架提供):配置了struts运行的参数
2、struts-default.xml(框架提供):struts框架加载创建、Result、拦截器等,框架运行要用
3、struts-plugin.xml(插件提供):插件文件,比如:第三方插件,转json插件、struts2和spring整合插件。。
4、struts.xml(程序员定义):它能配置的内容和struts-default.xml一样,重点要配置Action、自定义运行参数、自定义的拦截器
5、struts.properties(程序员定义):可以配置struts运行的参数
注意:图片中用的是FilterDispatcher类在struts2.1.3中已经过时了,改为了StrutsPrepareAndExecuteFilter类了
此时已经进入这个struts2框架的这个部位了。
图4 Struts2行进图
三、通过ActionMapper寻找对应的Action。
上次说到web.xml检测到jsp表单里的提交到action的内容就会被检测拦截
然后然后通过StrutsPrepareAndExecuteFilte类进行过滤包装,将请求信息转发给ActionMapper,由ActionMapper检测这个信息是否要Struts2进行处理。
如果需要,ActionMapper反馈给StrutsPrepareAndExecuteFilter,然后StrutsPrepareAndExecuteFilter创建ActionProxy对象。
但ActionPropxy并不知道具体的action内容。于是又调用ConfigurationManager
,ConfigurationManager之前将struts.xml,等一些struts2配置文件加载进入了内存。因此它能对struts.xml进行处理。
通过struts.xml的内容去查找相应的Action类。
那么如何查找呢?
<form action="user_Register.action" method="post"
表单action内容为“user_Register.action”
图5:查找actionl类
图6:ActionProxy中间层的作用(注意箭头)
四、ActionProxy获知要使用的action后创建ActionInvocation类这个类包含四个属性.
简单的来说通过ActionInvocation获取了前端的各种属性,比如name, age,等提交的表格信息内容。还获取了struts2的各种配置信息,还有ConfigurationManager查找到的具体执行的action,等。然后经过业务层处理将内容返回出来。也就是通过struts.xml中的result信息返回响应的页面。
图7:result返回响应的页面
图8:httpServletReponse响应页面。
经过result找到响应页面通过HttpServletResponse响应用户的请求。
1、HttpServeletRequest
请求信息。
2、ActionContextCleanUP
3、Other filters
2,3不重要,貌似现在已经没用了。
4、Filter Dispatcher
过滤器,这个应该是最底层的过滤器。
5、ActionMapper
Struts2中主要检测请求信息是否需要Struts2处理。
6、ActionProxy
一个中间层,就是可以调用其他类什么的。
7、ConfigurationManager
ConfigurationManager则负责将struts.xml文件中配置文件映射到内存中去的
8、Struts.xml
Struts配置文件需要程序员填写。
9、ActionInvocation
包含四个属性分别获取前端传递的值,action,struts.xml信息,其他一些数据。
10、Interceptor
拦截器不是太理解应该是获取前端传递的属性值,然后封装到action的属性域中。
11、Tag Subsystem
Struts2自带标签库没用
12、Templete
Struts2的前端模版,没用吧,不清楚。
13、HttpServletResponse
响应用户的类。
最后奉上一个struts2的执行图解
Struts2详细执行流程自己总结相关推荐
- SpringMVC详细执行流程与组件说明
SpringMVC详细执行流程与组件说明 文章目录 SpringMVC详细执行流程与组件说明 1.SpringMVC架构流程 2.流程图 3.组件说明 1.SpringMVC架构流程 用户发送请求至前 ...
- java之struts2的执行流程讲解(1)
1.struts2的执行流程 请求--->Tomcat(判读项目是否存在)--->项目的web.xml--->struts2的核心过滤器 --->判读请求的资源(hello.a ...
- Java Web - Struts2基本执行流程
一 前台测试页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF ...
- Struts2框架执行流程
Struts2源码导入 对于struts2框架它的源代码我们主要使用三部分 struts2核心部分源代码 org.apache.struts2xx src\core\src\main\java str ...
- SpringMVC详细执行流程整理
架构流程 1. 用户发送请求至前端控制器DispatcherServlet 2. DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3. 处理器映射器根据请求u ...
- Struts2和SpringMVC的执行流程。
先介绍一下SpringMVC的执行流程: 1:客户端发起请求到DispatcherServlet(前端控制器) 2:前端控制器请求HandlerMapping(处理器映射器)查找 Handler 根据 ...
- 请简述Spring MVC的执行流程
需要面试文档可S我 今天我给大家介绍一下Spring MVC的详细执行流程.我把Spring MVC的执行流程划分为三个阶段,配置阶段.初始化阶段和运行阶段. 我整理了一张完整的执行流程图,需要高清图 ...
- Java-Mybatis(二): Mybatis配置解析、resultMap结果集映射、日志、分页、注解开发、Mybatis执行流程分析
Java-Mybatis-02 学习视频:B站 狂神说Java – https://www.bilibili.com/video/BV1NE411Q7Nx 学习资料:mybatis 参考文档 – ht ...
- 天勤数据结构:树与二叉树(图解二叉树的三种遍历方式执行流程,超详细)
数据结构(第六章) 树与二叉树 1. 树与二叉树的相互转换 2. 森林与二叉树的相互转换 3. 二叉树的遍历 3.1 层序遍历(广度优先遍历) 2. 深度优先遍历 3. 树转化为二叉树的遍历 将一颗 ...
- 从一条sql的执行流程来详细了解Buffer Pool
一条更新语句的执行流程 为什么Mysql不能直接更新磁盘上的数据而且设置这么一套复杂的机制来执行SQL? 因为来一个请求就直接对磁盘文件进行随机读写,然后更新磁盘文件里的数据性能可能相当差. 因为磁盘 ...
最新文章
- 无连接的用户数据报协议UDP
- 如何优雅的设计和使用缓存?
- MySQL8.0版本和5.7通过Navicat远程连接
- 【英语学习】【Daily English】U06 Shopping L01 We are out of pasta.
- Ownership and Permissions
- 【笔记】k-Nearest Neighbors(KNN/k近邻)原理
- ThinkPHP视图模型实例
- Github Gitee Java开发 热门中后台开源项目
- C语言丨筛法求素数(质数)
- 剪切板 html 查看器,如何打开剪贴板查看器
- <C++>初识多态,剖析virtual关键字
- [概念]像素,分辨率
- TCP与UDP协议,socket套接字编程,通信相关操作
- 服务器 远程桌面限制IP 与 (虚拟专用网络) 结合的安全策略
- 超级计算机作文650字,努力初中作文650字(通用11篇)
- 固态硬盘:掉盘不识别自检修复,30分钟大法
- 计算机辅助仿真模拟的英文缩写,全国计算机等级考试二级MS Office
- c语言字母概率,C/C++知识点之智邮普创c语言面试题 ---- 字母概率
- 关于Visual Studio 2017安装时共享组件、工具和 SDK安装位置不能更改的问题
- ARP伪造网关攻击学习
热门文章
- 谷歌地图,计算两个坐标点之间的距离
- 神经网络计算棒有什么用,神经网络计算棒怎么用
- c语言 go to 用法,c语言中 go to语句的使用方法
- python-爬取贴吧的时候表情的处理。
- Python每日一练(23)-基于百度 AI 识别抓取的表情包
- 基于vlan 无线用户隔离
- 微信支付 发起商家转账API 2022年v3 transfer batches
- linux系统路由器地址查询,查找路由器登录IP地址指南
- 企业网站内容维护日常工作有哪些
- 电脑使用过程中“xx指令引用的xx内存。该内存不能为written或read”的解决方案!