Struts用户手册翻译(1)

2008-02-23 09:58:16来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

1.1 回到过去!(Struts的简史)

当Java Servlet出现后,许多程序员很快意识到它是一个非常好的东西。它比标准的CGI更快更强大,而且简洁并能无限扩展。但是使用无尽的println()语句把HTML送到浏览器上真是又累有容易出问题,于是JSP出现了,JSP使得能在“外面”写Servlet。于是,程序员们能将Java代码和HTML简单的混合起来,而且具有Servlet的所有优点!The sky was the limit!

很快,Java网页应用成为了以JSP为中心的开发。这本身并不是一件坏事情,但是这对解决流程控制问题和其他一些网页应用特有的问题却帮助甚微。

于是,很清楚的,我们需要另一种模型了。

许多聪明的程序员意识到可以把JSP和Servlet结合到一起来发布网页应用。Servlet可以用来处理控制和流程的问题,JSP可以集中处理令人心烦的HTML。于是,把JSP和Servlet结合起来成为了大家都知道的Model 2(可能是因为单独使用JSP时称为Model 1)。

当然,这里并没有什么新的东西,并且JSP的Model 2很快就被指出是遵循从古老的Smarttalk MVC Framework中抽象出来的传统的模型-视图-控制的设计方式。Java网页开发者现在趋向于认为Model 2和MVC的概念是互通的。在本手册中,我们使用MVC的范例去描述Struts的体系架构,这被命名为Model 2/MVC设计是最合适的了。

Struts项目最早是由Craig R. McClanahan于2000年五月发布的。它为Java社会提供了一个标准的MVC框架。在2001年七月,Struts 1.0发布,同时IOHO。Java Model 2的开发从来不会十分相似的。

1.2 MVC设计方式

在MVC设计方式中,应用程序的流程是被中心控制器调度的。控制器将请求(HTTP的请求)转到相应的处理去。处理是与模型结合的,每个处理都象一个请求和模型之间的适配器。模型代表了,或者说封装了应用程序的逻辑或者状态。控制器控制流程进行到相应的视图。控制一般通过查询一系列的对应(一般是从数据库或者配置文件中)来决定流程的。这在视图与模型之间提供了一种松散的联系,使得应用程序能非常容易的开发和维护。

1.2.1 模型:系统状态和系统逻辑的JavaBeans

基于MVC的模型通常可被划分为两个子系统--系统的内部状态和能改变此状态的行为。类比于语法,我们可以想象状态信息是名词,行为是动词。

许多应用程序使用一系列的JavaBean来代表系统的状态,这些bean的属性代表系统状态的详细信息。根据系统的复杂度,这些bean可以是自我包容的(即它们知道如何保持自己的状态),或者知道怎样从别的组件,例如数据库,搜索引擎,实体EJB,LDAP服务或者其他什么那里得到系统的状态。

大型应用通常将一系列可能的操作作为bean的方法,并调用他们来维护状态信息。例如一个购物车的bean,为每个当前的用户存储了会话信息,这些会话信息中包含了用户选中购买的东西的信息。这个bean应该有个checkOut()的方法,这个方法验证用户的信用卡,将用户的订单送到仓库以便包装和运输。还有一些系统将可能的操作分开表示,例如作为一个会话EJB。

另一方面,在小规模的应用中,操作将会被内嵌到Action类中,这些Action类是Struts控制层的一部分。当逻辑非常简单或者不需要逻辑在别的环境中重用时,是非常适合这样做的。

Struts框架体系对模型访问的支持是足够灵活的,但是我们强烈建议你将逻辑(怎样做)和Action类扮演的角色(做什么)分开来。


1.2.2 视图:JSP和表现组件

基于Struts应用的视图通常使用JSP技术。JSP页可以由被称为“模板”的静态HTML(或XML)加上动态内容组成。这些动态内容是基于对特殊的标记的翻译。JSP环境包含一系列的标准标记,例如<jsp:useBean>。除此之外,有J2EE提供了标准的方法去定义程序员自己的标记,这些自定义的标记被组织成为自定义标记库。Struts包含了一系列的自定义标记库可以用来建立多语言的用户界面,并且和ActionForm bean完美结合。ActionForm得到并校验系统需要的任何信息。


1.2.3 控制器:ActionServlet和ActionMapping

控制器接收用户的请求(通常来自浏览器),然后决定使用什么逻辑来处理,然后使用一个适合的视图来作出反应。在Struts中,控制器的主要部件是一个属于ActionServlet类的Servlet。这个Servlet通过定义一系列的ActionMapping来设置。一个ActionMapping定义了一个请求URI的路径并提供了一个Action类的完整名称。所有的Action都是org.apachestruts.action.Action的子类。Action封装了逻辑类的调用,结果的解释,并最终将程序控制交到一个合适的视图组件去,以对请求作出反应。

Struts在标准的ActionMapping类的基础上,也支持使用更多的属性去对框架进行操作。这使得你可以保存具体应用中的特殊信息并仍然使用Struts的其他功能。另外,Struts可以让你对逻辑定义“逻辑名称”,例如,一个Action的方法可以在不知道具体JSP位置的情况下,要求一个“主菜单”的内容。这些特征可以有效的帮助你将控制逻辑(做什么)和视图逻辑(怎样表示)分离开来。


1.3 Struts的流程控制

Struts框架提供了几个组件去实现MVC中的控制部分,他们包括:控制Servlet,开发者定义的请求处理,另外一些支持对象。

Struts的自定义标记库对MVC中的视图部分提供了直接的支持。他们其中的一些可以访问控制部分的对象,其他一些在开发的时候是非常好用的。其他标记,包括JSTL,也可以在Struts中使用。其他的表现技术,例如Velocity模板和XSLT也可以在Struts中使用。

MVC中的模型通常与具体的项目有关。Struts访问应用的具体事务很方便,但是将具体的编程交给了其他的技术,例如JDBC,EJB,Object Relational Bridge,或者Simpler等等。

让我们来看看所有这些是怎样结合在一起的。

当初始化的时候,控制器读取配置文件(struts-config.xml)并使用它去启动控制对象,这些对象形成了Struts的配置。Struts配置(和另外一些东西)定义了应用中使用的ActionMapping[org.apache.struts.action.ActionMappings]。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JSP实现树型组织架构(3)--管理页面orgManage.jsp

下一篇:一个基于JSF技术的简单示例(部分翻译)