Struts应用helloapp_第1页
Struts应用helloapp_第2页
Struts应用helloapp_第3页
Struts应用helloapp_第4页
Struts应用helloapp_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、商品内容:1 .分析 helloapp 应用的需求接受用户输入的姓名,然后返回字符串hello! 。如果用户没有输入姓名就提交表单,将返回出错信息,提示用户首先输入姓名。如果用户输入姓名为“monster”,将返回出错信息,拒绝向 monster打招呼。2 .运用 struts 框架 模型包括一个javabean组件personbean ,它有一个username 属性,代表用户输入的名字。它提供了 get/set 方法,分别用于读取和设置username 属性,它还提供一个 save() 方法, 负责把 username 属性保存到持久化存储系统中, 如数据库或文件系统。对于更为复杂的 we

2、b应用,javabean组件可以作为ej web服务的前端组件。 视图包括一个jsp文件hello.jsp ,它提供用户界面,接受用户输入的姓名。视图还包括一个actionformbean ,它用来存放表单数据,并进行表单验证,如果用户没有输入姓名就提交表单,将返回出错信息。 控制器包括一个action类helloaction ,它完成三项任务:1 .进行业务逻辑验证,如果用户输入的姓名为 monster, 将返回错误消息; 2 调用模型组件personbean 的save() 方法,保存用户输入的名字; 3 决定将合适的视图组件返回给用户。除了创建模型、视图和控制器组件,还需要创建strut

3、s的配置文件struts-config.xml ,它可以把这些组件组装起来,使它们协调工作。此外,还需要创建整个 web 应用的配置文件web.xml 。3.创建视图组件本例中,视图包括两个组件: 一个sp 文件:hello.jsp 一下ctionformbean: helloformbean(helloform.java) 。其中, jsp 中有代码 当用户提交了 html 表单后, struts 框架将自动把表单数据组装到 actionformbean中。 actionformbean 中的属性和html 表单中的字段一一对应。 actionformbean还提供了数据验证方法,以及把属性

4、重新设置为默认值的方法。struts 框架中定义的actionform 类是抽象的, 必须在应用中创建它的子类, 来存放具体的 html 表单数据。helloform.java 中有两个特殊的方法:validate。:用于表单验证。reset():把属性重新设置为默认值。本例中的资源文件是perties,用来存放数据信息。4.创建控制器组件: helloaction.java控制器组件包括actionservlet 类和 action 类。 actionservlet 类是 struts 框架自带的,它是整个 struts 框架的控制枢纽,通常不需要扩展。 str

5、uts 框架提供了可供扩展的action 类,它用来处理特定的 http 请求。所有的action 类都是 org.apache.struts.action.action 的子类, action 子类应该覆盖父类的execute() 方法。helloaction.java 的代码如下:packagehello;importjavax.servlet.http.httpservletrequest;importjavax.servlet.http.httpservletresponse;importorg.apache.struts.action.action;importorg.apache.

6、struts.action.actionform;importorg.apache.struts.action.actionforward;importorg.apache.struts.action.actionmapping;importorg.apache.struts.action.actionmessage;importorg.apache.struts.action.actionmessages;importorg.apache.struts.util.messageresources;importcom.yourcompany.struts.personbean;importco

7、m.yourcompany.struts.form.helloform;/*struts.actionpath=/helloname=helloforminput=/form/hello.j spscope=requestvalidate=true*/publicfinalclasshelloactionextendsaction/*methodexecute*parammapping:actionmapping 包含了这个action 的配置信息和 struts-config.xml 文件中的 元素对应。*paramform:actionform 包含了用户的表单数据,当 struts 框架

8、调用 execute() 方法时,actionform 中的数据*已经通过了表单验证。*paramrequest:httpservletrequest 当前的 http 请求对象*paramresponse:httpservletresponse 当前的 http 响应对象*returnactionforward*/publicactionforwardexecute(actionmappingmapping,actionformform,httpservletrequestrequest,httpservletresponseresponse)throwsexception/*thesema

9、ssagecomefromtheapplicationrpertiesfile*getresources(httpservletrequestrequest)方法返回当前默认的 messageresource 对象,它封装了 resource*bundle 中的文本内容。*接下来 action 类就可以通过 messageresource 对象来访问文本内容。例如:如果要读取消息 key*为hello.jsp.title对应的文本内容,可以调用 messageresources 类的 getmessage(stringkey)方法 :*stringtitle=messa

10、ges.getmessage(hello.jsp.title);*messageresourcesmessages=getresources(request);* /*validatetherequestparametersspecifiedbytheuser*note:basicfieldvalidationdoneinhelloform.java*businesslogicvalidationdoneinhelloaction.java* 如果用户输入的姓名为 monster ,将创建包含错误信息的 acrionmessage 对象,actionmessage 对象被保存* 至|jacti

11、onmessages对象中。接下来调用在 action 基类中定义的saveerrors()方法,它负责把actionmessages* 对象保存到request 范围内。 最后返回 actionforward 对象, struts 框架会根据actionforward对象包含的转发* 信息把请求转发到恰当的视图组件,视图组件通过 标签把 request 范围内的actionmessages 对象* 中包含的错误消息显示出来,提示用户修改错误。* */actionmessageserrors=newactionmessages();stringusername=(string)(hellofo

12、rm)form).getusername();stringbadusername=monster;if(username.equalsignorecase(badusername)/equalsignorecase 方法同 vequals ,只不过 equalsignorecase 是忽略大小写。errors.add(username,newactionmessage(hello.dont.talk.to.monster,badusername);saveerrors(request,errors);return(newactionforward(mapping.getinput();/*he

13、lloaction 类创建了一个模型组件personbean 对象,并调用它的 savetopersistentstore()方法来保存username* 属性。*fromtheview,wenowupdatethemodel*/personbeanpb=newpersonbean();pb.setusername(username);pb.savetopersistentstore();/* 把 personbean 对象保存在request 范围内内* 从 request 范围内删除actionformbean 。由于后续的请求转发目标组件不再需要helloformbean ,所以* 可将

14、它删除。当 helloaction 类调用 httpservletrequest 的 setattribute() 方法,向 hello.jsp 传递 personbean 对象时,* 需要提供一个名为persinbean keyrequest.setattribute(personbean,pb);*hello.jsp 通过这个名为personbean 的属性来读取personbean 对象:*hello!* 对于 struts 应用,提倡将这些属性key 常量定义在一个java 文件 constant.java 中,例如本例。* */request.setattribute(com.you

15、rcompany.struts.constants.person_key,pb);request.removeattribute(mapping.getattribute();return(mapping.findforward(sayhello);5 . 创建模型组件本例的模型组件是personbean.java , personbean 是一个非常简单的 javabean ,它包括一个username 属性, 以及相关的 get/set 方法。 此外, 它还有一个业务方法savetopersistentstore()6 .创建存放常量的 java文件:constant.java7 .创建配

16、置文件 web.xml 和 struts-config.xml本例的运行流程为:1.servlet 容器在 web.xml 文件中寻找 属性为 *.do 的 元素:action*.do2.servlet 容器依据以上 元素的 属性action,在 web.xml文件中寻找匹配的 元素:actionorg.apache.struts.action.actionservlet3.servlet 容器把请求转发给以上 元素指定的 actionservlet , actionservlet 依据用户请求路径 /helloworld ,在 struts 配置文件中检索path 属性为 /hellowor

17、ld 的 action 元素:4 .actionservlet 根据 元素的 name 属性,创建一个helloform 对象,把客户提交的表单数据传给helloform 对象,再把helloform 对象保存在 元素的 scope 属性指定的request 范围内。5 . 由于 元素的 validate 属性为 true , actionservlet 调用 helloform 对象的 validate() 方 法执行表单验证。 当文本框中不输入姓名的时候,vallidate()方法返回一个actionerrors 对象。actionservlet 把helloform的validate。方

18、法返回的 actionerrors 对象保存在 request 范围内,然后根据 元素的 input 属性 ,把客户请求转发给hello.jsp 。 当文本框中输入姓名monster 的时候,vallidate()方法返回actionerrors对象中不包含任何actionmessage 对象 ,表示表单验证成功。actionservlet 查找 helloaction 实例是否存在,如果不存在就创建一个实例,然后调用helloaction 的 execute() 方法。helloaction 的 execute() 方法先进行逻辑验证,由于没有通过逻辑验证,就创建一个actionmessage 对象,这个actionmessage 对象封装了错误消息, execute() 方法把actionmessage 对象保

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论