Struts2总结
简介
1)三层架构:展示层 业务逻辑层 数据持久层
2)struts2框架
1-展示层框架
2-mvc框架
3-apache公司
4-并不是struts1的升级版,是webwork升级
5-核心:核心控制器 拦截器
配置
1) 配置文件:
a) Struts-default.xml:struts的默认配置
b) Default.properties:struts的常量
c) Struts.xml:
i. Action配置
ii. 常量的配置
iii. 全局result
iv. 全局异常
v. 自定义拦截器的注册
d) Struts.properties:常量的覆盖(可以省略)
i. 开发阶段使用
1.
ii. 运行阶段使用
1.
请求响应的处理
1) 请求参数处理:
a) Action属性--------简单数据
b) Model领域对象--------数据多 完整的对象
c) ModelDriven接口------一种对象
2) 响应参数处理
a) 作为action属性-------值栈
b) 获取request等对象,存放到上下文中
3) 获取request等对象
a) actionCotext------map
b) 接口RequestAware等
c) Servletactioncontext----原生态的request等对象
Action类
Struts2将控制层分为两部分:核心控制器 action类
Action类的总结:
1) 简单的Javabean类,尽量继承ActionSupport
2) 非单例
3) 必须提供空构造
4) Action的属性要符合Javabean的规范
OGNL表达式
1) 全程:对象导航图语言
2) 功能:可以在工程的任何文件(struts文件)中使用
3) 搭配struts2的标签使用更合适
4) 不同文件中的语法:
a) Jsp中:
i. 标签属性时Object:直接写
ii. 标签属性是String:%{ognl}
iii. 不确定:统一%{ognl}
b) Action类:getText
c) 配置文件中:${ognl}
5) # % $:
a) #:1-获取上下文中的数据(action)2-jsp上定义map
b) %:在标签属性类型为string时获取ognl
c) $:在国际化资源文件中 在xml配置文件中ognl
值栈
1) 值栈的根root:存放的是action类对象
2) 栈的context:action request session application
Struts2标签
1) 控制标签
2) Ui标签
a) 替代form
b) 主题
3) 使用:先导入
国际化
1) 理解国际化的原理:
a) Locale:确定一个运行环境 zh_CN
b) 资源文件的定义:
i. BaseName:前缀
ii. 命名:baseName.properties baseName_zh_CN.properties
2) Struts2对国际化的支持:
a) 分类:
i. action级
1. 命名:basename:actionclassname
2. 位置:action所在的包
ii. 包级
1. 命名:basename:package
2. 位置:对应的包中
iii. 全局
1. 命名:同Javase
2. 位置:根
3. 配置:
b) 加载顺序:action---》包---》全局
c) 参数:
i. 占位符 {0} {1} 最多10个
ii. 使用ognl :${}
文件上传下载
1) 文件上传
a) 单文件上传
i. 前台:method=post enctype 加入file域
ii. Action:指定三个属性
1. Fieldname
2. FieldnameContentType
3. FieldnameFileName
iii. 文件的限制:
1. Fileupload拦截器,已经在默认的拦截器栈中
a) 单文件大小
b) 文件类型
c) 文件后缀
2. 如何设置三个属性的值:xml文件中
b) 多文件上传
i. 将拦截器的三个属性改为数组或者list集合的形式即可
ii. 设置文件的总大小:通过一个常量来控制:
c) 错误提示消息处理:
i. 拦截器中规定了集合消息的key,在国际化的资源文件中覆盖这些key即可
2) 文件下载
a) Stream 的一个结果类型
Result结果类型
1) 默认:dispatcher:请求转发到jsp
2) Redirect:重定向到jsp
3) Chain:请求转发到action
4) redirectAction:重定向到action
5) stream:文件下载或者异步ajax
类型转换
Struts2对数据类型的转换封装非常完善,重点关注类型转换失败后的消息处理。
1) 类型转换失败后的跳转:跳转到input
a) 需要给action指定一个input的result
2) 消息的回显:
a) 如果是ui标签,主题非simple:会自动回显
b) 如果是simple主题:需要手动回显:
i. El表达式 ${fielderrors.age[0]}
ii. <s:fielderror>获取
c) 如果不是ui标签:el表达式
3) 消息定制:国际化资源文件中:imvalid.fieldvalue.fieldname = xxxxxxxxxx
数据校验
1) 分类:
a) 编程式校验
b) 声明式校验(推荐)
i. 指定一个声明式校验文件xml
1. 命名:actionclassname-validation.xml/actionclassname-actionname-validation.xml
ii. 编写:
1. 字段校验器:
a) 先指定字段后指定校验器(推荐)
b) 先指定校验器后指定字段
2. 非字段校验器:不是针对某一个字段的校验
2) 短路校验
a) 原理:对同一个字段的多个校验器之间,如果上一个校验器失败了则后续校验器不在执行
b) short-circuit指定为true即可
3) 校验消息的定制:
a) 将错误提示的message放到消息资源文件中
b) 在message标签中使用key直接指定键即可
4) 自定义校验器:
a) 定义一个类实现Validator接口
i. ValidatorSupport:非字段校验器
ii. FieldValidatorSupport:字段校验器
b) 重写validate方法
c) 注册:
i. 在跟目录上新建一个文件:validators.xml
ii. 添加代码:
拦截器
1) 工作原理
2) 配置:
a) 指定拦截器:
b) 定义拦截器栈:
3) 自定义拦截器:
a) 定义一个类实现Interceptor或者继承AbstractInterceptor类
b) 重写intercept方法
c) 注册拦截器:
Action响应ajax请求
1) 根servletAPI耦合方式:借助于response获取响应out流完成
2) 借助stream结果类型
3) Struts内置的json插件
Struts2的零配置(注解)
1) struts2通过一个插件:struts2-convention-plugin-2.3.20.jar
2) 该插件可以完全抛弃struts2的xml配置文件,甚至连注解也不用写
a) 包名中要含有action actions struts struts2
b) Action类:要么继承action 要么名字的后缀是Action
c) 如果不写注解:
i. 会将action actions struts struts2包的namespace映射为 /
ii. 将action actions struts struts2包中的子包的namespace映射为
1. Com.action.user /user
iii. Action的name映射:将action后缀去掉后的剩余部分全部小写,如果包含多个单词则单词之间使用-分割
iv. 响应试图的映射:会到web-inf中的content目录中找:
1. Actionurl-resultname.jsp
2. Actionurl.jsp
3. Resultname.jsp
d) 注解: