Struts2的介绍

制作人:全心全意

Struts引用的是MVC(Model-View-Controller,模型-视图-控制器)设计理念。目前,JavaWeb应用MVC设计理念的框架有很多,如Struts、JSF、Tapestry、Spring MVC等,Struts框架的应用最为广泛。

Struts框架目前拥有两个主要的版本,分别为Struts1.x版本与Struts2.x版本。

2001年6月发布了Struts1版本,其MVC架构如下图所示:

在Struts1的MVC架构中,各层结构功能如下:

控制器:在Struts1的MVC架构中,使用中央控制器ActionServlet充当控制层,将请求分发配置在配置文件struts.cfg.xml中,当客户端发送一个HTTP请求时,将由Struts的中央控制器对请求进行分发处理,在处理之后,返回ActionForward对象将请求转发到指定的JSP页面,对客户端进行回应。

模型:模型层主要由Struts中的ActionForm及业务Java Bean实现,其中ActionFrom对象对表单数据进行封装,它能够与网页表单进行交互并传递数据;业务Java Bean用于处理真正的业务请求,由Action进行调用。

视图:视图主要指用户看到并与之交互的界面,即Java Web应用程序的外观。在Struts1框架中,Struts提供的标签库增强了JSP页面的功能,并通过Struts标签库与JSP页面实现视图层。

相对于Struts1框架而言,Struts2是一个全新的框架,Struts2的结构体系与Struts1的结构体系有很大的区别。

Struts2框架是在WebWork框架的基础上发展而来的,它是WebWork技术与Struts技术的结合,在WebWork中,Action对象不再与Servlet API向耦合,它可以在脱离Web容器的情况下运行,而且还提供了自己的IoC(Inversion of Control)容器增强了程序的灵活性,通过控制反转使程序测试更加简单。其结构体系如下图所示:

Struts2通过过滤器拦截要处理的请求,当客户端发送一个HTTP请求时,需要经过一个过滤器链,这个过滤器链包括ActionContextClearUp过滤器、其他Web应用过滤器及StrutsPrepareAndExecuteFilter过滤器,其中StrutsPrepareAndExecuteFilter过滤器是必须要配置的。

当StrutsPrepareAndExecuteFilter过滤器被调用时,Action映射器将查找需要调用的Action对象,并返回Action对象的代理。接下来Action代理将从配置管理器中读取Struts2的相关配置(struts.xml),读取完成后,Action容器调用指定的Action对象,在调用Action对象之前需要经过Struts2的一系列拦截器。拦截器与过滤器的原理相似,从结构图中可以看出它的两次执行顺序是相反的。

当Action处理请求后,将返回相应的结果视图(JSP、FreeMarker等)在这些视图中可以使用Struts标签显示数据及对数据逻辑方面的控制,最后HTTP请求回应给浏览器,在回应的过滤中同样经过过滤器链。

Struts的官方网站是https://struts.apache.org,在该网站上可以获取Struts的所有版本及帮助文档。

开发Struts2项目常见需要的类库文件:

struts2-core:Struts2的核心类库

xwork-core:Xwork的核心类库

ognl:Ognl表达式语言类库

commons-logging:Log4j日志支持类库

freemarker:Freemarker模板语言支持类库

commons-io:处理IO操作的工具类库

commons-fileupload:文件上传支持类库

最新文章

  1. html5 canvas首屏自适应背景动画循环效果代码
  2. Step by Step 创建一个 Web Service
  3. Windows Azure 虚拟机备份
  4. JS-流程控制汇集
  5. 当对服务器端返回的极光推送数据请求时,AFN 的 GET 请求失败如何解决
  6. ASP出500错误怎么办(理论上并不止500错误,其他错误可以同样可以获得更多信息以帮助解决问题)
  7. Dos del参数与作用(/f/s/q)
  8. QT 加载c语言编译的动态库
  9. COM ,Threading Models,apartments,RPC
  10. Hql处理日期格式化问题
  11. windows store app search contract
  12. Hyper-V中安装CentOS分辨率修改
  13. ReactiveCocoa 入门学习 (一)
  14. LeetCode总结 -- 高精度篇
  15. jQuery中间each实施例的方法
  16. JVM基础系列第8讲:JVM 垃圾回收机制
  17. linux 虚拟机配置固定ip
  18. Python学习之路—————day04
  19. 腾讯云主机如何使用root账号登录,不能使用root登录怎么办
  20. day 3 大纲笔记

热门文章

  1. 如何在Java生态圈选择一个轻量级的RESTful框架?
  2. python-----复制文件夹
  3. bzoj2705 [SDOI2012]Longge的问题——因数
  4. bzoj4873
  5. JS复制文件(转)
  6. c++ class does not name a type (转载)
  7. bzoj 2199: [Usaco2011 Jan]奶牛议会【2-SAT】
  8. [IOI1998]Polygon
  9. Linux上安装禅道
  10. BFS POJ 2251 Dungeon Master