Struts简介
副标题#e#
一、Struts的发源
Struts最早是作为Apache Jakarta项目标构成部门,项目标创建者但愿通过对该项目标研究,改造和提高JavaServer Pages 、Servlet、标签库以及面向工具的技能水准。Struts这个名字来历于在修建和旧式飞机中利用的支持金属架。这个框架之所以叫"Struts",是为了提醒我们记着那些支撑我们衡宇,修建,桥梁,甚至我们踩高跷时候的基本支撑。这也是一个表明Struts在开拓Web应用措施中所饰演的脚色的出色描写。当成立一个物理修建时,修建工程师利用支柱为修建的每一层提供支持。同样,软件工程师利用Struts为业务应用的每一层提供支持。它的目标是为了辅佐我们淘汰在运用MVC设计模子来开拓Web应用的时间。我们仍然需要进修和应用该架构,不外它将可以完成个中一些沉重的事情。假如想殽杂利用Servlets和JSP的利益来成立可扩展的应用,Struts是一个不错的选择。
早期Smalltalk 措施语言便回收了MVC(Model-View -Controller) 模式( Patterns ) 以增加措施代码弹性,MVC模式将措施代码整理切割为三部份,Model 部门是业务与应用规模( Business domain) 相关逻辑、打点状态之工具,Controller 部门吸收来自View 所输入的资料并与Model 部门互动,是业务流程节制( Flow Control) 之处,View 部门则认真揭示资料、吸收利用者输入资料。在Java 应用中,JFC/Swing、AWT、JSP 皆是可用作View 之技能规格,而JavaBean 与Enterprise JavaBean 规格则可用于Model 措施代码,一旦应用措施以MVC 模式加以适当之支解,Model 部门措施代码可在差异利用者接口外观之应用措施中反复利用。
跟着JSP 与Servlet 技能大量应用于以Web 为基本之应用措施,Java 开拓人员群体认为应以较佳之模式以晋升Web 应用措施之可维护性与反复利用性。早期JSP 规格书中曾罗列两种可行之JSP 应用架构,别离为Model1 与Model 2。
在Model 1 架构中,JSP 直接处理惩罚Web 欣赏器送来之请求( Request ),并辅以JavaBean 处理惩罚应用相关逻辑。Model 1 架构纯真编写较量容易,但在Model 1 中JSP 大概同时负担View 与Controller 脚色,两类措施代码有大概稠浊而不易维护。而Model 2 中将Servlet 纳入架构中饰演前端Controller 脚色,将Web 欣赏器送出之请求会合送至Servlet ,Servlet 可会合打点利用者登入、权限节制、多国语言转换等前置处理惩罚,再视需求转向给对应之JSP 处理惩罚。Model 2 中回收了较佳之MVC 模式,但增加了编写巨大度。
Struts是Apache软件基金下Jakarta项目标一部门。除Struts之外,尚有其他乐成的开源产物,包罗Tomcat, Ant 和Velocity。2000 年Craig R. McClanahan 先生孝敬了他编写的JSP Model 2 架构之Application Framework 原始措施代码给Apache 基金会,成为Apache Jakarta 打算Struts Framework 前身。
开始的代码基本从2000年5月开始开拓,直到2001年6月,1.0版本宣布。有30 多个开拓者参加进来,并有数千人参加到接头组中。Struts 代码基本由一个志愿的Commnitter团队来打点。到2002年,Struts 小组共有9个志愿Commnitter。
Struts框架的主要架构设计和开拓者是Craig R.McClanahan。Craig 也是Tomcat 4的主要架构师,以及Java Web Services Developer Pack的主要架构师和实现者。他此刻是Sun的JavaServer Faces (JSR-127) 以及J2EE平台的Web层架构的类型率领。Craig R. McClanahan 先生是JCP ExpertGroup 成员之一,曾参加JSP 规格拟定与Tomcat 4 之编写,因此Struts Framework 广受Java 开拓人员群体所重视。Borland 自2002 年底开始于开拓东西JBuilder 中支持Struts Framework。
二、Struts安装
1、安装Struts需要的软件
Java Development Kit– 我们需要download和install 1.2(或之后)版本的JDK。
下载地点:
http://java.sun.com/j2se
Servlet Container — 凡是的选择是下载Tomcat(至少是3.1版,推荐利用4.0以上的版本)。
下载地点:
http://jakarta.apache.org/tomcat
Ant Build System — 假如我们通过Struts源码宣布包安装,我们必需下载1.1或之后版本的ant build system。在我们通过Struts来开拓我们本身的Web应用措施是,推荐利用ant来build我们的应用。
下载地点:
http://jakarta.apache.org/ant
Servlet API Classes — 为了编译Structs本身,或应用措施利用Struts,我们需要一个包括Servlet和JSP API工具的servlet.jar包。大大都Servlet container(譬喻Tomcat)已经自带了这个文件。不然,我们必须下载:http://jakarta.apache.org/builds/jakarta-servletapi
XML Parser — Structs需要一个与Java API for XML Parsing(JAXP)规格兼容的XML处理惩罚器,我们可以利用Xerces。
下载地点:
http://xml.apache.org/xerces-j
Xalan XSLT Processor — 假如我们通过Structs源码宣布版来结构我们的Structs系统,我们必需下载和安装1_2_D01或之后版本的Xalan XSLT处理惩罚器(Xerces中已自带Xalan)。这个处理惩罚器用于将基于XML的Structs文档转换为Html文档。
#p#副标题#e#
2、通过源码结构Structs
1)下载Structs的源码宣布包。
2)配置ANT_HOME情况变量,指向我们的Ant目次。
3)配置JAVA_HOME情况变量,指向我们的JDK目次。
4)配置SERVLETAPI_HOME情况变量,指向我们的Servlet API目次(假如我们的CLASSPATH已经包括了servlet.jar,就不需要指定该目次)
5)将Structs的源码宣布包举办解包。
6)进入Structs目次,运行以下呼吁:
./build.sh dist
该呼吁将建设Struts的二进制宣布包,目次在../dist/structs(相对付我们的编译目次)。
3、通过Struts的二进制宣布包安装Structs
1)下载Struts的二进制宣布版。
2)将Struts的二进制宣布版举办解包。(假如我们是通过Struts源码结构Struts,build的功效就已经是已解包的Struts)。解包后的Struts包括以下内容:
lib/struts.jar — 这个文件包括了Struts的所有Java工具。我们需要把它拷贝到我们的Web应用的WEB-INF/lib目次。
lib/structs.tld –这是一个"tag library descriptor"文件,它描写了Struts库的自由tag。需要将它拷贝到我们的Web应用的WEB-INF目次。
#p#分页标题#e#
webapps/struts-documentation.war — 这是一个"web application archive"文件,包括了所有的Struts文档。我们可以将它安装到支持Servlet API 2.2或之后版本的servlet container(推荐利用tomcat)中。
webapps/struts-example.war — 这是一个web应用实例,它遍及地演示了Struts的很多成果。我们可以将它安装到兼容Servlet2.2或之后版本以及JSP1.1或之后版本类型的servlet容器中(推荐利用tomcat)。
webapps/struts-test.war — 这个web应用包括了Struts支持的很多tag的测试网页,可以作为利用Struts tag的例子。
4、Struts的根基组件包
安装好的struts约莫有15包,近200个类所构成,并且数量还在不绝的扩展。在此我们不能一一先容,只能罗列几个主要的扼要的先容一下。下表说明白今朝struts api中根基的几个组件包,包罗
action,actions,config,util,taglib,validator。如下表1所示:
org.apache.struts.action |
根基上,节制整个struts framework的运行的焦点类、组件都在这个包中,好比我们上面提到的节制器ActionServlet。已经Action,ActionForm,ActionMapping等等。struts1.1比1.0多了 DynaActionForm 类。增加了动态扩展生成FormBean成果 |
org.apache.struts.actions |
这个包是主要浸染是提供客户的http请求和业务逻辑处理惩罚之间的特定适配器转换成果,而1.0版本中的部门动态增删FromBean的类,也在struts1.1中被Action包的DynaActionForm组件所代替 |
org.apache.struts.config |
提供对设置文件struts-config.xml元素的映射。这也是sturts1.1中新增的成果 |
org.apache.struts.util |
Strtuts为了更好支持web application的应用,体统了一个些常用处事的支持,好比Connection Pool和Message Source。具体信息请参考http://jakarta.apache.org/struts/api/org/apache/struts/util/package-summary.html |
org.apache.struts.taglib |
这不是一个包,而是是一个客户标签类的荟萃。下面包罗Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个用于构建用户界面的标签类。 |
org.apache.struts.validator |
Struts1.1 framework中增加了validator framework,用于动态的设置from表单的验证。具体信息请参阅 http://home.earthlink.net/~dwinterfeldt/ |
下面的图则显现了这几个组件包之间的干系。个中action是整个struts 架构的焦点。
三、Struts 设置与组件先容
有关struts组件设置struts-config.xml文件说明在前面的文章中已经先容过,这里就不再说了,下面主要先容框架中组件与设置。
下表列出了Struts的焦点类,即对应的经典的MVC组件职责。
表格2 焦点Struts 类和MVC 的对应
类 | 描写 |
ActionForward | 用户指向可能视图选择 |
ActionForm | 状态改变的数据 |
ActionMapping | 状态改变事件 |
ActionServlet | 节制器,接管用户请求和状态改变,以及发出视图选择 |
Action | 节制器的一部门,于模子交互,执行状态改变或状态查询,以及汇报ActionServlet 下一个选择的视图 |
#p#分页标题#e#
除了这些焦点类, Struts 利用一些设置文件和视图助手(view helpers)来相同节制器和模子。下表列出了Struts 设置文件和描写了他们在架构中的脚色。
表格3 Strtuts 设置文件
文件 | 目标 |
ApplicationResources.properties | 存储当地化信息和标签,以使应用可以国际化 |
struts-config.xml | 存储节制器工具的缺省设置,包罗模子支持的用户指向,状态改变,状态查询 |
为将Struts设置数据袒露给视图,框架以JSP标签的形式提供了大量的助手类,如表4 Strtus 视图助手。
标志库描写符 | 目标 |
struts-html.tld | 扩展HTML Form的JSP标志 |
struts-bean.tld | 扩展处理惩罚JavaBean的JSP标志 |
struts-logic.tld | 扩展测试属性值的JSP标志 |
节制器组件的设置
框架中的节制器组件是有org.apache.struts.action.ActionServlet类实现的,这个类是javax.servlet.http.HttpServlet类的扩展。
ActionServlet设置:
我们需要在web.xml中声明ActionServlet,而且将它设置成启动时举办加载。以下为可以设置的初始化参数:
参数 | 默认值 | 描写 |
application | Null | 应用措施的资源荟萃的类 |
bufferSize | 4096 | 文件上传的缓冲区巨细 |
config | /WEB-INF/struts-config.xml | 设置文件的位置和名称 |
content | Text/html | 默认的内容范例 |
debug | 0 | 措施调试的级别 |
detail | 0 | 措施调试细节的级别 |
factory | Null | 动静资源工场,用于国际化中表明动静资源 |
formBean | org.apache.struts.action.ActionFormBean | 封装ActionForm bean信息的类的名称 |
forward | Org.apache.struts.action.ActionForward | 封装ActionForward工具信息的类的名称 |
locale | True | 为true,将在用户会话中存储一个当地工具 |
mapping | Org.apache.struts.action.ActionForward | 封装ActionMapping信息的类的名称 |
maxFileSize | 250M | 上传文件的最大尺寸 |
multipartClass | Org.apache.struts.action.ActionForward | 处理惩罚多部门请求的类的名称 |
noCache | False | HTTP标头是否要配置为克制缓寸 |
Null | True | 配置为true,对付无效的信息要害字将返回null |
tempDir | 作为一个servlet参数提供应措施的事情目次 | 处理惩罚下载文件是利用的姑且事情目次 |
validate | True | 是否利用新名目标设置文件 |
vallidating | True | 是否对设置文件举办有效性阐明 |
大大都环境下,尺度的servlet就可以或许满意用户需要。
#p#分页标题#e#
第一次收到特定请求的URI时,ActionServlet将适当的Action类举办实例化,然后ActionServlet在Action类实例中以servlet为变量名存储一个引用。当被实例化后,Action类会被暂存以备再用。
错误处理惩罚
struts提供了两个类来处理惩罚错误:ActionErrors和ActionError,它们都扩展org.apache.struts.action。ActionErrors生存着ActionError工具的荟萃,个中每一个代表了独立的错误信息。每个ActionError都包括了要害字,可以或许映射到资源文件中存储的错误信息,而这个资源文件是在ActionServlet初始化参数中指定的。
四、Struts的运行
可通过以下的步调在我们本身的应用措施中利用Struts:
1、将Struts目次的lib/struts.jar拷贝到web应用的WEB-INF/lib目次。
2、将Struts目次的lib/struts*.tld拷贝到web应用的WEB-INF目次。
3、修改Web应用目次的WEB-INF/web.xml文件,增加一个<servlet>元素来界说controller servlet,增加一个<servlet-mapping>元素来成立URI请求与servlet的对应干系。可以参照Struts例子中的WEB-INF/web.xml文件来相识具体的语法要求。
4、修改Web应用目次的WEB-INF/web.xml文件,使之包括以下的tag库界说:
<taglib>
<taglib-uri>/WEB-INF/struts.tld</taglib-uri>
<taglib-location>/WEB-INF/struts.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
5、建设一个WEB-INF/action.xml文件来界说我们的web应用的action映射干系。可以参照Struts例子中的action.xml文件来相识具体的语法要求。
6、在利用Struts tag库的JSP网页中插手以下tag库界说:
<@ taglib uri="/WEB-INF/struts.tld" prefix="struts" %>
<@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
7、最后,在编译我们的web应用的java措施时,不要忘了在CLASSPATH中包括struts.jar文件。
五、Struts优缺点
利益:
Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大利益。使开拓者能更深入的相识其内部实现机制。除此之外,Struts的利益主要会合表此刻两个方面:Taglib和页面导航。Taglib是Struts的标志库,灵勾当用,能大大提高开拓效率。别的,就今朝海内的JSP开拓者而言,除了利用JSP自带的常用标志外,很少开拓本身的标志,或者Struts是一个很好的起点。
关于页面导航,我们认为那将是此后的一个成长偏向,事实上,这样做,使系统的脉络越发清晰。通过一个设置文件,即可掌握整个系统各部门之间的接洽,这对付后期的维护有着莫大的长处。尤其是当另一批开拓者接办这个项目时,这种优势浮现得越发明明。
缺点:
Taglib是Struts的一大优势,但对付初学者而言,却需要一个一连进修的进程,甚至还会打乱我们网页编写的习惯,可是,当我们习惯了它时,我们会以为它真的很棒。Struts将MVC的Controller一分为三,在得到布局越发清晰的同时,也增加了系统的巨大度。毫无疑问,要领略 Struts 必需接管必然的培训。跟着变革的不绝插手,这有时会令人很沮丧。
Struts从发生到此刻还不外3-4年时间,就已慢慢越来越多运用于贸易软件。固然它此刻尚有不少缺点,但它是一种很是优秀的J2EE MVC实现方法,假如我们的系统筹备回收J2EE MVC架构,那么,不妨思量一下Struts。
Struts 是一种基于 Web 的 MVC 办理方案,所以必需用 HTML、JSP 文件和 servlet 来实现它,Struts 需要支持 JSP 1.1 和 Servlet 2.2 类型的 servlet 容器。进修、领略和把握Struts是我们每个基于J2EE软件开拓人员一门必修的课程,也是我们对企业J2EE技能应用的进一步深化。