回顾
一、结果视图
<result>
元素
属性:name。取值是一个逻辑视图,和动作类中的动作方法返回值对应。默认值是success
type。指示转向目标的类型(结果类型)。默认值是dispatcher
type的取值:struts-default.xml的struts-default包中有定义。
常用的type类型:
chain
dispatcher
redirect
redirectAction
二、自定义结果视图
1、直接或间接实现Result接口:自己输出即可
2、定义结果类型
3、使用结果类型
三、局部和全局结果视图
1、局部:动作中使用
2、全局:所有动作使用
四、封装请求参数:很重要
1、动态参数:由一个叫做params拦截器负责处理的
a、动作类作为模型: XXXAction :username <input name="username"/>
b、动作类和模型分开: XXXAction XXX <input name="xxx.username"/>
c、动作类和模型分开:模型驱动 动作类实现ModelDriven接口,getModel()返回模型的实例。
叫做modelDriven的拦截器负责处理的
2、静态参数
在配置文件中给属性赋值
由一个叫做staticParams拦截器负责处理的
3、批量添加时:
把数据封装到List或Map中
五、学生注册案例:Struts2+三层架构
六、类型转换:Struts2都做好了。
自定义类型转换器:
a、直接或间接实现TypeConverter接口(建议继承StrutsTypeConverter)
b、String---->其他类型 其他类型------>String
c、注册类型转换器:
局部:XXX-conversion.properties
全局:xwork-conversion.properties
d、类型转换失败:自动转向一个name=input的逻辑视图
错误消息提示和数据的回显:
数据回显:最好使用struts2的标签
错误提示:前提:继承ActionSupport;XXX.properties invalid.feildvalue.XXX=你的提示
叫做conversionError拦截器
一、输入验证
用户输入验证:开发中工作量极大,产出比较低。
客户端验证:用js。防君子不防高手。
服务器端验证:无论何时都必须写。
实际开发:客户端验证+服务器端验证
以下内容:属于服务器端验证
1、编程式验证
编写验证代码:
缺点:验证规则写到了代码中,硬编码。
优点:验证时可以控制的更加精细。(用的少)
a、针对动作类中的所有动作方法进行验证
1、动作类需要实现ActionSupport,覆盖掉public void validate(){}方法
2、方法内部:编写你的验证规则,不正确的情况调用addFieldError添加错误信息
动作类就是模型:
动作类和模型分开:
不使用student.username这种方式添加错误信息s:fieldError标签中和普通标签中都有错误提示消息,使用了,将只会在s:fieldError中显示错误
消息
3、验证失败:
视图:会自动转向一个name=input的逻辑视图
错误消息提示:建议使用struts2标签库。如果没有显示请使用s:fieldError标签
b、针对动作类中的指定动作方法进行验证
方式一:简单。使用一个注解。
方式二:
如果一个动作方法名叫做regist
只针对该方法进行验证,请编写public void validateRegist(){}
2、声明式验证
优点:把验证规则写到了配置文件中。(用得多)
缺点:不是很精细。
错误视图和消息提示和编程式一致。
a、针对动作类中的所有动作方法进行验证
动作类就是模型:
在动作类所在的包中建立:动作类名-validation.xml配置文件。
动作类和模型分开:
在动作类所在的包中建立:动作类名-validation.xml配置文件。
b、针对动作类中的指定动作方法进行验证
在动作类所在的包中建立:动作类名-动作名(是请求的struts.xml配置文件中的)-validation.xml配置文件。
说明:验证功能是由validation拦截器来负责处理的。回显错误信息是由workflow拦截器来负责处理的。
3、Struts2中提供的内置声明式验证器的使用
Struts2提供的声明式验证器在xwork-core-**.jar包的
com\opensymphony\xwork2\validator\validators\default.xml配置文件中。
4、自定义声明式验证(了解怎么运作的)
验证密码的强度:至少一个大写、小写、数字组成。
a、编写一个类,继承FieldValidatorSupport
b、声明自定义的验证器
在构建路径顶端,建立一个固定名称为validators.xml的配置文件
c、可以像使用struts2内置的声明式验证器使用自己定义的验证器了
二、Struts2的国际化:鸡肋
1、配置全局消息资源文件
1.1配置
在struts.xml中配置全局消息资源文件
1.2使用
a、在动作类中使用
前提:必须经过动作方法。动作类要继承ActionSupport
b、在页面上使用
2、配置局部消息资源文件
1、消息资源文件:动作类名_zh_CN.properties
2、访问:
a、在JSP上使用,直接访问的JSP,显示全局消息资源文件的内容。因为没有经过动作类。
b、通过访问动作,转发到JSP,那么显示局部的。
c、通过动作访问,转发到JSP,如果动作类没有继承ActionSupport,那么会显示全局的。
3、自由指定资源包
资源包在某个目录中
三、Struts2中的拦截器:(很重要)
常用的拦截器(面试题):Struts2中功能核心。是一种AOP编程思想的具体应用。
modelDriven:模型驱动
servletConfig:获取ServletAPI
staticParams:静态参数注入
params:动态参数注入
validation:输入验证,声明式验证。
等等
1、自定义拦截器(和过滤器功能差不多,保安)开发步骤
a、编写一个类,继承AbstractInterceptor抽象类
b、配置拦截器
c、使用拦截器
必须明确:执行顺序:
2是动作类中的动作方法;3是结果视图
2、编写一个执行动作方法前验证用户是否登录的拦截器
(细粒度权限控制)
a、针对所有动作方法进行拦截的拦截器
b、开发功能更加强大的拦截器
四、文件的上传和下载
1、文件上传
必要前提:
表单的method必须是post
表单的enctype必须是multipart/form-data
提供input type=”file”类型上传输入域
在Struts2中,文件上传是由一个叫做fileUpload完成的。
1.1单文件上传
1.2多文件上传
1.3上传中出现问题
上传失败时,会转向一个input的视图。
错误显示:
修改上传文件的大小
限制上传文件的类型
allowedTypesSet:允许上传的文件的MIME类型,多个用逗号分隔
allowedExtensionsSet:允许上传的文件的扩展名,多个用逗号分隔
修改错误消息提示:与国际化有关
文件上传所有的默认消息提示在:
struts2-core.jar org\apache\struts2\struts-messsages.properties
覆盖掉默认的消息提示:局部消息资源文件无效。
全局资源文件有效:
2、文件下载
OGNL表达式入门
ValueStack:值栈(数据中心)