Struts2权威指南总结1:概述

来源:互联网 发布:域名服务器的作用 编辑:程序博客网 时间:2024/06/13 23:44

1,Struts2整合了两个优秀的框架,传统的struts和webwork,这保证了struts2作为实际开发框架的成熟性,Struts2保留了Struts1的简单易用性,并且充分利用了webwork的拦截器机制(其实就是AOP思想),将Struts2发展成一个具有高度可扩展性的框架。

Struts2出现以后,完全取代了Struts和webwork框架,Struts2框架团队由Struts2团队和WebWork团队组成。

 

2,早期的web应用都是由静态html页面组成的,后来出现了CGI,CGI可以完成将用户的请求数据保存到服务器的数据库,并可以将服务器的数据响应给浏览器,可以完成浏览器与服务器的交互,不再需要HTML页面。CGI技术开启了动态WEB应用的时代,给了这种技术无限的可能性。但是CGI技术存在很多的缺点,最大的的一个缺点就是开发动态WEB应用的难度非常大,而且性能也存在限制。到1997年时,随着Java的崛起,Servlet技术成为动态WEB应用的主要开发技术,相对CGI,Servlet的优势有:


1998年,微软发布了ASP2.0,他是WindowNT 4 Option Pack的一部分作为IIS4.0的外接式附件。他与ASP1.0的主要区别是他的外部组件是可以初始化的,ASP开始正式作为WEB编程技术。ASP使用VBScript作为脚本语言,语法简单,开发效率非常高,而且VB的程序员很多,所以ASP马上成为使用最广泛的动态WEB开发技术。

随后SUN公司发布了JSP标准,从某种程度上来说,他是对抗ASP的一种动态WEB编程技术。ASP和JSP存在一些区别,首先ASP是VBScript脚本写的,无需编译,而JSP使用Java作为脚本,需要编译,因此JSP要先编译成Servlet,JSP实质上就是一个Servlet,不过书写JSP要比Servlet简单的多。与ASP相比,简单就是JSP的最大优势。

后来人们发现开发动态WEB应用的后期的维护成本越来越大,因为基于ASP或JSP的页面编码是非常混乱的,比如在JSP中,需要使用<% java code ... %>格式的代码来在JSP页面中嵌入Java代码,而这很有可能切割原本的html标签页面,造成局面混乱。所以后期人们渐渐开始找出了MVC开发模式开开发WEB应用。

对于MVC,SUN公司推出的是J2EE(现在是JavaEE),微软公司推出的是ASP.Net技术。

 

3,微软和SUN的MVC的发展历程:

微软:CGI à ASP à ASP.NET

SUN:CGI à Servlet à JSP à J2EE

 

4,Java阵营的动态WEB开发经历了model1和model2时代。

Model1时代就是JSP时代,那时所有的WEB应用都是由JSP开发的,然后再加上少量的JavaBean来处理数据。也就是JSP + JavaBean 时代。JSP身兼View和Controller两种角色。这种模式的代码的重用性非常低。对于小型的应用,可以使用这种模式。如果规模较大,后期维护成本会很大。

Model2时代,就是MVC时代了,JSP只负责显示数据,JavaBean用于存储数据和逻辑处理,而Servlet用于控制数据。即JSP + JavaBean + Servlet时代。

5,关于MVC结构:

从设计模式角度来看,MVC思想非常类似于一个观察者模式,但存在少许差别,观察者模式下的观察者和被观察者是两个相互对等的对象,但对于MVC思想而言,被观察者往往只是单纯的数据体,而观察者只是单纯的视图页面。

 

6,其他常用的MVC模式框架。

(1)JSF:JSF是一个标准,而不是一个产品。大部分的时候,我们所说的JSF都是SUN的参考实现。目前JSF作为JEE5.0的一个部分,与JEE5.0一起发布。

JSF的行为方法在POJO中实现,JSF的Managed Bean无需继承任何的类,无需再表单和模型对象之间实现多余的控制器层。JSF中没有控制器对象,控制器有模型对象实现。

JSF的事件框架可以细化到表单中的每个字段。JSF依然是基于JSP和Servlet的,仍然是JSP和Servlet结构,因此学习相对简单。

JSF的不足:新兴的框架,使用者少,资源不丰富;并不是完全的组件化的框架,依然是JSP/Servlet架构;成熟度有待进一步提高。

(2)Tapestry:不是单纯的MVC架构,更像MVC与模板技术的结合,不仅包含了前端的MVC架构,还包含了是图层的模板技术,使用Tapestry完全可以与Servlet/JSP API 分离,是一种非常优秀的设计。

使用Tapestry就不需要使用JSP技术了,只需要使用Tapestry提供的模板技术即可,Tapestry实现了视图逻辑与业务逻辑的彻底分离。Tapestry使用组件库代替了标签库,没有标签库的概念,避免了标签库与组件结合的问题。Tapestry只有组件或页面两个概念

Tapestry具有很高的代码复用性,任何对象都可以看作可复用的组件,对于对页面灵活度要求相当高的系统,Tapestry是第一选择。Tapestry同时也有精确的错误报告。

但是由于Tapestry的学习曲线相对陡峭,文档也不丰富,所以使用面不广泛。

(3)Spring MVC:Spring提供的MVC框架,在模型,视图,控制器之间提供了非常清晰的划分,各部分耦合度极低。Spring完全基于接口编程,真正实现了与视图无关,视图也不在强求使用jsp,spring的控制器有IoC进行管理,单元测试更加方便。

Spring MVC 框架以DispatcherServlet为核心控制器,这个控制器负责拦截用户的所有请求,将请求分发到对应的业务控制器。

所有的控制器都必须实现Controller接口。Spring MVC 依然是基于JSP/Servlet的API的。

 

7,Struts1技术

Struts1是最早的MVC框架,核心是ActionServlet,由struts1提供,Action控制器组件由用户提供。

Struts1的缺陷:

(1)支持的表现层技术单一:只支持jsp作为表现层技术。

(2)与Servlet API的严重耦合,不容易测试。

(3)代码严重依赖于struts1 API,属于入侵式设计。

 

8,WebWork简介:

来自于另外一个优秀的开源组织opensymphony。这个组织另外的产品有Qutarz、OSWorkFlow等。WebWork的创始人是另一个Java领域的名人Rickard Oberg(JBoss和XDoclet的作者)。WebWork耦合性更低。

与struts1类似,WebWork的核心控制器是ServletDispatcher,由WebWork提供,业务逻辑控制器是Action,由程序员提供,WebWork完成了与Servlet API紧紧耦合的问题。

 

9,struts2的配置文件:

当struts2创建系统的action代理时,需要使用struts2的配置文件。Struts2的配置文件有两份:

l  配置Action的struts.xml文件;

l  配置struts2全局属性的struts.properties文件。

Struts.properties文件用于配制一些常量,例如:

Struts.devMode = true //指定struts2处于开发者模式

Struts.configuration.xml.reload =true//指定当struts2配置文件改变后,Web框架是否重新加载struts2配置文件。

 

10,由于Action返回result时,通过struts.xml配置接收返回的result,例如:

<result name=”” type=””>,name对应返回的result值,而type指定转向的资源类型,可以转向jsp,可以转向FreeMarker或另外一个Action,这也是struts2可以支持多种视图技术的原因。

 

11,struts2的标签库不仅提供了表现层技术处理,而且提供了基本的流程控制功能,还提供了国际化,ajax支持等功能。通过struts标签,开发者可以最大限度的减少页面代码的书写。

Struts2标签库几乎可以完全替代JSTL标签库,而且支持功能强大的OGNL(Object Graph Notation Language)表达式。

 

12,struts2的控制器组件:

是struts2框架的核心,struts的控制器由两部分组成FilterDispatcher和业务控制器Action。

实际上,struts2中起作用的业务控制器不是用户定义的Action,而是系统生成的Action代理,但该Action代理以用户定义的Action为目标。

Struts2的Action的优势:

Action完全是一个POJO,因此具有很好的代码复用性。

Action无需与Servlet API耦合,因此进行单元测试非常简单。

Action类的execute方法仅返回一个字符串作为处理结果,该处理结果可以映射到任何试图,甚至是另一个Action。

Struts2的Action为每一个请求产生一个实例,因此没有现成安全问题。
原创粉丝点击