版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高级软件人才实作培训专家!Struts开发讲师:方立勋北京传智播客教育高级软件人才实作培训专家!TIP:Struts简介 Struts是apache开发的一个web层的框架,它主要用于简化web层的开发,struts针对web层的一些常用操作, 例如: 表单数据的封装、校验和数据的回显 国际化开发 文件上传 异常处理 等等struts都提供了相应的简化,因此,很多web开发人员都会选用struts进行web开发。 Struts是如何做到简化web层开发的?北京传智播客教育 jspservletie在servlet中编写请求处理代码Struts
2、-config.xml在action中编写请求处理代码ieActionServletactionjspStruts的actionServlet对请求进行预处理,然后再调用开发人员编写的action处理请求高级软件人才实作培训专家!TIP:初学者需要明确的几个问题 Struts只是一个web层的框架,它用于规范并简化web 层的开发,它是对servlet、jsp等web开发技术的封装。在开发中大家遇到问题,如果发现struts不给力,照样 可以使用web技术解决,两种技术混用不会有任何问题。 web基础最重要 Struts只是一个web层的框架,它只是用于解决web层的问题,千万不要想着用str
3、uts去操纵数据库。北京传智播客教育 高级软件人才实作培训专家!TIP:Struts开发快速入门 用户注册案例,步骤:1、编写register.jsp表单页面,表单提交register.do处理。2、在web工程中导入struts开发包,在web.xml文件中配置struts框架提供的ActionServlet,使其处理所有以.do为结尾的请求。3、在/WEB-INF/目录下编写ActionServlet工作时使用的配置文件struts-config.xml,配置当ActionServlet收到register.do请求 时,调用一个名称为Register的Actio
4、n处理。4、编写ActionRegister,在其excute方法内编码,采用传统方式获取数据,并调用service完成用户注册,然后转发给相应的jsp页面。高级软件人才实作培训专家!TIP:让struts自动封装请求数据 Struts的ActionServlet的功能非常强大,我们只需要在它的配置文件( struts-config.xml文件)中配置一下,它就可以自动把请求数据封装到用户指定的formbean中。并且,struts在调用开发人员编写的action时,会把封装了数据的formbean传给action。这样,可 以省去开发人员在action中手工获取客户端提交的数据,减轻编码工作
5、量。 注意:用于封装数据的formbean要继承struts的ActionForm。高级软件人才实作培训专家!TIP:让struts转发请求 用户在编写action时,无须在action内手工编码进行请求转发。struts的ActionServlet在调用action.execute方法时,可以根据它的返回值,决定调用哪个JSP页面响应用户请求。 Action.execute方法的返回值ActionForward代表一个转发对象, struts 的ActionServlet在收到Action.execute方法的返回值ActionForward 后,会取出该对象封装的转发地址,进行请求转发。A
6、ctionServletActionJSPActionForward高级软件人才实作培训专家!TIP:让struts根据配置实现转发 在struts的配置文件struts-config.xml文件中,可以配置forward标 签,它用于封装一个转发地址。如: Struts的ActionServlet在调用action时,会把action的配置信息封 装一个ActionMapping对象中,并传递给action。 因此,开发人员在编写action时,无须硬编码指定转发地址,可以通过ActionMapping对象,获得配置文件中配置的转发地址,从而 实现转发。如下图:高级软件人才实作培训专家!TI
7、P:让struts根据配置实现转发Struts-config.xml封装配置信息ActionMapping请求ActionServletactionActionMappingWeb.xmlStruts-config.xmlformbeanactionActionServletWeb服务器ab.doactionForwardjsp高级软件人才实作培训专家!TIP:读struts源码,分析struts工作流程 Struts的控制器组件主要包括(课后一定读源码) ActionServlet对象:Struts 的核心类 RequestProcessor对象:由ActionServlet调用,负责处理用
8、户请求 Action对象:用户自己编写的类 Struts处理请求的流程: 当 ActionServlet 接收到 HTTP 请求后,在 doGet 或 doPost 方法中都会调用process()方法处理请求 在 ActionServlet 的 process() 方法中一旦选择了正确的子应用模块,就会调用RequestProcessor实例的process()方法来处理请求。在ActionServlet调用这个方法时,会把当前的request和response对象传给它 RequestProcessor实例的process()方法调用ProcessActionCreate()方法,先判断是
9、否在 Action 缓存中存在Action实例,如果不存在,就创建一个Action 实例,把它保存在 Action 缓存中 RequestProcessor实例的process()方法调用Action实例的execute()方法北京传智播客教育 高级软件人才实作培训专家!TIP:Struts配置文件常用属性 指定action处理的地址 指定处理请求的Action的完整类名 指定使用哪个formbean封装请求参数 指定把formbean存放到哪个域对象中,默认session 指定formbean存储的key,不设默认为name属性的值 指定formbean的数据是由哪
10、个页面提供的,提供此属性的目的在于formbean校验失败时,程序方便跳回formbean的输入页面,显示校验失败信息。 指定收到请求时,跳转到相应的jsp页面,如果配置了此属性,则action将不再被调用。 指定收到请求时,进行页面包含。 如果action把该属性设置为true,则它可以处理客户机发出的所有无效的.do请求,默认值为false 配置action参数,调用actioMapping.getParameter方法可以获得这里配置的参数。 标签和所有的配置信息使用哪个对象封装, 默认值为ActionMapping对象。 请求参数封装到formbean中后,是否
11、让struts自动北京传智播客教育 w 调用formbean的validate方法进行数据校验。默认true高级软件人才实作培训专家!TIP:补充知识点 需求: Web应用程序若要严格按照MVC设计模式,所有客户端的请求都需要发送给servlet处理,servlet再转发到JSP显示。 因此,对于上述案例中的register.jsp页面,也要禁止用户直接访问,而应把它放在web-inf目录中保护起来,由用户访问servlet后,servlet再转发到register.jsp页面上。 传统做法和Struts的做法。 在首页上挂上注册功能 标签的好处: 使用不用关心web应用程序的名称。 可以自动
12、附加jsessionid参数进行url重写。 可以对参数信息进行url编码。 标签附件参数常用属性:paramID、paramName、name、property。北京传智播客教育 高级软件人才实作培训专家!TIP:补充知识点 标签示例:高级软件人才实作培训专家!TIP:借助struts完成表单校验 表单数据提交后,在服务器端编程校验数据,是一个很常见的需求。所以struts的ActionServlet在把数据封装到formbean后,会自动调用formbean的validate方法对数据进行校验,并根据validate方法的返回值,决定转发到哪个jsp页面处理。 S
13、turs的这种处理方式,可以让开发人员少死点脑细胞,开发人员只需要在validate方法中写代码进行数据校验就OK了,调用方法的事由struts的actionServlet去做了,并且,调用方法完后, 如果有错误,跳转的事,也由struts根据配置文件做了。 注意:若想struts的actionServlet把数据封装到formbean后, 调用其validate方法,需要在struts-config.xml文件中把action 的validate属性设置为true,默认值为true。北京传智播客教育 高级软件人才实作培训专家!TIP:借助struts完成表单校验 S
14、truts调用formbean.validate方法后,其规则为: 如果validate返回的ActionErrors对象为空或null,则Struts认为表单验证通过,struts进而继续调用Action处理请求。 如果validate返回的ActionErrors不为空,并且封装了数据,则认为校验失败,Struts将自动跳转回表单输入页面。(input属性指定) 因此用户若想校验失败,只需要创建ActionErrors对象,并调用其方法: ActionErrors.add(String key,ActionMessage message)向ActionErrors对象中加入相应的错误消息,
15、返回给struts即可。示例代码:高级软件人才实作培训专家!TIP:在JSP中显示校验信息 Struts在收到Formbean的返回值ActionErrors后,会将其存储到request域中,进而带给表单页面,以便开发人员在表单页面中显示校验失败的错误信息(这点建议读读struts的源码)。 在JSP页面中开发人员可以编码显示错误信息: 注意上面的代码取request的errors对象时为什么用“org.apache.struts.action.ERROR”,这个值从何来? 显示消息时有可能需要在struts-config.xml文件中配置一个资源文件北京传智播客教育 www.itcast.
16、cn高级软件人才实作培训专家!TIP:使用显示校验消息 在JSP页面中手工编码获取errors对象中保存的数据很麻烦,因此Struts编写了标签,它用于封装JSP页面中用于获取消息的java代码。 用户使用标签可以很轻松获取到errors中保存的校验信息,示例。 标签也可以以ActionMessage中封装了key为关键字,从资源文件中检索数据予以显示,如下所示: 看看标签源码,看errors标签是如何以关键字检索资源文件数据的。 注意:errors标签工作时需要资源文件。 取消false,html:errors标签在显示ActionMessage封装的消息时,将以ActionMessage的
17、key为关键字从资源文件中检索数据显示高级软件人才实作培训专家!TIP:ActionMessage ActionMessage封装消息的方式很灵活,后面两个构造函数中的value参数,用于替换消息文本中的占位符:北京传智播客教育 对应资源文件内容:errors.required=0不能为空高级软件人才实作培训专家!TIP:练习 完成对Register.jsp页面的完整校验北京传智播客教育 高级软件人才实作培训专家!TIP:练习 private String username; private String password; private
18、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.birthd
19、ay,yyyy-mm-dd); 对于页面中的数据,可采用枚举类表示,对枚举值的校验可采用如下类似方式:Gender.valueOf(this.gender);高级软件人才实作培训专家!TIP:使用Struts标签完成表单数据回显 Struts提供了很多表单相关的自定义标签,如: 这些标签除用于生成相应的html标签外,最大的好处在于它在产生html标签时,会自动检索相应formbean的数据予以显示,这样,当表单校验失败时,表单数据的回显struts帮我们干了,开发人员就不 需要再编码去取了。高级软件人才实作培训专家!TIP:使用Struts标签完成数据回显 使用Struts的html标签完成
20、数据回显时注意的问题: html标签回显数据时,会以org.apache.struts.taglib.html.BEAN为关键字,从各个域中查找bean,找不到则抛空指针异常。所以使用html标签时域中须有以org.apache.struts.taglib.html.BEAN为关键字的对象。 这个工作可以交给html:form标签做,html:form标签在执行时,会查找域中已有的formbean,并以org.apache.struts.taglib.html.BEAN为关键字把formbean存在域中。如果html:form标签在域中找不到formbean,则html:form标签会实例化一
21、个空bean,然后存储到域中。因此,为了在页面中使用struts的html标签回显数据,这些标签需要配合html:form标签使用。(查看html:form标签的源文件可以看到这点)。 对于复选框中的数据,Html:checkbox标签不能完成数据回显,复选框的数据回显需要使用html:multibox。 Struts中的html:password标签也会回显数据,如果不想password回显,需要把其redisplay属性置为false。 补充:formbean的reset方法html产生一个标签。也包括来自于用户会话中的 language 属性form定义一个表单。Action 和 foc
22、us 属性是最有用的属性checkbox产生一个检查框字段file产生一个文件选择输入字段hidden产生一个隐藏字段option产生一个选择项options产生一个选择项列表password产生一个口令输入字段radio产生一个单选输入字段select产生一个选择元素text产生一个文本输入字段textarea产生一个 html 文本区域元素image产生一个图像输入字段button产生一个按钮输入字段cancel产生一个取消按钮submit产生一个提交按钮reset产生一个重新设定按钮errors显示错误消息img产生一个 html img 标签高级软件人才实作培训专家!TIP:请求数据的
23、中文乱码问题 解决方案: 过滤器 重写ActonServlet 重写RequestProcessor北京传智播客教育 高级软件人才实作培训专家!TIP:防止表单重复提交 什么情况下会发生表单重复提交 刷新 网络延时,多次点击 后退、前进 防止表单重复提交的原理 表单应由一个程序产生,程序在产生表单时: 生成一个随机值,并附在表单的一个隐藏输入项中。 把随机值存储在session域中。 表单在提交时,服务器程序客户机带过来的随机值和session域中保存的随机值是否一致,如果一致则允许提交,否则认为是重复提交。高级软件人才实作培训专家!TIP:使用struts防止表单重
24、复提交 Struts的标签除了可以生成标签、协助其它html标签完成数据回显外,它还提供了防止表单重复提交的功能。 标签在生成表单时,会检查session域中是否存在token,如果存在则自动使用token生成隐藏字段。 Struts为方便开发人员生成token,在action中提供了saveToken方法,调用这个方法就可以在session域中保存一个token。 Struts为方便开发人员在action中校验用户是否为重复提交,因此它在action中也提供了isTokenValid方法,该方自动判断表单是否为重复提交。 防表单重复提交在struts中的做法:1、用户先访问Action,Ac
25、tion中调用saveToken方法,然后派发到表单页面。2、在表单页面中使用标签, 标签会自动为表单生成一个带随机值的隐藏字段。3、在表单提交的Action中调用isTokenValid方法,就可以判断出表单是否为重复提交,从而可以根据情况决定如何处理。 isTokenValid方法返回true,则为允许提交,处理提交后,要记得调用reset清除token。高级软件人才实作培训专家!TIP:使用beanUtils转换表单数据 表单校验通过后,需把formbean的数据封装到实体bean中,此时应采用beanUtils框架,并注册相应的转换器。 为避免在多个Action中重复注册转换器,可采用
26、listener在web应用启动时就注册转换器。高级软件人才实作培训专家!TIP:表单数据业务逻辑校验 表单数据校验通过后,在action中可能会对数据进行业务逻辑验证, 例如检查当前注册用户是否已经被别人注册过了,这种验证称为业务逻辑验证。 业务逻辑验证如果失败,其相应的信息也应显示在页面上。高级软件人才实作培训专家!TIP:表单数据业务逻辑校验 很多网站也会提供如下图所示的验证方式:高级软件人才实作培训专家!TIP:使用struts修改数据 程序取出数据库中的数据,显示在一个表单页面上,以便于用户 修改数据,这也是开发中经常需要实现的功能。实现此功能需要 注意的问题: 为回显数据方便,通常
27、在页面中都会使用struts的html标签。 而程序调用dao取出的数据通常放在实体bean中,要想在页面中使用html标签取出数据显示,此时应把实体bean的数据又转换到表单bean中,对于复杂类型的数据,此时就需要在beanutils框架中注册数据的双向转换器了。 数组类型是比较特殊的类型,进行类型判断是可以采用如下方式:clazz.equals(Object.class) 获取到的 Bean为在页面中显示,还需要把bean存放在request域中,存放的关键字可以使用action上配置的formbean的名称。 注意:在action如果向request域存formbean,这个formb
28、ean想在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 和commons-io-1.1.jar 在 Action 的
29、 execute() 方法中使用 InputStream is = file.getInputStream(); 方法得到文件的输入流 再使用 io 的方法对文件进行上传操作.高级软件人才实作培训专家!TIP:struts文件上传注意事项 在formbean中定义FormFile类型的成员变量接收浏览器上传的文件。只要在Formbean中定义一个FormFile类型的变量,struts框架会自动把文件上传的内容变成FormFile对象并注入进来,即使没有上传文件,对应的FormFile变量也会有值,只是得到文件名为” 和文件大小为0。 中文文件上传问题 设置上传文件的最大值 注意:如果上传文件
30、超出了最大值, struts不会把上传数据封装到FormFile中,即FormFile为null,程序根据FormFile是否为空,就可提示用户文件是否超出大小。 多文件上传问题 DownloadAction提供下载。高级软件人才实作培训专家!TIP:DispatchAction 需求:客户端每个请求都对应服务器端一个Action,会导致服务器端action过 护困难。 在Struts中允许多个请求对应一个Action,例如对Book对象的增删改查操作,可以交给一个Action处理,Action根据请求地址中附加的参数信息,再派发到相应的方法,例:增加书籍修改书籍查找书籍删除书籍高级软件人才实
31、作培训专家!TIP:DispatchAction Struts中的DispatchAction提供了此类功能,它可以根据请求的参数,调用不同的方法,但要注意的是开发人员在声明参数对应的方法时,方法的签名需要与execute() 方法一致。例: 注意Struts中的DispatchAction并不知道用户的参数是以什么名称 提交的,因此若想DispatchAction能正常调用到用户自定义的方法, 用户需要在action的配置文件中通过parameter属性告诉给struts。 课后看看源码:分析DispatchAction是如何调用用户自定义方法的高级软件人才实作培训专家!TIP:Dispat
32、chAction 注意事项: DispatchAction是Action的子类,它重写了Action的execute方法, 因此用户继承DispatchAction时,若想使用DispatchAction提供 的分发功能,切记不可覆盖其execute方法。 DispatchAction位于struts的扩展包中,即struts-1.3.8libstruts- extras-1.3.8.jar。高级软件人才实作培训专家!TIP:MappingDispatchAction MappingDispatchAction是DispatchAction的子类,它提供的功能和DispatchAction功能
33、类似,它也允许多个请求对应一个Action, 但它的实现方式更加灵活,如图: MappingDispatchAction可以配置到多个地址上,比DispatchAction更加直观,并且也可使用不同的formbean,但缺点是使配置文件过于复杂。 补充知识点:让struts拥有多个配置文件。高级软件人才实作培训专家!TIP:动态FormBean Struts允许开发人员在配置文件中声明一个formbean,而无须手工针对每一个表单设计一个Formbean。步骤:1、配置一个元素, 将type属性设置为 DynaActionForm。2、的子元素用来设置动态ActionForm的属性。元素的na
34、me属性指定属性名, 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、在
35、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框架
36、 Validator(验证器)框架是一个 Struts 插件,它支持采用声明式的方式对表单进行校验,而不需要用户编写一行Java代码。 使用 Validator 框架的好处: 更好的可维护性 校验实现标准化 正确的实现 更少的代码重复 自动客户端验证高级软件人才实作培训专家!TIP:Struts-Validate框架 解压Struts的例子struts-cookbook-1.3.8,部署到web服务器中,查看例子体验。 在工程中集成validate框架,你需要查看org.apache.struts.validator包下的validator-rules.xml文件,它是validate框架的校验规则文件,这个文件说明了如何在struts工程中集成validate框架:1、在struts-config.xml文件中配置validate插件。2、创建资源文件,并复制validate框架工作需要的信息。 3、把struts-cookbook-1.3.8例程自带的、validate框架的配置文件validation.xml,复制到当前web工程的WEB-INF目录下。 validate框架环境搭建好后,就可以采用配置的方式对formbean的属性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- TY/T 1114-2025桥牌赛事活动参赛指引
- 2026年江苏省南京秦淮外国语校初三4月质量检测试题数学试题含解析
- 2025-2026学年湖北省黄冈市东坡中学初三下学期第二次调研考试物理试题试卷含解析
- 2026年大学大一(教育学)教育心理学基础测试题及答案
- 护理职业精神与人文关怀
- 护理不良事件的风险评估与控制
- 《这儿真美》习作课例研究的启示
- 护理应急调配效果跟踪
- 2026六年级数学上册 比推理能力
- 2026五年级数学上册 多边形面积的难点攻克
- 2026河北衡水恒通热力有限责任公司公开招聘工作人员28名考试参考题库及答案解析
- 网吧的安全保卫制度
- 2026届高三高效学习方法与备考策略
- 2026广东中山市民政局招聘雇员2人考试参考试题及答案解析
- 2026年安庆职业技术学院单招职业倾向性考试题库及答案详解(考点梳理)
- 2026年春季小学美术桂美版(2024)二年级下册教学计划含进度表
- 2026年六安职业技术学院单招职业适应性考试题库含答案详解(综合题)
- 2026年招聘辅警的考试题库及一套完整答案
- 2026年南京铁道职业技术学院单招职业技能测试题库附答案详解ab卷
- 2025年黑龙江农业职业技术学院单招职业技能考试题库附答案解析
- 石油天然气科普
评论
0/150
提交评论