




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、 认识Struts1、 FrameworkFramework概念并不是很新了,伴随着软件开发的发展,在多层的软件开发项目中,可重用、易扩展的,而且是经过良好测试的软件组件,越来越为人们所青睐。这意味着人们可以将充裕的时间用来分析、构建业务逻辑的应用上,而非繁杂的代码工程。于是人们将相同类型问题的解决途径进行抽象,抽取成一个应用框架。这也就是我们所说的Framework。J2EE体系包括JSP、Servlet、EJB、WEB SERVICE等多项技术。这些技术的出现给电子商务时代的WEB应用开发提供了一个非常有竞争力的选择。怎样把这些技术组合起来,形成一个适应项目需要的稳定架构是项目开发过程中一个非常重要的步骤。此步骤一般主要由架构设计师完成,设计师将根据项目需求,对J2EE体系中的各处技术进行筛选取舍,并考虑到开发过程中的角色分工、后期的运行维护,以及系统扩展性等诸多因素,建立系统的架构。一个成功的软件需要有一个成功的架构,但软件架构的建立是一个复杂而又持续改进的过程,软件开发者们不可能对每个不同的项目做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方案,Struts就是其中之一,Struts是流行的基于J2EE的web层的架构方案,其他常用的基于J2EE的架构方案还有Turbine、RealMothods等。2、Struts的起源Struts最早是作为Apache Jakarta项目的组成部分问世运做。项目的创立者希望通过对该项目的研究,改进和提高Java Server Pages (JSPs)、Servlet、标签库以及面向对象的技术水准。当前最高发行版本为Struts1.1,可以到/Struts下载。Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了帮助你减少在运用MVC设计模型来开发Web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。3、Struts工作原理MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:View(视图)Controller(控制)Model(模型)图1Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates,XSL等等这些表示层组件想结合。Struts的工作原理,如下图2所示:ClientIE or NetscapeControllerActionServletBusiness LogicActionModelJavaBean or EJBViewJSPHTTPRequestAction FormHTTPResponseStruts-config.xml图2控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,tiles等,这有利于分开表现逻辑和程序逻辑。模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或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的安装比较简单,下面的以Tomcat 4.1.24为例,讲述安装过程。首先请到/Struts下载Struts,建议使用release版,现在最高版本为1.1,下载后得到的是一个ZIP文件。将ZIP包解开,可以看到这个目录:lib和webapps,webapps下有一些WAR文件。假设你的Tomcat装在c:Tomcat下,则将那些WAR文件拷贝到C:Tomcatwebapps,重新启动Tomcat即可。打开浏览器,在地址栏中输入:http:/localhost:8080/Struts-example/index.jsp,若能见到“powered by Struts”的深蓝色图标,即说明成功了。这是Struts自带的一个例子,附有详细的说明文档,可以做为初学者的入门教程。另外,Struts还提供了一系统实用对象:XML处理、通过Java reflection APIs自动处理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:JBuilder9thirdparty目录下jakarta-struts-1.1-src.zip包解压到C:JBuilder9extras目录下3、启动jbuilder94、配置Library(1)选择菜单 toolsConfigure Libraries(2)新建一个Library(3)在New Library Wizard对话框中,Name 输入:struts1.1,location可选:User Home,Library paths:add加入C:JBuilder9thirdpartyjakarta-struts-1.1libstruts.jar(4)确定创建Library(5)选中struts1.1,修改Library SettingsClass:C:JBuilder9thirdpartyjakarta-struts-1.1libstruts.jarSource:C:JBuilder9extrasjakarta-struts-1.1-srcsrcshareDocumentationC:JBuilder9thirdpartyjakarta-struts-1.1webappsstruts-documentation.warapiRequired Library:空Framework:在Framework下拉框中,选择struts,会自动出现6个taglib。struts-beanstruts-htmlstruts-logicstruts-templatestruts-tilesstruts-nested(6)点击OK,创建Library成功。关于在其他工具上的配置,如Eclipse 网上有很多资料,自己google一下就可以了三、 开发步骤为了避免流水仗式的称述,枯燥无味。让你尽早看到自己的成果,这里将引用一个简单的例子,让你去熟悉基于Struts的开发步骤:(这里我采用Jbuilder开发环境,可以加快开发速度)1、 实例描述:一个用户注册系统,用户通过网页输入相关信息:注册ID号,密码,EMAIL,若注册成功,则显示注册信息,反之出现注册失败提示信息。以下是相关文件的部分核心代码和创建步骤2、 建立一个Web应用:首先点选Jbuilder主菜单File|New Project 建立一个StrutsDemo工程,接着选File|New 选择Web页中的Web Application建立Web应用程序,这时要在Jsp/Servlet frameworks里勾选Struts1.1(struts1.1) 然后OK3、 创建RegUserForm点选Jbuilder下的NewWebActionForm,在下一步中添加Form的属性,然后下一步,选中Add To struts_config.xml,然后Finish; 会自动生成Form文件,并在Struts_config.xml中将你FormBean加进来,生成的FormBean文件如下:FormBean:RegUserFormpackage strutsDemo;import org.apache.struts.action.*;import javax.servlet.http.*;public class RegUserForm extends ActionForm private String account; private String email; private String password; public String getAccount() return account; public void setAccount(String account) this.account = account; public String getEmail() return email; public void setEmail(String email) this.email = email; public String getPassword() return password; public void setPassword(String password) this.password = password; public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) /*todo: finish this method, this is just the skeleton. 这里验证account 与password是否为空*/ ActionErrors errors = new ActionErrors(); / Account must be entered if (account = null) | (account.length() 1) errors.add(ACCOUNT_ERROR,new ActionError(errors.account.required); / Secret Phrase must be entered if (password = null) | (password.length() 1) errors.add(PASSWORD_ERROR,newActionError(errors.password.required); return errors; public void reset(ActionMapping actionMapping, HttpServletRequest httpServletRequest) account = null; email = null; password = null; 4、 创建RegUserAction 点选Jbuilder下的NewWebAction ,在下一步中的FomBean Name中选刚才创建的RegUserForm ,然后Finish,修改文件如下:ActionBean:RegUserAction package strutsDemo;import org.apache.struts.action.*;import javax.servlet.http.*;public class RegUserAction extends Action public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception ActionErrors errors=new ActionErrors(); RegUserForm regUserForm = (RegUserForm) form; String account = regUserForm.getAccount(); String password = regUserForm.getPassword(); String email = regUserForm.getEmail(); if(email=null) email=; /注册信息到数据库 略 if(account.equals(account) /这里只是静态判断帐号不能为account errors.add(ACCOUNT_REPEAT, new ActionError(errors account.repeat); saveErrors(request, errors); return mapping.getInputForward(); return mapping.findForward(success); 5、 创建Jsp文件reguser.jsp: result.jsp注册页面:reguser.jsp reguserJBuilder Generated Struts JSP for ActionForm strutsDemo.RegUserFormaccount:password:Email:注册结果页面:result.jsp resultRegister Form ResultsHello ,Your password: Your email is: 6、 修改配置文件Struts_config.xml Struts-config.xml: 另外,注意上面配置文件中的 所以还要创建一个ApplicationRperties文件,放到WEB-INFclassesstrutsDemo 下,一些消息信息可以都放在这个文件里,Struts通过它来支持国际化,我们在ApplicationRperties文件添加:errors.account.required = account is required.errors.password.required = password is required.errors account.repeat = account is repeat到此,一个基于Struts框架的程序就完成了,当然只是一个简单的示例,像一些其他的比如通过validation.xml信息验证,在这里并没有出现,目的只是让你认识一个基本的开发过程。下面在Jbuilder里编译打包成strutsDemo.war,放到C:/tomcat/webapps下,在浏览器里输入http:/localhost:8080/strutsDemo/reguser.jsp 就可以看到你的结果了四、 常见问题与解决方法实践是发现问题和解决问题的最好方法。在开发过程中,也遇到了一些问题,这里就将目前遇到的问题和我自己的解决方法总结出来,作为以后的参考,当然如果还有好的方法的话,欢迎大家加进来,共同学习进步吧!1、 如何支持中文2、 如何扩展validation.xml验证文件,写自己的验证函数3、 在写完jsp页面后,测试运行时,找不到Form bean 或页面不能显示4、 对一些类似的操作想放在一起,不想每个操作都写一个Action 5、 strturs_config.xml文件中的 scope属性的值6、 标签中Filter属性问题(想过滤一些其他struts没提供的特殊字符)7、 如何转换ApplicationRperties文件中中文提示消息问题 8、 saveErrors(HttpServletRequest request,ActionErrors errors)函数使用问题9、 Struts 分页问题如何支持中文关于Struts支持中文的问题,大多都是写个过滤器在doFilter函数里设置字符集 package com.web;import javax.servlet.*;import java.io.IOException;public class EncodeFilter implements Filter protected String encoding = null;protected FilterConfig filterConfig = null;protected boolean ignore = true;public void destroy() this.encoding = null; this.filterConfig = null;public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException if (ignore | (request.getCharacterEncoding() = null) String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); chain.doFilter(request, response);public void init(FilterConfig filterConfig) throws ServletException this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter(encoding); String value = filterConfig.getInitParameter(ignore); if (value = null) this.ignore = true; else if (value.equalsIgnoreCase(true) this.ignore = true; else if (value.equalsIgnoreCase(yes) this.ignore = true; else this.ignore = false;然后,在web.xml文件配置一个过滤器,给出encoding和ignore设置过滤*.do就可以了,如下:Set Character Encodingcom.web. EncodeFilter encodingGB2312ignoretrueSet Character Encoding*.do如何扩展validation.xml验证文件,写自己的验证函数Struts本身已经为我们提供了很多验证规则,这些规则即可以在客户端通过javascript验证(可以参考validation-rules.xml文件),也可以在服务器端验证(参考struts源代码中org.apache.struts.validator. FieldChecks类)。但有些时候,比较特殊的验证我们就需要自己写验证规则了,比如验证两个字段值是否相等,在会员注册中经常用的就是输入密码和确认密码一致。在Struts自带的文档中就有这个例子,请参考:http:/localhost:8080/struts-documentation/userGuide/dev_validator.html写一个自己验证类 public class CustomValidator public CustomValidator() super(); public static boolean validateTwoFields(Object bean,ValidatorAction va,Field field, ActionErrors errors, HttpServletRequest request) String value =ValidatorUtil.getValueAsString(bean, field.getProperty(); String sProperty2 = field.getVarValue(secondProperty); String value2 = ValidatorUtil.getValueAsString(bean, sProperty2); if (!GenericValidator.isBlankOrNull(value) try if (!value.equals(value2) errors.add(field.getKey(),Resources.getActionError(request, va, field); return false; catch (Exception e) errors.add(field.getKey(), Resources.getActionError(request, va, field); return false; return true; 然后在validation.xml文件里声明如下 剩下的就是像其他规则一样在Validation.xml文件里添加你想验证FormBean的属性了在写完jsp页面后,测试运行时,找不到Form bean 或页面不能显示在struts 中,当你想测试你的页面能否正常显示时,要确保你的formBean和对应的Action正确,否则,页面会不能正常显示,出现异常。所以最好先写From和Action,(当然Action可以只是一个空的)对一些类似的操作想放在一起,不想每个操作都写一个Action 对于一些类似的操作,可以将每个Action操作写在一个DispatchAction中,定义不同的操作,配置Struts_config.xml文件中的 加入parameter属性,如下: 在页面调用时为/qcby/baoYangListAction.do?method=* 其中*为action定义的函数名称,这样的好处就是避免了每个操作都要写一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030发酵豆粕类药用饲料营养价值再评估与市场定位研究
- 2025-2030反刍动物专用饲料营养价值提升技术研究报告
- 2025-2030动力电池硅碳负极材料膨胀问题解决方案对比分析报告
- 2025-2030动力电池正极材料技术路线对比与产能规划
- 2025-2030动力电池无钴化技术突破对原材料市场影响评估报告
- 2025-2030动力电池回收网络布局优化与梯次利用技术经济性分析报告
- 2025-2030动力电池回收利用商业模式创新与环境效益评估研究报告
- 2025-2030动力电池回收利用产业政策扶持力度及技术路线比较
- 家长浅谈小升初重点准备事项
- 建筑工地消防安全管理标准操作流程
- TBT 3329-2013 电气化铁路接触网隧道内预埋槽道
- 2024版公司100%股权转让协议
- T-CPIA 0056-2024 漂浮式水上光伏发电锚固系统设计规范
- 医院护理不良事件报告表
- 中医开展新技术新项目总结
- 2024年度鲁迅完整版课件
- 雪花猪养殖新模式
- 便利店设计方案
- 电力系统反恐怖知识讲座
- 铁道车辆制动装置及制动新技术全套教学课件
- 化学氧化二氧化氯氧化课件
评论
0/150
提交评论