day29_struts2验证&拦截器

来源:互联网 发布:傅雷夫妇 死 知乎 编辑:程序博客网 时间:2024/05/22 09:51

回顾

一、结果视图

<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---->其他类型   其他类型------>Stringc、注册类型转换器:    局部:XXX-conversion.properties    全局:xwork-conversion.propertiesd、类型转换失败:自动转向一个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:获取ServletAPIstaticParams:静态参数注入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:值栈(数据中心)

0 0