Struts2是基于MVC的轻量级的web应用框架。
所谓框架:就是能完成一定功能的半成品软件。在没有框架的时候,所有的工作都要乖乖的从零做起;有了框架,它为我们提供了一定的功能,就可以在框架的基础上做起,大大提高开发的效率和质量。
web应用框架,这说明Struts2的应用范围是Web应用而不是其它地方。Struts2更注重将Web应用领域的日常工作和常见问题抽象化,提供一个平台让我们能快速的完成Web应用开发。
轻量级:是相对于重量级而言,指的是Struts2在运行的时候,对Web服务器的资源消耗较少,比如CPU、内存等,但是运行速度相对较快。
基于MVC,说明基于Struts2开发的Web应用自然就能实现MVC,也说明Struts2着力于在MVC的各个部分为我们的开发提供相应帮助。
Struts2基本组成
WebWork与Struts合并之后,根据功能的细分和设计,拆分出一个叫xwork的部分,用来处理与Web无关的部分,也就是与Servlet无关的部分,比如:用户数据的类型转换、动作调用之前的数据验证、动作的调用等等。其余与Web相关的部分,也就是与servlet相关的部分,被称为struts2部分。因此请注意,此处的“Struts2”可以理解为一个模块,是Struts2框架的一部分,如:如何接收用户请求的数据,如何跳转到下一个页面等等。其中struts2部分调用了xwork部分,但是xwork部分是不依赖于Struts2部分的,xwork是完全独立的、纯Java的应用。因此,可以用下图来表示struts2部分和xwork部分的关系。
Struts2能干什么
了解了Struts2是什么和有什么后,看看Struts2可以做什么?
Struts2通过简单、集中的配置来调度动作类,使得我们配置和修改都非常容易。
Struts2提供简单、统一的表达式语言来访问所有可供访问的数据。
Struts2提供内存式的数据中心,所有可供访问的数据都集中存放在内存中,在调用中不需要将数据传来传去,都去这个内存数据中心访问即可。
Struts2提供在动作类执行的前或后附加执行一定功能的能力,能实现AOP。
Struts2提供标准的、强大的验证框架和国际化框架,且与Struts2的其他特性紧密结合。
类似的功能很多,不胜枚举。
3 、Struts2和MVC Struts2是一种基于MVC的Web应用框架,下面看看Struts2和MVC的关系。这里只是先讲一下Struts2是如何跟MVC对应的,其中一些名词所代表的具体功能,比如前端控制器(FilterDispatcher)、动作(Action)、结果(Result)等。在之后的学习中会不断深入具体的细节。
控制器——FilterDispatcher
用户请求首先到达前端控制器FilterDispatcher。FilterDispatcher负责根据用户提交的URL和struts.xml中的配置,来选择合适的动作(Action),让这个Action来处理用户的请求。FilterDispatcher其实是一个过滤器(Filter,servlet规范中的一种web组件),它是Struts2核心包里已经做好的类,不需要我们去开发,只是要在项目的web.xml中配置一下即可。FilterDispatcher体现了J2EE核心设计模式中的前端控制器模式。
动作——Action
在用户请求经过FilterDispatcher之后,被分发到了合适的动作Action对象。Action负责把用户请求中的参数组装成合适的数据模型,并调用相应的业务逻辑进行真正的功能处理,获取下一个视图展示所需要的数据。Struts2 的Action,相比于别的web框架的动作处理,它实现了与Servlet API的解耦,使得Action里面不需要再直接去引用和使用HttpServletRequest与HttpServletResponse等接口。 因而使得Action的单元测试更加简单,而且强大的类型转换也使得我们少做了很多重复的工作。
视图——Result
视图结果用来把动作中获取到的数据展现给用户。在Struts2中有多种优秀的结果展示方式,常规的jsp,模板 freemarker、velocity,还有各种其它专业的展示方式,如图表jfreechart、报表JasperReports、将XML转化为 HTML的XSLT等等。而且各种视图结果在同一个工程里面可以混合出现。
看到这里,大家应该大致知道了Struts2是什么,能干什么,粗略的了解到Struts2里面有什么了,接下来就是究竟如何使用Struts2来开发基于MVC的Web应用了。