欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    传智博客struts开发.ppt

    • 资源ID:6081841       资源大小:562.50KB        全文页数:47页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    传智博客struts开发.ppt

    Struts开发,讲师:方立勋,TIP:为什么学习Struts,MVC设计模式基于MVC设计模式的Servlet+Jsp+JavaBean的WEB应用程序的工作流程。基于Strus的web应用程序的工作流程。为什么要用strus,它给我们带来了什么?,TIP:Struts开发快速入门,用户注册(使用struts完成),步骤:1、编写register.jsp表单页面,表单提交RegisterUser.do处理。2、在web工程中导入struts开发包,在web.xml文件中配置struts框架提供的ActionServlet,使其处理所有以.do为结尾的请求。3、在/WEB-INF/目录下编写ActionServlet工作时使用的配置文件struts-config.xml,配置当ActionServlet收到RegisterUser.do请求时,调用一个名称为RegisterUse的Action处理。4、编写ActionRegisterUse,在其excute方法内编码,采用传统方式获取数据,并调用service完成用户注册,然后转发给相应的jsp页面。,TIP:让struts自动封装请求数据,Struts的ActionServlet的功能非常强大,我们只需要在它的配置文件(struts-config.xml文件)中配置一下,它就可以自动把请求数据封装到用户指定的formbean中。并且,struts在调用开发人员编写的action时,会把封装了数据的formbean传给action。这样,可以省去开发人员在action中手工获取客户端提交的数据,减轻编码工作量。,注意:用于封装数据的formbean要继承struts的ActionForm。,TIP:让struts转发请求,用户在编写action时,无须在action内手工编码进行请求转发。struts的ActionServlet在调用action.execute方法时,可以根据它的返回值,决定调用哪个JSP页面响应用户请求。Action.execute方法的返回值ActionForward代表一个转发对象,struts的ActionServlet在收到Action.execute方法的返回值ActionForward后,会取出该对象封装的转发地址,进行请求转发。,Action,ActionServlet,ActionForward,JSP,TIP:让struts根据配置实现转发,在struts的配置文件struts-config.xml文件中,可以配置forward标签,它用于封装一个转发地址。如:Struts的ActionServlet在调用action时,会把action的配置信息封装一个ActionMapping对象中,并传递给action。因此,开发人员在编写action时,无须硬编码指定转发地址,可以通过ActionMapping对象,获得配置文件中配置的转发地址,从而实现转发。如下图:,TIP:让struts根据配置实现转发,ActionServlet,action,ActionMapping,Struts-config.xml,请求,封装配置信息,*.do,actionServlet,Struts-config.xml,action,formbeam,actionMapping,actionforward,jsp,Web服务器,Web.xml,ActionServlet,Action,ActionFrom,1、web服务器收到请求后,把请求派发给struts的servlet进行处理。2、ActionServlet读取配置文件,根据请求的path创建相应的action实例对象,3、根据配置文件创建封装请求参数的ActionForm对象。4、创建代表当前Action配置信息的ActionMapping对象。5、调用Action实例的execute方法,并把ActionForm和ActionMapping对象传递进去。6、ActionServlet根据execute方法的返回值ActionForward封装的转发信息,把请求转发到相应的JSP页面显示。,Struts-config.xml,ActionMapping,ActionForward,ActionForward,JSP,TIP:读struts源码,分析struts工作流程,Struts的控制器组件主要包括(课后一定读源码)ActionServlet对象:Struts 的核心类RequestProcessor对象:由ActionServlet调用,负责处理用户请求Action对象:用户自己编写的类Struts处理请求的流程:当 ActionServlet 接收到 HTTP 请求后,在 doGet 或 doPost 方法中都会调用process()方法处理请求在 ActionServlet 的 process()方法中一旦选择了正确的子应用模块,就会调用RequestProcessor实例的process()方法来处理请求。在ActionServlet调用这个方法时,会把当前的request和response对象传给它RequestProcessor实例的process()方法调用ProcessActionCreate()方法,先判断是否在 Action 缓存中存在Action实例,如果不存在,就创建一个Action实例,把它保存在 Action 缓存中RequestProcessor实例的process()方法调用Action实例的execute()方法,TIP:Struts配置文件常用属性,指定action处理的地址,指定处理请求的Action的完整类名,指定使用哪个formbean封装请求参数,指定把formbean存放到哪个域对象中,默认session,指定formbean存储的key,不设默认为name属性的值,指定把formbean的数据是由哪个页面提供的,提供此属性的目的在于formbean校验失败时,程序方便跳回formbean的输入页面,显示校验失败信息。,指定收到请求时,跳转到相应的jsp页面,如果配置了此属性,则action将不再被调用。相当于ServletUI,指定收到请求时,进行页面包含。,如果action把该属性设置为true,则它可以处理客户机发出的所有无效的.do请求,默认值为false,用于处理错误页面,配置action参数,调用actioMapping.getParameter方法可以获得这里配置的参数。,标签和所有的配置信息使用哪个对象封装,默认值为ActionMapping对象。,请求参数封装到formbean中后,是否让struts自动调用formbean的validate方法进行数据校验。默认true,TIP:补充知识点,严格按照MVC设计模式改进注册用例,需求:Web应用程序若要严格按照MVC设计模式,所有客户端的请求都需要发送给servlet处理,servlet再转发到JSP显示。因此,对于上述案例中的register.jsp页面,也要禁止用户直接访问,而应把它放在web-inf目录中保护起来,由用户访问servlet后,servlet再转发到register.jsp页面上。传统做法和Struts的做法。在首页上挂上注册功能标签的好处:也有坏处使用不用关心web应用程序的名称。可以自动附加jsessionid参数进行url重写。可以对参数信息进行url编码。标签常用属性:paramID、paramName、name、property。,TIP:补充知识点,标签示例:,TIP:借助struts完成表单校验,表单数据提交后,在服务器端编程校验数据合法性,是一个很常见的需求。所以struts的ActionServlet在把数据封装到formbean后,会自动调用formbean的validate方法对数据进行校验,并根据validate方法的返回值,决定转发到哪个jsp页面处理。Stuts的这种处理方式,可以让开发人员少死点脑细胞,开发人员只需要在validate方法中写代码进行数据校验就OK了,调用方法的事由struts的actionServlet去做了,并且,调用方法完后,如果有错误,跳转的事,也由struts根据配置文件做了。注意:若想struts的actionServlet把数据封装到formbean后,调用其validate方法,需要在struts-config.xml文件中把action的validate属性设置为true,默认值为true。,TIP:借助struts完成表单校验,Struts调用formbean.validate方法后,其规则为:如果validate返回的ActionErrors对象为空或null,则Struts认为表单验证通过,struts进而继续调用Action处理请求。如果validate返回的ActionErrors不为空,并且封装了数据,则认为校验失败,Struts将自动跳转回表单输入页面。(input属性指定)因此用户若想校验失败,只需要创建ActionErrors对象,并调用其方法:ActionErrors.add(String key,ActionMessage message)向ActionErrors对象中加入相应的错误消息,返回给struts即可。示例代码:,TIP:在JSP中显示校验信息,Struts在收到Formbean的返回值ActionErrors后,会将其存储到request域中,进而带给表单页面,以便开发人员在表单页面中显示校验失败的错误信息(这点建议读读struts的源码)。在JSP页面中开发人员可以编码显示错误信息:,注意上面的代码取request的errors对象时为什么用“”,这个值从何来?显示消息时有需要在struts-config.xml文件中配置一个资源文件,TIP:使用显示校验消息,在JSP页面中手工编码获取errors对象中保存的数据很麻烦,因此Struts编写了标签,它用于封装JSP页面中用于获取消息的java代码。用户使用标签可以很轻松获取到errors中保存的校验信息,示例。标签也可以以ActionMessage中封装了key为关键字,从资源文件中检索数据予以显示,如下所示:,取消false,html:errors标签在显示ActionMessage封装的消息时,将以ActionMessage的key为关键字从资源文件中检索数据显示,看看标签源码,看errors标签是如何以关键字检索资源文件数据的。注意:errors标签工作时需要资源文件。,TIP:ActionMessage,ActionMessage封装消息的方式很灵活,后面两个构造函数中的value参数,用于替换消息文本中的占位符:,对应资源文件内容:errors.required=0不能为空,TIP:练习,完成对Register.jsp页面的完整校验,TIP:练习,private String username;private String password;private String password2;private String gender;private String birthday;private String income;private String city;private String preference;private String email;,TIP:练习,注意事项:日期校验不要采用DateFormat,而应采用:DateLocaleConverter dlc=new DateLocaleConverter();Date d=(Date)dlc.convert(this.birthday,yyyy-mm-dd);对于页面中的数据,可采用枚举类表示,对枚举值的校验可采用如下类似方式:Gender.valueOf(this.gender);,TIP:使用Struts标签完成表单数据回显,Struts提供了很多表单相关的自定义标签,如:这些标签除用于生成相应的html标签外,最大的好处在于它在产生html标签时,会自动检索相应formbean的数据予以显示,这样,当表单校验失败时,表单数据的回显struts帮我们干了,开发人员就不需要再编码去取了。,TIP:使用Struts标签完成数据回显,使用Struts的html标签完成数据回显时注意的问题:html标签回显数据时,会以为关键字,从各个域中查找bean,找不到则抛空指针异常。所以使用html标签时域中须有以为关键字的对象。这个工作可以交给html:form标签做,html:form标签在执行时,会查找域中已有的formbean,并以为关键字把formbean存在域中。如果html:form标签在域中找不到formbean,则html:form标签会实例化一个空bean,然后存储到域中。因此,为了在页面中使用struts的html标签回显数据,这些标签需要配合html:form标签使用。(查看html:form标签的源文件可以看到这点)。对于复选框中的数据,Html:checkbox标签不能完成数据回显,复选框的数据回显需要使用html:multibox。Struts中的html:password标签也会回显数据,如果不想password回显,需要把其redisplay属性置为false。补充:formbean的reset方法,TIP:请求数据的中文乱码问题,解决方案:过滤器重写ActonServlet重写RequestProcessor,TIP:防止表单重复提交,什么情况下会发生表单重复提交刷新网络延时,多次点击后退、前进防止表单重复提交的原理表单应由一个程序产生,程序在产生表单时:生成一个随机值,并附在表单的一个隐藏输入项中。把随机值存储在session域中。表单在提交时,服务器程序客户机带过来的随机值和session域中保存的随机值是否一致,如果一致则允许提交,否则认为是重复提交。,TIP:使用struts防止表单重复提交,Struts的标签除了可以生成标签、协助其它html标签完成数据回显外,它还提供了防止表单重复提交的功能。标签在生成表单时,会检查session域中是否存在token,如果存在则自动使用token生成隐藏字段。Struts为方便开发人员生成token,在action中提供了saveToken方法,调用这个方法就可以在session域中保存一个token。Struts为方便开发人员在action中校验用户是否为重复提交,因此它在action中也提供了isTokenValid方法,该方法会自动判断表单是否为重复提交。防表单重复提交在struts中的做法:1、用户先访问Action,Action中调用saveToken方法,然后派发到表单页面。2、在表单页面中使用标签,标签会自动为表单生成一个带随机值的隐藏字段。3、在表单提交的Action中调用isTokenValid方法,就可以判断出表单是否为重复提交,从而可以根据情况决定如何处理。isTokenValid方法返回true,则为允许提交,处理提交后,要记得调用reset清除token。,TIP:使用beanUtils转换表单数据,表单校验通过后,需把formbean的数据封装到实体bean中,此时应采用beanUtils框架,并注册相应的转换器。为避免在多个Action中重复注册转换器,可采用listener在web应用启动时就注册转换器。,TIP:表单数据业务逻辑校验,表单数据校验通过后,在action中可能会对数据进行业务逻辑验证,例如检查当前注册用户是否已经被别人注册过了,这种验证称为业务逻辑验证。业务逻辑验证如果失败,其相应的信息也应显示在页面上。,TIP:表单数据业务逻辑校验,很多网站也会提供如下图所示的验证方式:,TIP:使用struts修改数据,程序取出数据库中的数据,显示在一个表单页面上,以便于用户修改数据,这也是开发中经常需要实现的功能。实现此功能需要注意的问题:为回显数据方便,通常在页面中都会使用struts的html标签。而程序调用dao取出的数据通常放在实体bean中,要想在页面中使用html标签取出数据显示,此时应把实体bean的数据又转换到表单bean中,对于复杂类型的数据,此时就需要在beanutils框架中注册数据的双向转换器了。数组类型是比较特殊的类型,进行类型判断是可以采用如下方式:clazz.equals(Object.class)获取到的 Bean为在页面中显示,还需要把bean存放在request域中,存放的关键字可以使用action上配置的formbean的名称。注意:在action如果向request域存formbean,这个formbean想在jsp页面中显示,配置文件中的scope要配成request,不然页面会先从 session找,而session中有一个空bean。,TIP:struts文件上传,文件的上传操作:JSP 页面:表单使用 POST 提交方式,添加 enctype=multipart/form-data 属性ActionForm 中使用 org.apache.struts.upload.FormFile 类型定义文件字段导入 struts-1.3.8libcommons-fileupload-1.1.1.jar 和 在 Action 的 execute()方法中使用 InputStream is=file.getInputStream();方法得到文件的输入流再使用 io 的方法对文件进行上传操作.,TIP:struts文件上传注意事项,在formbean中定义FormFile类型的成员变量接收浏览器上传的文件。只要在Formbean中定义一个FormFile类型的变量,struts框架会自动把文件上传的内容变成FormFile对象并注入进来,即使没有上传文件,对应的FormFile变量也会有值,只是得到文件名为”和文件大小为0。中文文件上传问题 过滤器解决 设置上传文件的最大值:在配置文件里面配置注意:如果上传文件超出了最大值,struts不会把上传数据封装到FormFile中,即c为null,程序根据FormFile是否为空,就可提示用户文件是否超出大小。多文件上传问题DownloadAction提供下载。,TIP:DispatchAction,需求:客户端每个请求都对应服务器端一个Action,会导致服务器端action过多,维护困难。在Struts中允许多个请求对应一个Action,例如对Book对象的增删改查操作,可以交给一个Action处理,Action根据请求地址中附加的参数信息,再派发到相应的方法,例:增加书籍 修改书籍 查找书籍 删除书籍,TIP:DispatchAction,Struts中的DispatchAction提供了此类功能,它可以根据请求的参数,调用不同的方法,但要注意的是开发人员在声明参数对应的方法时,方法的签名需要与execute()方法一致。例:,注意Struts中的DispatchAction并不知道用户的参数是以什么名称提交的,因此若想DispatchAction能正常调用到用户自定义的方法,用户需要在action的配置文件中通过parameter属性告诉给struts。课后看看源码:分析DispatchAction是如何调用用户自定义方法的,TIP:DispatchAction,注意事项:DispatchAction是Action的子类,它重写了Action的execute方法,因此用户继承DispatchAction时,若想使用DispatchAction提供的分发功能,切记不可覆盖其execute方法。DispatchAction位于struts的扩展包中,即。,TIP:MappingDispatchAction,MappingDispatchAction是DispatchAction的子类,它提供的功能和DispatchAction功能类似,它也允许多个请求对应一个Action,但它的实现方式更加灵活,如图:,MappingDispatchAction可以配置到多个地址上,比DispatchAction更加直观,并且也可使用不同的formbean,但缺点是使配置文件过于复杂。补充知识点:让struts拥有多个配置文件。,TIP:动态FormBean,Struts允许开发人员在配置文件中声明一个formbean,而无须手工针对每一个表单设计一个Formbean。步骤:1、配置一个元素,将type属性设置为 DynaActionForm。2、的子元素用来设置动态ActionForm的属性。元素的name属性指定属性名,type指定属性类型3、使用 DynaActionForm 类的 public Object get(String name);访问字段的值,TIP:集成FckEditor,FCKeditor是一款非常优秀的HTML在线编辑器,功能也可以定制.也支持多种浏览器,遵循LGPL版权。最新版本的FCKeditor(2.3.2)同时兼容绝大多数主流浏览器,包括:IE 5.5及以上版本(windows),火狐Firefox 1.0及以上版本,遨游Mozilla 1.3及以上版本,网景7.0及以上版本。集成步骤参看fckeditor的例程1、在web工程下新建JS目录,并拷贝fckeditor到该目录中。2、导入fckeditor.js文件。3、在表单中加入如下代码:,var oFCKeditor=new FCKeditor(resume);/重要,fckeditor产生的输入项名称oFCKeditor.BasePath=$pageContext.request.contextPath/js/fckeditor/;oFCKeditor.Height=300;oFCKeditor.Value=;oFCKeditor.Create();,数据回显问题,TIP:Struts-Validate框架,Validator(验证器)框架是一个 Struts 插件,它支持采用声明式的方式对表单进行校验,而不需要用户编写一行Java代码。集成validate框架,Struts那哥们他帮你校验了表单,而且客户端也校验,比如javascript校验他也帮你校验了使用 Validator 框架的好处:更好的可维护性校验实现标准化正确的实现更少的代码重复自动客户端验证,TIP:Struts-Validate框架,解压Struts的例子,部署到web服务器中,查看例子体验。在工程中集成validate框架,你需要查看包下的validator-rules.xml文件,它是validate框架的校验规则文件,这个文件说明了如何在struts工程中集成validate框架:1、在struts-config.xml文件中配置validate插件。2、创建资源文件,并复制validate框架工作需要的信息。3、把例程自带的、validate框架的配置文件validation.xml,复制到当前web工程的WEB-INF目录下。validate框架环境搭建好后,就可以采用配置的方式对formbean的属性进行校验,但需要注意:1、formbean要想使用validate框架校验,不能直接继承 ActionForm,而要继承其子类 ValidatorForm。2、如果是DynaActionForm,就必须要继承DynaValidatorForm,TIP:Struts-Validate框架(valiate-rule),为校验器指定名称,校验器使用的类,使用该校验器时,调用校验器的什么方法,方法的参数,校验失败的错误提示信息,此信息为关键字,其值从资源文件中获取。,TIP:validation.xml文件示例代码,TIP:Validation.xml文件详解,元素:为表单配置验证规则,它的 name 属性指定了表单的名字.元素可以包含一个或多个子元素元素:配置表单中字段的验证规则property:指定 ActionForm Bean 中需要进行验证的字段的名字depends:指定字段的验证规则,多个验证规则之间以逗号隔开元素:指定验证规则对应的消息文本。该消息文本将替代在 validator-rules.xml 文件中为验证规则配置的默认的消息文本name:指定验证规则的名字key:当 resource 为 true 时,该属性指定消息 key,该消息 key 应该在 Resource Bundle 中存在,当 resource为 false 时,该属性直接指定消息文本resource:当该属性为true时,表明使用来自于 Resource Bundle 的消息;如果为 false,表明 直接在 key 属性中设置消息文本,默认为 truearg 元素:替换符合消息中的参数name,key,resource 元素同上position 元素:指定替换符合消息中的参数的位置var 元素:向验证规则传递参数 元素也可以访问元素,语法为$var:var-name,TIP:Struts-Validate客户端验证,Validator 框架也可以进行浏览器客户端验证,示例:,注意:的formName指定表单的名称。onsubmit事件的值也必须为return validate表单名(this),Struts中的异常处理,在Action中抛出一个ArithmeticException异常,并由Web容器去处理这个异常,在web.xml文件中如何配置?以Struts的配置方式处理异常全局异常:指定全局异常时,注意必须要指定key,配置key后,会从资源文件中获取消息。局部异常,struts问题:面试题,1、Action是单实例和线程不安全的。和 servlet一样的2、能区分ActionMapping与Action的区别吗?3、配置文件中的action元素中有哪几个属性必须设置4、在action中可不可以直接向浏览器输出内容?可以5、struts配置文件中的action元素的attribute属性的作用?6、struts配置文件中的action元素的input属性的作用?7、全局forward的配置,

    注意事项

    本文(传智博客struts开发.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开