Struts应用helloapp.doc_第1页
Struts应用helloapp.doc_第2页
Struts应用helloapp.doc_第3页
Struts应用helloapp.doc_第4页
Struts应用helloapp.doc_第5页
全文预览已结束

下载本文档

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

文档简介

商品内容:1.分析helloapp应用的需求 接受用户输入的姓名,然后返回字符串Hello!。 如果用户没有输入姓名就提交表单,将返回出错信息,提示用户首先输入姓名。 如果用户输入姓名为Monster,将返回出错信息,拒绝向Monster打招呼。2. 运用Struts框架 模型包括一个JavaBean组件PersonBean,它有一个userName属性,代表用户输入的名字。它提供了get/set方法,分别用于读取和设置userName属性,它还提供一个save()方法,负责把userName属性保存到持久化存储系统中,如数据库或文件系统。对于更为复杂的Web应用,JavaBean组件可以作为EJB或Web服务的前端组件。视图包括一个JSP文件hello.jsp,它提供用户界面,接受用户输入的姓名。视图还包括一个ActionForm Bean,它用来存放表单数据,并进行表单验证,如果用户没有输入姓名就提交表单,将返回出错信息。 控制器包括一个Action类HelloAction,它完成三项任务:1进行业务逻辑验证,如果用户输入的姓名为Monster, 将返回错误消息;2调用模型组件PersonBean的save()方法,保存用户输入的名字;3决定将合适的视图组件返回给用户。除了创建模型、视图和控制器组件,还需要创建Struts的配置文件struts-config.xml,它可以把这些组件组装起来,使它们协调工作。此外,还需要创建整个Web应用的配置文件web.xml。 3.创建视图组件 本例中,视图包括两个组件: 一个JSP文件:hello.jsp 一个ActionForm Bean: HelloForm Bean (HelloForm.java)。 其中,jsp中有代码 当用户提交了HTML表单后,Struts框架将自动把表单数据组装到ActionForm Bean中。ActionForm Bean中的属性和HTML表单中的字段一一对应。ActionForm Bean还提供了数据验证方法,以及把属性重新设置为默认值的方法。Struts框架中定义的ActionForm类是抽象的,必须在应用中创建它的子类,来存放具体的HTML表单数据。 HelloForm.java中有两个特殊的方法: validate():用于表单验证。 reset():把属性重新设置为默认值。 本例中的资源文件是perties,用来存放数据信息。4.创建控制器组件:HelloAction.java 控制器组件包括ActionServlet类和Action类。ActionServlet类是Struts框架自带的,它是整个Struts框架的控制枢纽,通常不需要扩展。Struts框架提供了可供扩展的Action类,它用来处理特定的HTTP请求。所有的Action类都是org.apache.struts.action.Action的子类,Action子类应该覆盖父类的execute()方法。HelloAction.java的代码如下:package hello;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.ActionMessage;import org.apache.struts.action.ActionMessages;import org.apache.struts.util.MessageResources;import com.yourcompany.struts.PersonBean;import com.yourcompany.struts.form.HelloForm;/* * struts.action path=/hello name=helloForm input=/form/hello.jsp scope=request validate=true*/public final class HelloAction extends Action /* * Method execute * param mapping:ActionMapping包含了这个Action的配置信息和Struts-config.xml文件中的元素对应。 * param form:ActionForm包含了用户的表单数据,当Struts框架调用execute()方法时,ActionForm中的数据 *已经通过了表单验证。 * param request:HttpServletRequest当前的HTTP请求对象 * param response:HttpServletResponse当前的HTTP响应对象 * return ActionForward */public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception /* These massage come from the ApplicationRperties file * getResources(HttpServletRequest request)方法返回当前默认的MessageResource对象,它封装了Resource *Bundle 中的文本内容。 * 接下来Action类就可以通过MessageResource对象来访问文本内容。例如:如果要读取消息key *为hello.jsp.title对应的文本内容,可以调用MessageResources类的getMessage(String key)方法: *String title=messages.getMessage(hello.jsp.title); * MessageResources messages=getResources(request); */ /* * Validate the request parameters specified by the user * Note: Basic field validation done in HelloForm.java * Business logic validation done in HelloAction.java * 如果用户输入的姓名为Monster,将创建包含错误信息的AcrionMessage对象,ActionMessage对象被保存 *到ActionMessages对象中。接下来调用在Action基类中定义的saveErrors()方法,它负责把ActionMessages *对象保存到request范围内。最后返回ActionForward对象,Struts框架会根据ActionForward对象包含的转发 *信息把请求转发到恰当的视图组件,视图组件通过标签把request范围内的ActionMessages对象 *中包含的错误消息显示出来,提示用户修改错误。 * */ ActionMessages errors=new ActionMessages(); String userName=(String)(HelloForm) form).getUserName(); String badUserName=Monster; if(userName.equalsIgnoreCase(badUserName) /equalsIgnoreCase方法同vequals,只不过equalsIgnoreCase 是忽略大小写。 errors.add(username,new ActionMessage(hello.dont.talk.to.monster,badUserName); saveErrors(request,errors); return (new ActionForward(mapping.getInput(); /* * HelloAction类创建了一个模型组件PersonBean对象,并调用它的saveToPersistentStore()方法来保存userName *属性。 * from the View,we now update the model * * */ PersonBean pb=new PersonBean(); pb.setUserName(userName); pb.saveToPersistentStore(); /* * 把PersonBean对象保存在request范围内内 * 从request范围内删除ActionForm Bean。由于后续的请求转发目标组件不再需要HelloForm Bean,所以 *可将它删除。当HelloAction类调用HttpServletRequest的setAttribute()方法,向hello.jsp传递PersonBean对象时, *需要提供一个名为“persinbean”的属性key:request.setAttribute(personbean,pb); * hello.jsp通过这个名为personbean的属性来读取PersonBean对象: * * Hello ! * * 对于Struts应用,提倡将这些属性key常量定义在一个Java文件Constant.java中,例如本例。 * */ request.setAttribute(com.yourcompany.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.创建配置文件web.xml和struts-config.xml本例的运行流程为:1.Servlet容器在web.xml文件中寻找属性为*.do的元素: action *.do 2.Servlet容器依据以上元素的属性action,在web.xml文件中寻找匹配的元素: action org.apache.struts.action.ActionServlet 3.Servlet容器把请求转发给以上元素指定的ActionServlet,ActionServlet依据用户请求路径/HelloWorld,在Struts配置文件中检索path属性为/HelloWorld的Action元素: 4.ActionServlet根据元素的name属性,创建一个HelloForm对象,把客户提交的表单数据传给HelloForm对象,再把HelloForm对象保存在元素的scope属性指定的request范围内。5.由于元素的validate属性为true,ActionServlet调用HelloForm对象的validate()方法执行表单验证。 当文本框中不输入姓名的时候,vallidate()方法返回一个ActionErrors对象。 ActionServlet把HelloForm的validate()方法返回的ActionErrors对象保存在request范围内,然后根据元素的input属性,把客户请求转发给hello.jsp。 当文本框中输入姓名Monster的时候,vallidate()方法返回ActionErrors对象中不包含任何ActionMessage对象,表示表单验证成功。 ActionServlet查找HelloAction实例是否存在,如果不存在就创建一个实例,然后调用HelloAction的execute()方法。 HelloAction的execute()方法先进行逻辑验证,由于没有通过逻辑验证,就创建一个ActionMessage对象,这个ActionMessage对象封装了错误消息,execute()方法把ActionMessage对象保存在ActionMessages对象中,再把ActionMessages对象存放在request范围内。最后返回一个ActionForward对象,该对象包含的请求转发路径为元素的input属性指定的hello.jsp。 当文本框中输入其他姓名的时候,vallidate()方法返回ActionErrors对象中不包含任何ActionMessage对象,表示表单验证成功。 HelloAction的execute()方法进行逻辑验证,这次通过了验证,然后执行相关的业务逻辑,最后调用ActionMapping.findForward()方法,参数

温馨提示

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

评论

0/150

提交评论