一、Struts2
struts2是流行和成熟的一个基于MVC设计模式的Web应用框架。struts的英文单词意思是支柱、支杆,来源于建筑和旧式飞机使用的金属支架。Struts2原来是Jakarta项目的子项目,后来转到Apache软件基金会下的一个开源子项目,Apache软件基金会是为支持开源项目的非盈组织。使用Struts2的目的是为了帮助我们减少在运用MVC设计模式来开发Web应用的时间。
二、MVC模式
MVC是模型视图控制器(Model View Controller),是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
Java Web开发是由JSP完成的,开发有两种模式:
Model1应用是使用JSP+JavaBean技术,将页面显示和业务逻辑处理分开。使用JSP页面实现页面显示,JavaBean对象用来保存数据和实现业务逻辑。这种开发模式适合小型应用程序开发,进行了初步的表达和内容的分离;因为在数据存取方面都是由JavaBean来操作的。Model1并不能满足复杂的大型应用程序。如果大型应用程序采用Model1,会导致在JSP页面中嵌入大量的代码片段或者Java代码,致使代码可读性和可维护性变得很差。
Model2应用使用JSP+Servlet+JavaBean技术,符合MVC模型。JSP作为视图负责界面显示,JavaBean作为模型负责业务逻辑、持久化操作,Servlet作为控制器负责流程控制,Model1模式的优点是彻底分离了业务逻辑和表现逻辑,简化了JSP页面。并且Servlet统一控制页面的跳转流程,方便了维护。解决的Model1导致的代码可读性和可维护性变差的问题。
三、Struts2的发展过程
1. Struts1于2001年发布,是第一个MVC框架。
2. Struts1框架随着发展暴露的问题开始分化。分化为两个框架:struts2和shale。
3. Struts2于2007年发布。Struts2在传统Struts1的基础上,融合了另一个优秀的web框架WebWork。Struts2以webwork为核心。兼具struts1和webwork的优势,在稳定性、性能等方面有很好的保证。
4. Shale框架是由Struts1分化出来的。这个框架远远超出了Struts1的设计思想,与原有的Struts1关联很少,使用了全新的设计思想。更像一个新框架。
四、Struts2的工作流程
流程图如下:
注释:图片引用自百度Struts2体系结果。
工作流程如下:
1. 在项目部署文件(web.xml)中配置过滤器,配置好过滤器。当web项目启动时,过滤器就会生效。
2. 首先用户通过HttpServletRequest将请求发送过来,经过一系列的过滤器,往下执行。ActionContextCleanUp也是过滤器的一个,是可选的过滤器,不是必选的。这个过滤器主要用于和其它的框架进行集成,比如和Other filter(siteMesh,etc)进行集成。
3. 然后到达FilterDispatcher,这是Struts2 2.0~2.1.2版本的核心过滤器。但是我们在web.xml不配置的不是这个过滤器,而是StrutsPrepareAndExecuteFilter这个过滤器,这个过滤器是从2.1.3版本替代了FilterDispatcher。为什么替代?我们想写一个过滤器,往往会放在Struts2的顶端。将写的过滤器加在Struts2拦截之后(即action之前),通过FilterDispatcher是做不到的,而StrutsPrepareAndExecuteFilter可以,这就是替换的目的。
4. 之后会到达ActionMapper,只有.action后缀的才会到达。到达之后去查找当前请求有没有这个action。如果有,就回到核心过滤器,到达ActionProxy。
5. 通过Configuration Manager读取struts.xml文件来找到具体的Action类,然后通过ActionProxy代理创建Action Invocation反向的实例。
6. 经过一系列拦截器,然后执行Action,返回Result字符串对象,对应显示视图。
7. 在经过一系列的拦截器,通过HttpServletResponse返回用户实例显示。
五、Struts2的核心文件
web.xml文件(项目部署文件)
任何MVC框架都需要与web应用整合,这就不得不借助web.xml文件,只有配置在web.xml文件中Servlet菜会被用用加载。 通常,所有的MVC框架都需要Web应用加载一个核心控制器。对于Struts2框架而言,需要加载StrutsPrepareAndExecuteFilter。只要web应用加载这个过滤器,这个过滤器就会将Struts2框架加载。
struts.xml文件
Struts2的核心配置文件,在开发过程中利用率最高。该文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。 struts.xml中包含的内容有:全局属性、用户请求和相应Action之间的对应关系、Action可能用到的参数和返回结果以及各种拦截器的配置等。
struts.properties文件
Struts2框架的全局属性文件,自动加载。该文件包含很多的key-value(键值对)。该文件完全可以使用constant元素配置在struts.xml文件中。
注释:文件具体内容介绍参看相关文件描述。