




已阅读5页,还剩124页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts框架,MVC及Struts介绍,MVC模式介绍:MVC(Model/View/Controller)包括三类对象:Model是应用对象;View是它在屏幕上的表示;Controller定义用户界面对用户输入的响应方式。Model:真正完成任务的代码,也称“业务逻辑”。View:使用界面Controller:控制着模型和视图之间的交互过程。他决定着向用户返回怎样的视图、检查通过界面输入的信息以及选择处理输入信息的模型。,MVC式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性,JSPModel1与JSPModel2,Model1,Model2,model2容易使系统出现多个Controller,并且对页面导航的处理比较复杂model2仍不够好,CraigR.McClanahan2000年5月提交了一个WEBframework给JavaCommunity.这就是后来的Struts.2001年7月,Struts1.0,正式发布。该项目也成为了ApacheJakarta的子项目之一Struts质上就是在Model2的基础上实现的一个MVC架构。它只有一个中心控制器,他采用XML定制转向的URL。采用Action来处理逻辑,Struts框架介绍:视图:Struts采用JSP作为MVC的视图。每一种视图都是采用定制标签库的JSP页面。控制器:就是JavaServlet,负责视图和模型之间的交互。控制器的每个入口点都由名为struts-config.xml的配置文件设置。控制器还指定下一个视图的位置。模型:JavaBean就是模型的代表。对进入控制器的每个入口点来说,Bean的作用是存储从视图获取的信息,同时被称作“动作类”,它实现了业务逻辑。,Struts框架的组件,struts-config.xmlStruts配置文件ActionServlet控制器ActionClass包含事务逻辑ActionForm显示模块数据ActionMapping帮助控制器将请求映射到操作ActionForward用来指示操作转移的对象ActionError用来存储和回收错误Struts标记库,struts-config.xml,Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。在该配置文件中可以包含以下内容:Action与mapping配置配置ActionForward全局转发与局部转发资源文件,ActionServlet,ActionServlet是struts框架MVC实现的controller部分,它是这一框架的核心。ActionServlet创建并使用Action、ActionForm和ActionForward。该servlet的请求串应设为*.do基本功能:截获用户的Http请求把这个请求映射到相应的Action类。创建一个ActionFormbean实例,将form请求放入formbean的实例中调用Action实例的perform()方法将ActioFormbean,ActionMapping对象,request和response对象传给Action的perform()方法perform返回一个ActionForword对象,根据方法执行情况转到相应的jsp页面.,ActionServlet在web.xml中的配置如下actionorg.apache.struts.action.ActionServletaction*.do,全部的请求URI以*.do的模式存在并映射到这个servlet,ActionClasses,Action类是业务逻辑的一个包装。Action类的用途是将HttpServletRequest转换为业务逻辑。Action接口定义一个单一的必须由一个Action类实现的方法,就象下面这样:,publicActionForwardperform(ActionServletservlet,ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException;,ActionClasses,一个Action类的目标是处理这个请求,然后返回一个标识JSP页面的ActionForward对象,控制应该重定向这个JSP页面以生成相应的响应。注意事项:线程安全,类似servlet的service()方法,使用局部变量捕捉Model可能抛出的异常,并记录:servlet.log(Errormessagetext,exception);防止出现非常大的Action类,ActionForm,ActionForm维护Web应用程序的会话状态。ActionForm是一个抽象类,必须为每个输入表单模型创建该类的子类。ActionForm的使用假定有一个由HTML表单设置的TestActionForm。Struts框架将执行以下操作:检查TestActionForm是否存在;如果不存在,它将创建该类的一个实例。Struts将使用HttpServletRequest中相应的域设置TestActionForm的状态。Struts框架在将TestActionForm传递给TestAction之前将更新它的状态。struts-config.xml文件控制HTML表单请求与ActionForm之间的映射关系。可将多个请求映射到TestActionForm。,ActionForm,在配置文件中,可以定义FormBEAN,ActionMapping,是用户请求与Action之间的映射关系这些配置映射信息是存储在特定的XML文件(比如struts-config.xml)。一般情况下,用户请求是:http:/localhost/webapp/SpecialAction.do,而在配置文件中声明了一个名字为SpecialAction的Action.在struts-config.xml中的下述代码定义了一个用于登录的映射type=“com.test.LogonAction“指定Action的实现类name=“LogonForm“指定所用formBean的名字scope=“request“formBean的作用域,request/sessioninput=“logoncheck.jsp“默认的登入页面validate=“false“是否开启验证,ActionForward,用于导航视图,类似于ActionRouter类(见前面课件)在Action中的execute()中,可以返回一个ActionForward对象,用于指示将要转向的视图。需要在struts-config.xml文件中配置全局转发或局部转发视图在Execute()方法中,可以使用org.apache.struts.action.ActionMapping.findForward(“ActionForward名”)得到一个ActionForward对象,标记库,Struts-html标签库:该库可以用于创建动态HTML用户界面或者表格。Struts-bean标签库:对于将JavaBean代码放到JSP页面,该库提供了一个加强方式,通过标签实现。Struts-logic标签库:该库可以管理有条件地产生输出文本,遍历对象collections以重复地产生输出文本,还有应用流控制。Struts-template标签库:该库包含的标签可以作为页面创建动态的JSP模板,这些页面都拥有一个公共的外观或者共同的格式。,Struts1.1的处理过程如下图:,模型:JavaBean,A:控制器(ActionServlet)进行初始化工作,读取配置文件(struts-config.xml)为不同的Struts模块初始化相应的ModuleConfig对象。B:控制器接受HTTP请求,并从ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至具体的Action类进行处理。C:在控制器调用具体Action的Execute(perForm)方法之前,ActionForm是一个抽象类,它可以被每个输入表格模型扩展。他代表数据的一般概念,可以被HTML表格设置或者更新。D:Struts将这些ActionForm的配置信息都放在FormBeanConfig集合中,通过它们Struts能够知道针对某个客户请求是否需要创建相应的ActinForm实例E:Action的结构很简单,一般只包括一个Execute(perForm)方法,它负责执行相应的义务逻辑。执行完成以后,返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。,关于FormBean与Action的处理,每一个Action都应指定其使用的ActionForm,以此得到数据,通过execute()方法的参数得到该实例。当一个Action被客户请求时,框架执行以下处理,检查Action的映射,确定Action中已经配置了对ActionForm的映射根据name属性,查找formbean的配置信息检查Action的formbean的使用范围,确定在此范围下,是否已经有此formbean的实例。假如当前范围下,已经存在了此formbean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。否则,就重新构建一个formbean的实例formbean的reset()方法备调用调用对应的setter方法,对状态属性赋值如果validatede的属性北设置为true,那么就调用formbean的validate()方法。如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。,配置应用的步骤,1)建立一个WEB应用2)将struts/LIB目录中的所有comm*.jar文件及*.tld文件拷到定制应用的目录中3)在/WEB-INF/目录下新建一个web.xml文件,并在文件中加入控制器的映射及tld文件的声明4)在/WEB-INF下创建一个称为struts-config.xml的文件5)在/WEB-INF/classes目录中加入ApplicationRperties文件6)建立JSP文件来进行测试,一个helloApp,功能:接受用户输入的资料,并输出hello开发环境:jbuilder2005,tomcat5.0,struts1.1步骤:定义ActionFormPersonForm.java定义ActionHelloAction.java声明局部转发:successhello.jspfailhelloForm.jsp定义页面:hello.jsp与helloForm.jsp,其中helloForm.jsp是表单页面运行测试,示例说明,运行helloForm.jsp后,框架会从helloAction所指定的作用域中查找personForm对象,找到的话就将其现在的值赋予表单中。用户提交表单后,按前述过程,把数据填充到form对象中,并执行helloAction的execute方法,得到一个ActionForward对象,并转发到该视图使用html标签库中的标签用来定义表单,练习:使用struts结构图书用户注册示例,1)编辑封装类、Form类2)编写Action类3)修改配置文件struts-example.xml4)编写jsp文件,Struts的自定义标签库,Struts-html标签库:该库可以用于创建动态HTML用户界面或者表格。Struts-bean标签库:对于将JavaBean代码放到JSP页面,该库提供了一个加强方式,通过标签实现。Struts-logic标签库:该库可以管理有条件地产生输出文本,遍历对象collections以重复地产生输出文本,还有应用流控制。Struts-template标签库:该库包含的标签可以作为页面创建动态的JSP模板,这些页面都拥有一个公共的外观或者共同的格式。,HTML基本标签示例,生成html标记生成base标记生成用户请求的URI生成图片,生成生成,在该网页引用同一个应用的其他网页时,只需给出相对于当前网页的路径即可。,和,html:link用于生成元素,rewrite用于输出URI部分。两者均有以下属性:Href指定完整的URL链接Page指定相对于当前网页的URLForward指定全局转发链接也可为指定链接添加请求参数,paramId,属性指定请求参数名,paramName属性指定变量的名字,paramProperty指定javaBean的属性若包含多个请求变量,可用Map对象存储,并使用name=“MAP对象作用域属性名”来指定,用于嵌入图片,还允许包含请求变量,以便动图控制输出。若图片支持请求参数,可使用paramId与paramName来传递,同上。见文件HtmlBasic.jsp,基本的表单标签,Form标签举例,Form标签是HTML标签库中最重要的标签。HTMLForm和每个ActionForm的属性相对应,当HTML字段的名字和ActionForm的属性匹配时,那么ActionForm的属性就代表了这个字段,并且产生对应的输出到客户端。当客户端把Form提交后,Struts框架将保存用户的输入到ActionForm中。,以上是Form的属性,例3:userName:password:age:,如果给Form指定了name属性,那么必须指定type属性,要使这个表单生效,必须在struts-config.xml配置中制定Form的目标等:,例4:Form中嵌套的元素userName:password:age:21222324,爱好:computeread性别:男女,和上面的Form对应,有一个UserForm类(例4)PublicclassUserFormextendsActionFormpubilcStringuserName;pubilcStringpassword;publicintage;publicintsex;publicStringhob;pubilcvoidsetSex(intsex)this.sex=sex;publicintgetSex()returnthis.sex;在UserForm中,必须提供Form表单中每个字段的getter和setter方法,如果Form中有CheckBox,那么UserForm对应的属性应该是数组,标签,在表单中生成取消标签,当用户按下取消按钮时,将产生一个取消事件,该事件应由Action来捕获,至于如果处理该事件,可以在execute()方法中编程实现。,publicclassFormBasicActionextendsActionpublicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsExceptionFormBasicFormfbf=(FormBasicForm)form;if(isCancelled(request)/返回为真,表示取消事件发生了。fbf.setStatus(Cancelwaspressed!);return(mapping.findForward(success);elsefbf.setStatus(Submitwaspressed!);return(mapping.findForward(success);,用于在表单上生在隐含字段。用于在表单上存放不希望让用户看到或不允许修改的信息。其中write表示是否回显,检查框和单选按钮标签,用于生成一个检查框用于生成一组检查框,用于生成标签的HTML检查框。其对应的FORMBEAN中的某个属性只有两种可选值(true或false),就可以用这个标签来表示。表单中:formBean中:Privatebooleancheckbox1;PublicbooleangetCheckbox1()returncheckbox1;PublicvoidsetCheckbox1(booleant)this.checkbox1=t;Value属性用于指定在选中时,BEAN中对应的属性的值。为了检查框能正常工作,必须在Bean()的reset()方法中对其复位,即设置其为与value相反的值:publicvoidreset(ActionMappingmapping,HttpServletRequestrequest)this.setCheckbox1(false);,如果应用中有多个checkbox,并且希望在formBean中用单个数组来表示它们,就可以采用其使用方法如下:在formbean中定义一个数组,来存放所有checkbox的值:privateStringstrArray=newString0;publicStringgetStrArray()return(this.strArray);publicvoidsetStrArray(StringstrArray)this.strArray=strArray;在表单中加入元素,设置它的初始值:value2若选中了某个复选框,则strArray数组中会包含其value;否则,不会包含。checkbox只能与boolean类型的属性绑定,multibox则无此限制。,生成单选按钮;多个radio可以成组使用。上述两个按钮,property相同,均对应FormBean中的radioVal属性;当选中其中一个时,另一个会被取消,并radioVal的值为设置为其对应的value,下拉列表和多选列表标签,生成select元素,可以包含其它三个标签属性size指定每次在网页上显示的可选项的数目multiple是否支持多选property与FormBean的某个属性对应若multiple为true,其对应的属性为简单类型;若multiple为false,其对应的属性为数组类型;如:客户列表的属性为custId;颜色列表的属性为colors数组.,生成option元素,嵌套在中其标签可有两个来源在和之间的文本内容由标签的key,bundle属性指定的resourcebundle中的内容(其中bundl由配置文件中的来定义value属性用于指定可选项的实际值。,OrangePurple根据资源文件来显示,标签,提供一组option元素,可以出现多次在中Collection属性指定存放可选项的集合,这个集合应该存在于page范围内。并如下定义:org.apache.struts.util.LabelValueBean类有两个属性:value,label在表单中,可以这样来使用该集合生成可选项:,标签,提供一组option元素,可以出现多次。可以由name指定包含可选项集合的javaBean的名字,若不指定,默认为FormBean;property属性指定集合属性;label属性指定可选项标签的集合元素属性名;value属性指定可选项值的集合元素属性名。如以下例子:CustomerBean有属性:name,custIdFormBean中有属性:privateCustomerBeancustomers及getter/setter方法表单中:,代码htmlSelect.jsp,在表单中上传文件标签,表单(htmlFile.jsp)必须出现在中的property属性必选,这个属性和ActionFormBean中的FormFile类型的属性对应。,FormBean(HtmlFileForm.java)定义一个FormFile类型的属性:importorg.apache.struts.upload.FormFile;privateFormFilefile;publicFormFilegetFile()returnthis.file;publicvoidsetFile(FormFilefile)this.file=file;Action(HtmlFileAction.java)将表单对象转换为htmltaglibs.forms.HtmlFileForm.访问getFile()得到FormFile对象建立从FormFile对象得到的InputStream,和到目标文件的OutputStream对象,存储目标文件。,importjava.io.*;importjavax.servlet.http.*;importorg.apache.struts.action.*;importhtmltaglibs.forms.HtmlFileForm;publicclassHtmlFileActionextendsActionpublicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsExceptionStringdir=servlet.getServletContext().getRealPath(/upload);HtmlFileFormhff=(HtmlFileForm)form;FormFilefile=hff.getFile();if(file=null)returnmapping.findForward(success);Stringfname=file.getFileName();Stringsize=Integer.toString(file.getFileSize()+bytes;InputStreamstreamIn=file.getInputStream();OutputStreamstreamOut=newFileOutputStream(dir+/+fname);intbytesRead=0;bytebuffer=newbyte8192;while(bytesRead=streamIn.read(buffer,0,8192)!=-1)streamOut.write(buffer,0,bytesRead);streamOut.close();streamIn.close();hff.setFname(fname);hff.setSize(size);file.destroy();returnmapping.findForward(success);,用于输出错误消息。将根据属性去查找ActionErrors集合对象,并将其成员ActionError输出到页面上。格式化地显示消息,消息文本预先存储在Resourcebundle中,如htmlEperties中有以下内容:Error.global.fromform=Error.checkbox=thisisanerrorthatisrelatedtocheckbox1Errors.footer=Errors.header=validationerror定义了两个消息和的头与尾。标签的用法Name:指定request或session范围内的属性key.默认值为Globals.Error_KEY.Property:指定消息属性。若无此项,将显示ActionErrors对象中所有的ActionError。Bundle:指定resorceBundle。如无此,将从默认的句柄中获取消息文本。ActionMessages的add(Stringproperty,ActionErrormsg)用于向集合中添加消息。同一消息属性可对应多条消息。如:add(ActionErrors.GLOBAL_MESSAGE,newActionError(“error.checkbox”)(其中ActionMessages.GLOBAL_MESSAGE的串值是:”org.apache.struts.action.GLOBALMESSAGE”),(续),错消息的来源一:ActionFormBean的验证方法validate()该方法返回null时,继续提交;返回ActionErrors对象时,视图定位到input页面上,publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest)ActionErrorserrors=newActionErrors();/创建对象if(this.getCheckbox1()errors.add(ActionMessages.GLOBAL_MESSAGE,newActionError(error.global.fromform);errors.add(checkbox1,newActionError(error.checkbox);returnerrors;,(续),错误消息的来源二:Action类的execute()方法可以进行数据逻辑验证,如果验证失败,将生成ActionErrors对象.,publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsExceptionActionMessageserrors=newActionMessages();StringuserName=(String)(HelloForm)getUserName();StringbadUserName=“Monster”;If(userName.equalsIgnoreCase(badUserName)errors.add(“usernaem”,newActionError(“error.checkbox1”);saveErrors(request,errors);/调用基类的存放方法returnnewActionForward(mapping.getInput();,与标签有些相似,也能够在网页上输出消息,两者用法上有些差别。有以下重要属性:name:指定ActionMessages对象存放在request或session范围内的属性key。id属性,用来命名从消息集合中检索中的每个ActionMessage对象,它和标签的name属性匹配。在Action中的execute()方法中,可以创建一个ActionMessage()显示正常消息的代码如下:,Bean标签库,Bean标签为访问Bean和它的属性提供了方便的机制,另外,Bean标签库也提供了访问Cookie、Header、请求参数等方便的机制。主要标签可以分为以下三种:用于访问HTTP请求信息或JSP隐含对象的BEAN标签用于访问WEB应用资源的BEAN标签用于定义或输出JAVABEAN的BEAN标签,例5:把Session定义为一个Bean:,访问HTTP请求信息或JSP隐含对象的BEAN标签,用于检索http请求中的header信息,具有以下属性:id:定义一个String类型的变量,放在page范围name:指定需要检索的header信息,用于检索请求参数,有以下属性id:定义一个String类型的变量,放在page范围name:指定需要检索的参数名value:默认值multiple:取yes时,id定义的是String类型的变量,标签可以检索保存在浏览器中的cookie,有以下属性:id:定义Cookie类型的变量,放在page范围内name:指定Cookie的名字value:指定默认值,用于检索JSP隐含对象,如session,request,response.属性:id:定义一个引用隐含对象的变量property:session,request,response,config,applicationSessioncreated:,BeanServlet.jsp,访问WEB应用资源,用于输出Resourcebundle中的一条消息。bundle属性:指定资源句柄,即在struts-config.xml中定义的资源文件:三种指定属性的方式:arg0,arg1,arg2分别用于指定属性中的0,1,2等参数如:no.user=0notexits,pleaserelogin!最终输出为:Liunotexits,pleaserelogin!,用于检索web资源的内容,属性:id:定义一个代表web资源的变量,page范围name:指定web资源的路径input属性:不指定则变量为字符串类型;指定为任何串值,则id属性定义的变量为java.io.InputStream,用于检索struts框架内的对象,如ActionFormBean,ActionForward或ActionMapping属性:formbean:指定ActionFormBean对象,和struts配置文件中的元素匹配forward:指定ActionForward对象,mapping:指定ActionMapping对象将会到配置文件ActionForward:BeanSource的path输出,类似于,这个标签类可以包含其他web资源的内容,并将其内容存放在一个变量中,而不是直接显示到网上。属性:forward:指定全局转发路径。page:指定相对于当前应用的URI,以”/”开头href:指定完整的URL标签的示范代码如下:,testPage1:testPage2:,定义或输出JAVABEAN,定义一个变量显示JAVABEAN或其属性的内容获得map或collection集合的长度,定义一个变量,id属性指定变量的名字,toScope属性指定范围,默认page.赋值可以:value属性:name和property属性name和type属性,也可同时指定scope,引用已经存在的BEAN,Applicationname:,ServletContextname:,用于获得map,collection或数组的长度。属性:id:一个integer类型的变量name:一个已经存在的集合变量LineCount:,用于在网页上输出某个bean或它的属性的内容可以有以下方法来指定输出的对象name:name和propertyfilter属性为true时,过滤输出内容中的特殊字符;为false时,不过滤。,BeanBean.jsp,StrutsLogic标签库,Logic标签库主要用于管理和条件相关的输出,对某些对象进行迭代输出,以及流程管理。其中的标签大致分为以下几类:进行比较运算的logic标签进行字符串匹配的logic标签进行循环遍历的logic标签进行请求转发或重定向的logic标签,Logic标签:,进行比较运算的logic标签,变量等于指定的常量时为true变量不等于指定的常量时为true变量大于等于指定的常量时为true以上标签为true时,执行主体,否则跳过主体。,常用的属性,Value属性用于指定常量变量指定可以用以下方法:cookie属性:header:parameter:name:指定被比较的变量,依次在四个作用域中查找,并调用toString()的值与常量比较name,property,同上一例若变量与常量均可以转换为数字,则按数字进行比较,UserNameinCookieisLinda,Clientslanguageis:zh-cn.,Thefirstrequestparameterisgreaterthan100,ThevalueofintBeanis100.,cookie,header,parameter,javabean,字符串匹配的logic标签,变量中包含指定常量时为true变量中不包含指定常量时为true可以使用cookie,header,parameter,name,property来指定变量,用法同上。可选属性location,判定是否子串在起始或结尾位置上,取start和end两个值,hasthestringSuninit.doesnthavethestringLindainit.startswiththestringLinda.doesntstartwiththestringLinda.YourerunningWindowsYourenotrunningWindows,内容是否存在logic标签,变量为”或null变量不为”且不为null变量存在变量不存消息存在消息不存在,与,判断指定的变量为空或NULLName属性与property属性ThevariablenamedemptyStringisempty!ThevariablenamedemptyStringisnotempty!,和,判断指定的对象是否存在。属性可以有cookie,header,parameter,name,property,用法同上所述ThereisaJavaBeannamedemptyString.EmptyStringdoesnthavesuchapropertynamednoSuchProperty.Yep,wegotauser-agentheader.No,user-agentheaderdoesnotexist.,和,用来判断是否在request范围内存在指定的ActionMesages(或其子类ActionErrors)对象,以及是否存在特定消息name:ActionMessages对象在request中的名字property:特定消息的名字,LogicPresence.jsp,Iterate标签,Iterate标签负责对指定集合重的每个元素都执行一次它的标签体。该标签有以下属性:,例7:,例7输出结果:,循环遍历的logic:iterator标签,用于一个循环中遍历数组、collection、Enumeration、Iterator或map中的所有元素常用的属性有id:循环中用到的变量name及property指定要遍历的集合对象offset:开始位置length:步长indexId:序号变量collection:指定一个运行时的集合表达式,LogicIterator.jsp,请求转发或重定向的标签,转发到指定页面属性:name用于指定转发到的全局视图重定向到指定页属性forward、page、href与相同,一个完整的例子:通信簿管理,收集和分析应用需求设计数据库设计客户界面设计ActionForm设计Action设计应用的业务逻辑组件,收集和分析应用需求,安全登入添加联系地址查询联系地址列出全部的地址清单安全退出,安全登入,前置条件:无主事件流:用户输入正确的用户名和密码,安全登入到应用中,向用户返回操作主菜单其他事件流:未输入用户名或密码,显示错误提示信息;用户名和密码不为空其他事件流:输入非法的用户名或密码,则显示错误提示信息,添加联系地址,前置条件:已经安全登录了主事件流:接收用户输的好朋友联系地址(姓名、地址和电话),把信息保存到数据库中,返回提示信息:记录已经被成功保存到数据库其他事件流:如果用户未输入或非法则显示错误提示信息;字段不允许为空,查询联系地址,前置条件:安全登入主事件流:输入模糊查询条件,返回符合条件的所有记录其他事件流:没有输入任何查询条件,显示错误提示信息,列出全部的地址清单,前置条件:安全登入主事件流:返回所有的通信地址信息,安全退出,前置条件:安全登录主事件流:结束妾前HTTP会话,重新返回到welcome页面,设计数据库,设计应用的业务逻辑,访问XML格式的用户信息UserDatabaseServlet访问userdatabase.xml文件,load()方法加载xml文件中的数据到UserBean对象中,并放到hashtable中使用了struts框架中的Digester类提供的解功能Servlet初始化时,init()被调用,该方法调用load()加载xml文件数据,并把hashtable对象保存到ServletContext中。,访问和操作数据库,包括添加和查询通信地址信息通信地信息保存在数据库中,本例通过一个实用类和一个JAVABEAN来操纵数据库,DBUtil和ADdressBookBeanDBUtil负责建立和连接数据库的连接,提供了connectToDb()方法ADdressBookBean代表通信地址信息,有三个属性;提供查询及向数据库表添加新的记录等方法,设计用户界面,界面风格与客户标签,界面风格每个界面都包括相同的页头与页角页头header.jsp页角footer.jsp可以使用指令或标准动作客户标签ValidateSessionTag标签用于会话验证;检查httpSession对象中的Contants.USER_KEY属性,若不存在就把请求转发到logon.jspDisplayTag用于输出通信地址信息到httpSession取Contants.SQLSTMT_KEY即SQL语句,并输出记录到页面上,设计ActionForm,三个ActionFormBeanLogonForm:username,passwordInsertForm:name,phone,address都不允许为空SearchForm:name,phone,address不允许都为空都编码了validate()方法用于验证数据有效性,设计Action及映射,应用包括登入事件、登出事件、添加新记录事件、查询事件、显示所有记录事件,应设计五个Action,LogonAction从servletContext中取出存放用户信息的hashtable对象,然后检查用户提交的信息是否在其中存在时,把用户信息保存到session中:session.setAttribute(Contains.USER_KEY,user);转向到“success”全局ActionForwardLogoffAction从session中移除用户信息,然后使HTTPSession无效转到局部ActioForward:success(index.jsp),InsertAction调用AddressBookBean的insert()方法,保存记录到库中转发到全局ActionForward:confirmation(confirmation.jsp)SearchAction根据用户提交的查询条件,生成模糊查询Sql,存到httpsession中(Contants.SQLSTMT_KEY)转发到局部ActionForward:success(display.jsp)Display.jsp调用自定义标签DisplayTag输出结果,DisplayAllAction生成查询SQL语句,存到httpsession中(Contants.SQLSTMT_KEY)转发到局部ActionForward:success(display.jsp)Display.jsp调用自定义标签DisplayTag输出结果,资源文件,本例中消息文本都存放在资源文件其中的内容有:异常文本超链接的文本按钮上的文本主菜单上的文本其它消息,运行案例,扩展部分,资源句柄及访问Action的种类重复提交的问题处理表单跨页配置动态ActionFormTiles框架,资源句柄(Resourcebundle)及访问,在最新版本的框架中,我们应该在struts-config.xml文件而不是web.xml中指定资源文件:每一个资源句柄和一个类MessageResource类对应,系统初始化时,其实例保存在ServletContext中在以下位置可以访问资源文件Jsp页面上和Action中:MessageResourcemessages=getResources(request);/getResources(request,key)Stringmsg=messages.getMessage(“name”);ActionForm中,使用ActionError其它一些可能的位置,Action的种类,Struts提供一些现成的Action类,在struts应用中直接使用这些Action类可以大大节省开发时间。常用的几个类为:org.apache.struts.actions.ForwardActionorg.apache.struts.actions.DispatchActionorg.apache.struts.actions.LookupDispatchAction,org.apache.struts.actions.ForwardAction,该Action用于直接转发到指定视图上ActionServlet把请求转发给ForwardAction,ForwardAction再把请求转发给parameter属性指定的WEB组件。这样可以充分利用控制器的预处理请求功能。使用forward属性也可以,org.apache.struts.actions.DispatchAction,通常一个Action类中只能完成一种业务操作,如果希望在同一个类中完成一组相关的业务操作,可以使用该类。例如AddItemAction、ViewShopping、UpdateShoppingCartAction三种Action可能会执行一些相同的操作,如数据验证,这样放在一个类中会更方便一些.创建一个Action子类,不必覆盖execute()方法,而是创建一些实现实际业务操作并且与execute()具有相同特征的方法。配置DispatchAction类时,设置parameter属性为”串值A”;在请求该Action时,应添加请求参数:”串值A=methodname“来请求其中的某个方法.,org.apache.struts.actions.LookupDispatchAction,是DispatchAction的子类,可以定义多个与与execute()同签名的业务方法。适用于一个表单中有多个同名按钮,而点击不同按钮提交时又有不同的业务方法的情况按钮的名字需要与具体的ActionMapping中的parameter属性值相同,一个多动作的案例,第一步:在一个表单中添加两个同名action的提交按钮第二步:在ApplicationResources.pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东公共课自考试题及答案
- 狼中考试题及答案
- 矿山管理考试题及答案
- 课件时间设置
- 课件日知录教学课件
- 溴化丁基橡胶装置操作工专业技能考核试卷及答案
- 电动自行车装配工专业知识考核试卷及答案
- 增材制造设备操作员工艺考核试卷及答案
- 闪速炉熔炼工质量追溯知识考核试卷及答案
- 杜美丝制造工职业考核试卷及答案
- 工程意向定金合同范例
- 汽车智能制造技术课件
- 卡乐控制器PCO控制器说明
- 2024年海南省中考物理试题卷(含答案)
- 辽宁省沈阳市第一三四中学2024-2025学年七年级上学期第一次月考英语试卷
- 高企认定研发项目及科技成果转化专题培训
- 大学低值耐用品和易耗品管理办法
- 港珠澳大桥总体设计及关键技术-课件
- 苏教版小学数学四年级上册同步教学反思汇编(全册)
- 2024仁爱版初中英语单词表(七-九年级)中考复习必背
- 住宅小区机动车车辆管理制度
评论
0/150
提交评论