本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-146.html
1. Struts工作流程主要对象:Action、ActionForm、ActionServlet、ActionForward、ActionMapping
2. 工作流程:Register.do发送请求,找到web.xml从而找到ActionServlet,ActionServlet收到请求之后,进行请求的预处理,Locale,http请求头解析和基本响应头的封装等等,再根据路径找到对应的Action,并查找配置文件,找到相应的Action的配置,将该Action的配置封装成ActionMapping,把http请求中的参数封装成ActionForm,接着把request、response、mapping、form传入Action中,在Action的excute方法中对该请求进行处理,并返回ActionForward,根据这个ActionForward对该请求进行相应的jsp页面转发。
3. Struts用处:web层简化处理、提供了丰富的标签库、自动表单检验、
4. 表单校验:ActionForm的validate方法,返回的ActionErrors包含了表单错误信息,表单校验通过则返回null,在struts-config.xml中的action标签的input属性指定表单检验失败之后回显jsp页面,并在该页面中用<html:errors property=""/>标签对表单错误信息显示
5. Struts表单自动回显标签<html:text/>、<html:password/>、<html:checkbox/>等等,要配合<html:form/>使用,其中checkbox不能回显,要用multibox,并且multibox不执行标签体;
6. 表单号校验:<html:form/>表单会自动检索域中的"org.apache.struts.action.TOKEN"属性,并自动生成hidden类型表单参数。
步骤:在UIAction中调用saveToken(request);执行生成表单号并保存的操作,在处理Action中调用isTokenValid(request)判断表单号校验情况,调用resetToken(request);删除域中的表单号;
7. 表单校验时顺便把数据封装到实体:在FormBean中维护一个实体对象,在validate执行时,顺便把数据填入实体中,之后直接get就可得到实体数据,加快效率(需要事先注册好beanutils的相关的类型转换器)。
8. 不进行校验直接把表单数据填入实体:Struts依赖的beanutils支持"user.username"这种属性方式赋值,可以直接在FormBean中维护一个实体,在jsp表单选项中用"user.username"的二级Bean属性赋值方式来直接把表单值注入实体中(需要事先注册好beanutils的相关的类型转换器)。
9. 文件上传:(乱码用过滤器解决)
A. jsp设置post方式和enctype类型;
B. 表单中的file类型的表单使用FormFile类型的属性,自动封装的;
C. 导入commons的fileupload和io包;
D. Action中再对FileForm得到文件输入流,使用IO进行上传操作。
注:A.多文件上传:表单名称用list[0],用一个List<FormFile>保存,重写get和set方法。
B.文件上传大小限制需要设置struts的controller标签。
C.文件下载:用DownloadAction,封装好StreamInfo返回即可,要设置下载header。
10.常用Action:
(1)DownloadAction:处理文件下载请求Action;
(2)DispatchAction:可以根据表单参数调用不同的方法,达到一个Action处理多个业务的目的,配置文件中parameter属性设置对应的表单参数的名称;
(3)MappingDispatchAction:和DispatchAction类似,略微简化URL,不常用;
11.动态FormBean:不需要设计formbean,而是动态生成的;
步骤:<form-bean/>标签设置type为DynaActionForm,设置<form-property/>动态为formbean添加属性;
需要使用时,获取并强转为DynaActionForm即可使用;
表单校验:继承DynaActionForm并复写校验方法;(validate框架)
12.Struts-Validate框架(表单校验框架,struts框架):
样例:struts-cookbook-1.3.10样例是关于本框架
优点:声明式,不需要写java代码,并且自动生成js表单校验代码,和动态FormBean配合可以完全依靠配置文件定义整个FormBean,不需要修改Java代码;
步骤:
(1) formbean类继承ValidatorForm或者DynaValidatorForm;
(2) 此时formbean调用validate方法就会调用Validator框架校验;
(3) validator-rules.xml配置文件在struts-core包中集成了,只需要写validation.xml即可;
(4) struts-config.xml文件中用<plugin/>标签配置validator框架,可在struts-core中的validator-rules.xml找到如何配置;
(5) validation.xml中配置,需要配合国际化资源文件:
配置方式支持错误信息国际化资源文件和占位符替换;
注:validator-rules.xml定义校验规则;
validation.xml配置Bean来使用校验规则校验;
mask校验器就是匹配正则表达式的:
<var>
<var-name>mask</var-name>
<var-value>填写正则表达式</var-value>
</var>
前台js框架校验:
<html:javascript formName="RegisterForm"/>
<html:form action="/Register" onsubmit="return validateRegisterForm(this)">
添加自定义校验规则:在cookbook工程中密码校验可参考,在validation.xml中<global/>标签定义自定义规则,再在下面编写校验规则进行使用。(需要写一个实现校验功能的类来执行自定义校验规则,在global标签中标明相应的类路径即可)
13. Struts异常处理:
<exception/>标签:path属性:设置异常跳转路径;
Type属性:异常的路径名;
Key属性:错误页面携带的错误信息在资源文件中的key;
14. 全局配置参数:
<global-exception/>:全局处理异常;
<global-forwards/>:全局跳转页面,例如全局消息显示页面,会在所有的action的mapping中可以查找到;
15. Action是单例的并且线程不安全的!!!
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/blog/8/8-146.html