深入浅出了解Struts的处理流程(有图有真相)

简介:       Struts框架在java web开发中很常用。最近我也在逐步摸索和学习。今天就来说说Struts的处理流程。       先来一幅Struts工作原理图:       从上面这幅图,我们可以清楚的看到Struts的实现原理: ...

      Struts框架在java web开发中很常用。最近我也在逐步摸索和学习。今天就来说说Struts的处理流程。


      先来一幅Struts工作原理图:


      从上面这幅图,我们可以清楚的看到Struts的实现原理:

  • 客户端的每个请求,都会首先到达ActionServlet,截取url;

  • ActionServlet会根据截取的url,在struts-config.xml的action-mapping中,找到对应action的配置信息,然后读取到ActionMapping中;

  • ActionServlet拿到ActionMapping中的name属性值,再从form-beans中找到对应的ActionForm,反射出实例来。将页面表单内容通过自动转换器转换后,放入到这个ActionForm中,传递给action处理类;

  • Action处理类拿到ActionForm,即可获取表单数据。通过ActionMapping则可以实现页面的转发。


      上面就是Struts工作原理的基本流程。通过断点调试struts,详细解释一下运行的流程:


      通过查看代码得知,

  • ActionServlet是通过process()方法来处理全部逻辑的。

  • action配置信息并不是全部加载,而是找与截取的url对应的action配置信息,加载到ActionMapping中,也就是一个action对应一个ActionMapping。

  • ActionForm也并不是每次都反射,而是会先判断一下request或者session中是否已经创建,如果没有,则创建一次,并保存在request或者session中。

  • Action处理类同样是先检查是否已经创建过,然后在操作。而且struts1中的Action创建过程存在线程安全问题。

  • ActionServlet根据Action返回的ActionForward,调用processForwardConfig,进行页面导航。


      

目录
相关文章
|
8月前
|
弹性计算 Java Unix
搭稳Netty开发的地基,用漫画帮你分清同步异步阻塞非阻塞
Netty Netty是一款非常优秀的网络编程框架,是对NIO的二次封装,本文将重点剖析Netty客户端的启动流程,深入底层了解如何使用NIO编程客户端。 Linux网络编程5种IO模型 根据UNIX网络编程对于IO模型的分类,UNIX提供了5种IO模型,分别是 阻塞IO 、 非阻塞IO、 IO复用 、 信号驱动IO 、 异步IO 。这几种IO模型在《UNIX网络编程》中有详解,这里作者只简单介绍,帮助大家回忆一下这几种模型。 对于Linux来说,所有的操作都是基于文件的,也就是我们非常熟悉的fd,在缺省的情况下,基于文件的操作都是 阻塞的 。下面就通过系统调用 recvfrom 来回顾下
65 0
|
8月前
|
程序员
难倒了80%程序员的题,谈谈你对Netty中,Pipeline工作原理的理解
1位工作8年的小伙伴,去某东面试IM部门,被问到这样一道面试题。说,请你谈一谈你对Netty Pipeline设计原理的理解。当时,他说只是用过Netty的Pipline,原理没有深入了解过,然后就没有然后了。
48 0
|
Java API 定位技术
Java后台专业术语
OOD(Object Oriented Design):面向对象设计 OOA(Object Oriented Analysis):面向对象分析
85 0
|
存储 缓存 JavaScript
想好怎么学 Servlet规范了嘛?想好了嘛?没想好先看看这篇文章(爆肝之作),先看着然后慢慢想!!
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。 狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
想好怎么学 Servlet规范了嘛?想好了嘛?没想好先看看这篇文章(爆肝之作),先看着然后慢慢想!!
|
设计模式 Java 程序员
终于有人把 java代理 讲清楚了,万字详解!
终于有人把 java代理 讲清楚了,万字详解!
156 0
|
Java 应用服务中间件 程序员
大部分程序员不知道的 Servelt3 异步请求,原来这么简单?阿粉带你全面扫盲!(下)
当一个 HTTP 请求到达 Tomcat,Tomcat 将会从线程池中取出线程,然后按照如下流程处理请求: 将请求信息解析为 HttpServletRequest 分发到具体 Servlet 处理相应的业务 通过 HttpServletResponse 将响应结果返回给等待客户端
大部分程序员不知道的 Servelt3 异步请求,原来这么简单?阿粉带你全面扫盲!(下)
|
监控 Java 应用服务中间件
大部分程序员不知道的 Servelt3 异步请求,原来这么简单?阿粉带你全面扫盲!(上)
当一个 HTTP 请求到达 Tomcat,Tomcat 将会从线程池中取出线程,然后按照如下流程处理请求: 将请求信息解析为 HttpServletRequest 分发到具体 Servlet 处理相应的业务 通过 HttpServletResponse 将响应结果返回给等待客户端
大部分程序员不知道的 Servelt3 异步请求,原来这么简单?阿粉带你全面扫盲!(上)
|
Java 开发者
知其所以然-剖析异常处理流程 | 带你学《Java面向对象编程》之七十八
本节从原理讲起,通过讲解Java处理异常的流程向读者展示了捕获异常的另外一种思路。
知其所以然-剖析异常处理流程   | 带你学《Java面向对象编程》之七十八
|
Java Linux 缓存
《Java并发程编程艺术》重点总结
synchronized修饰的代码块同步执行,不在synchronized块中的代码会异步执行,因此推荐用同步代码块,而非同步整个方法。 synchronized修饰同步方法和代码块,一定是排队运行的(线程独占)。
884 0