Struts1x 浅析.docx
- 文档编号:3884463
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:15
- 大小:67.36KB
Struts1x 浅析.docx
《Struts1x 浅析.docx》由会员分享,可在线阅读,更多相关《Struts1x 浅析.docx(15页珍藏版)》请在冰豆网上搜索。
Struts1x浅析
一、认识Struts
1、Framework
Framework概念并不是很新了,伴随着软件开发的发展,在多层的软件开发项目中,可重用、易扩展的,而且是经过良好测试的软件组件,越来越为人们所青睐。
这意味着人们可以将充裕的时间用来分析、构建业务逻辑的应用上,而非繁杂的代码工程。
于是人们将相同类型问题的解决途径进行抽象,抽取成一个应用框架。
这也就是我们所说的Framework。
J2EE体系包括JSP、Servlet、EJB、WEBSERVICE等多项技术。
这些技术的出现给电子商务时代的WEB应用开发提供了一个非常有竞争力的选择。
怎样把这些技术组合起来,形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤。
此步骤一般主要由架构设计师完成,设计师将根据项目需求,对J2EE体系中的各处技术进行筛选取舍,并考虑到开发过程中的角色分工、后期的运行维护,以及系统扩展性等诸多因素,建立系统的架构。
一个成功的软件需要有一个成功的架构,但软件架构的建立是一个复杂而又持续改进的过程,软件开发者们不可能对每个不同的项目做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方案,Struts就是其中之一,Struts是流行的基于J2EE的web层的架构方案,其他常用的基于J2EE的架构方案还有Turbine、RealMothods等。
2、Struts的起源
Struts最早是作为ApacheJakarta项目的组成部分问世运做。
项目的创立者希望通过对该项目的研究,改进和提高JavaServerPages(JSPs)、Servlet、标签库以及面向对象的技术水准。
当前最高发行版本为Struts1.1,可以到http:
//jakata.apache.org/Struts下载。
Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。
它的目的是为了帮助你减少在运用MVC设计模型来开发Web应用的时间。
你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。
如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。
3、Struts工作原理
MVC即Model-View-Controller的缩写,是一种常用的设计模式。
MVC减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:
Struts是MVC的一种实现,它将Servlet和JSP标记(属于J2EE规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。
Struts有一组相互协作的类(组件)、Serlvet以及jsptaglib组成。
基于struts构架的web应用程序基本上符合JSPModel2的设计标准,可以说是MVC设计模式的一种变化类型。
根据上面对framework的描述,我们很容易理解为什么说Struts是一个webframwork,而不仅仅是一些标记库的组合。
但Struts也包含了丰富的标记库和独立于该框架工作的实用程序类。
Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。
在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和ObjectRelationBridge。
在视图层,Struts能够与JSP,VelocityTemplates,XSL等等这些表示层组件想结合。
Struts的工作原理,如下图2所示:
控制:
通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充ActionFrom(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问javabean或调用EJB。
最后动作类把控制权传给后续的JSP文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
视图:
主要由JSP生成页面完成视图,Struts提供丰富的JSP标签库:
Html,Bean,Logic,tiles等,这有利于分开表现逻辑和程序逻辑。
模型:
模型以一个或多个javabean的形式存在。
这些bean分为三类:
ActionForm、Action、JavaBeanorEJB。
ActionForm通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用JavaBean或EJB等。
流程:
在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。
每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。
核心:
Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。
二、Struts安装配置
1、Struts的安装比较简单,下面的以Tomcat4.1.24为例,讲述安装过程。
首先请到http:
//jakarta.apache.org/Struts下载Struts,建议使用release版,现在最高版本为1.1,下载后得到的是一个ZIP文件。
将ZIP包解开,可以看到这个目录:
lib和webapps,webapps下有一些WAR文件。
假设你的Tomcat装在c:
\Tomcat下,则将那些WAR文件拷贝到C:
\Tomcat\webapps,重新启动Tomcat即可。
打开浏览器,在地址栏中输入:
http:
//localhost:
8080/Struts-example/index.jsp,若能见到“poweredbyStruts”的深蓝色图标,即说明成功了。
这是Struts自带的一个例子,附有详细的说明文档,可以做为初学者的入门教程。
另外,Struts还提供了一系统实用对象:
XML处理、通过JavareflectionAPIs自动处理JavaBeans属性、国际化的提示和消息等
2、关于Struts配置,由于我是采用Jbuilder9为开发工具,这里主要说一下Struts在Jbuilder中配置:
Jbuilder本身自带已经集成了Struts1.0,但目前的开发大部分都是在Struts1.1下,所以下面就介绍Struts1.1在Jbuilder中的配置:
1、下载
jakarta-struts-1.1.zip包;jakarta-struts-1.1-src.zip包
2、将jakarta-struts-1.1.zip包解压到C:
\JBuilder9\thirdparty目录下
jakarta-struts-1.1-src.zip包解压到C:
\JBuilder9\extras目录下
3、启动jbuilder9
4、配置Library
(1)选择菜单tools\ConfigureLibraries
(2)新建一个Library
(3)在NewLibraryWizard对话框中,
Name输入:
struts1.1,
location可选:
UserHome,
Librarypaths:
add加入C:
\JBuilder9\thirdparty\jakarta-struts-1.1\lib\struts.jar
(4)确定创建Library
(5)选中struts1.1,修改LibrarySettings
Class:
C:
\JBuilder9\thirdparty\jakarta-struts-1.1\lib\struts.jar
Source:
C:
\JBuilder9\extras\jakarta-struts-1.1-src\src\share
DocumentationC:
\JBuilder9\thirdparty\jakarta-struts-1.1\webapps\struts-documentation.war\api
RequiredLibrary:
空
Framework:
在Framework下拉框中,选择struts,会自动出现6个taglib。
struts-bean
struts-html
struts-logic
struts-template
struts-tiles
struts-nested
(6)点击OK,创建Library成功。
关于在其他工具上的配置,如Eclipse网上有很多资料,自己google一下就可以了
三、开发步骤
为了避免流水仗式的称述,枯燥无味。
让你尽早看到自己的成果,这里将引用一个简单的例子,让你去熟悉基于Struts的开发步骤:
(这里我采用Jbuilder开发环境,可以加快开发速度)
1、实例描述:
一个用户注册系统,用户通过网页输入相关信息:
注册ID号,密码,EMAIL,若注册成功,则显示注册信息,反之出现注册失败提示信息。
以下是相关文件的部分核心代码和创建步骤
2、建立一个Web应用:
首先点选Jbuilder主菜单File|NewProject建立一个StrutsDemo工程,接着选File|New选择Web页中的WebApplication建立Web应用程序,这时要在Jsp/Servletframeworks里勾选Struts1.1(struts1.1)然后OK
3、创建RegUserForm
点选Jbuilder下的NewWebActionForm,在下一步中添加Form的属性,然后下一步,选中AddTostruts_config.xml,然后Finish;会自动生成Form文件,并在Struts_config.xml中将你FormBean加进来,生成的FormBean文件如下:
FormBean:
RegUserForm
packagestrutsDemo;
importorg.apache.struts.action.*;
importjavax.servlet.http.*;
publicclassRegUserFormextendsActionForm{
privateStringaccount;
privateStringemail;
privateStringpassword;
publicStringgetAccount(){
returnaccount;
}
publicvoidsetAccount(Stringaccount){
this.account=account;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicActionErrorsvalidate(ActionMappingactionMapping,HttpServletRequesthttpServletRequest){
/**@todo:
finishthismethod,thisisjusttheskeleton.
这里验证account与password是否为空
*/
ActionErrorserrors=newActionErrors();
//Accountmustbeentered
if((account==null)||(account.length()<1)){
errors.add("ACCOUNT_ERROR",newActionError("errors.account.required"));
}
//SecretPhrasemustbeentered
if((password==null)||(password.length()<1)){
errors.add("PASSWORD_ERROR",
newActionError("errors.password.required"));
}
returnerrors;
}
publicvoidreset(ActionMappingactionMapping,HttpServletRequesthttpServletRequest){
account=null;
email=null;
password=null;
}
4、创建RegUserAction
点选Jbuilder下的NewWebAction,在下一步中的FomBeanName中选刚才创建的RegUserForm,然后Finish,修改文件如下:
ActionBean:
RegUserAction
packagestrutsDemo;
importorg.apache.struts.action.*;
importjavax.servlet.http.*;
publicclassRegUserActionextendsAction{
publicActionForwardexecute(
ActionMappingmapping,
ActionFormform,
HttpServletRequestrequest,
HttpServletResponseresponse)
throwsException{
ActionErrorserrors=newActionErrors();
RegUserFormregUserForm=(RegUserForm)form;
Stringaccount=regUserForm.getAccount();
Stringpassword=regUserForm.getPassword();
Stringemail=regUserForm.getEmail();
if(email==null)email="";
//注册信息到数据库略
if("account".equals(account))//这里只是静态判断帐号不能为account
{
errors.add("ACCOUNT_REPEAT",newActionError("errorsaccount.repeat"));
saveErrors(request,errors);
returnmapping.getInputForward();
}
returnmapping.findForward("success");
}
}
5、创建Jsp文件reguser.jsp:
result.jsp
注册页面:
reguser.jsp
<%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%>
<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%>
<%@pagecontentType="text/html;charset=GBK"%>
html>
JBuilderGeneratedStrutsJSPforActionFormstrutsDemo.RegUserForm
errors/> formaction="/regUserAction.do"method="POST"> account: textproperty="account"/> password: passwordproperty="password"/> Email: textproperty="email"/> submitproperty="submit"value="Submit"/> resetvalue="Reset"/> form> html> 注册结果页面: result.jsp <%@pagecontentType="text/html;charset=GBK"%> <%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%> <%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%> result Hello writename="regUserForm"property="account"/>, Yourpassword: writename="regUserForm"property="password"/> Youremailis: writename="regUserForm"property="email"/>RegisterFormResults