struts2_part02
来源:互联网 发布:知乎周刊plus epub 编辑:程序博客网 时间:2024/06/03 22:52
配置全局结果视图:
struts2的action在找结果视图时,是先找局部,当局部没有时,再找全局的
result标签:
作用:用于配置结果视图属性:
name:指定逻辑结果视图。就是用于和动作方法的返回值进行比较的
type:指定以何种方式前往指定的视图。
type的常用取值:
dispatcher: 请求转发 默认值
redirect:重定向到一个jsp,它也可以重定向到另外一个动作。
redirectAction:重定向到另外的一个动作
重定向请求域中的数据就没了,因为他是两次请求,是服务器的动作
转发只能在应用内转发,重定向可以定向到外面
获取原始ServletAPI对象
* 第一种方式:使用struts2提供的工具类,它里面有静态方法,可以直接获取对象实际开发中采用的方式
* 工具类是:ServletActionContext
第二种方式:通过实现接口的方式
* ServletRequestAware
* ServletResponseAware
* ServletContextAware
无论是第一种方式获取,还是第二种方式获取,其本质都是在ActionContext中根据key来获取Value。
ActionContext它看上去就像是一个Map结构
.get(x)只有map和threadlocal 对象有这种方法
属性驱动:
* 第一种情况:没有实体类
* 把实体类中定义的属性,都放到动作类中定义
* 动作类和模型在一起
* 使用要求:
* 表单元素的name属性取值,它必须和Action中的setXXXX方法后面的部分保持一致。
* 这是拦截器为我们封装,是一个名称为params的拦截器为我们封装的。
* 所有的封装方式,采用的拦截器,都是这个params。
* 它的封装规则就是:找对应的位置上有没有对应表单name取值的set方法
第一种方式:属性驱动之没有实体类,它找的对应位置:Action中的setXXX方法
* Struts2中自动为我们转换的数据类型:
* 1、基本数据类型自动转换
* 2、日期类型按照本地格式转换成日期对象本地日期格式:yyyy-MM-dd
* 3、字符串数组会按照逗号+空格的方式拼接成字符串。
*
* Struts2默认只为我们解决了post请求的中文乱码问题,get方法没有解决
第二种方式:属性驱动之有实体类,它找的对应位置:Action中的setUser/getUser方法,找到后再去User类中找setXXX方法给属性赋值
* 表单能提供的数据类型只有3种:
* 1、字符串
* 2、字符串数组(表单元素name属性取值一致时,是一个字符串数组)
* 3、文件(input type="file")
模型驱动:
* 要想使用模型驱动,必须遵循以下的编码要求:
* 1、动作类必须实现ModelDriven<实体类>接口
* 2、动作类中需要提供一个实体类对象(模型对象),并且必须自己实例化
* 3、提供接口中抽象方法的实现,并且返回模型对象。
* 此种封装方式,也是params拦截器实现的。
* 它的封装规则就是:找对应的位置上有没有对应表单name取值的set方法
第三种方式:模型驱动,它找的对应位置:找User中的有没有对应setXXX方法。
* 它在封装之前,需要另外的一个拦截器配合才能实现,拦截器就是modelDriven拦截器。
*
* modelDriven+params两个拦截器组合实现的功能。
复杂类型的封装:集合参数的封装
* 分为两种情况:List/Map
总结:
1、result标签:
name:是用于和动作方法的返回值进行比较。当一致时前往指定的视图(视图可以是jsp,也可以是一个动作)
type:指定用何种方式前往
2、全局结果视图和局部结果视图
局部:指的是在action标签内部定义的result标签,只能当前action使用。
全局:在global-results标签内部定义,所有继承有global-results标签的包的子包,都能用。
优先级: 先局部后全局。
3、获取ServletAPI的三种方式:
第一种:ServletActionContext工具类
它里面有静态方法,可以直接获取
第二种:通过实现接口
它需要使用servletConfig拦截器来实现
第三种:直接使用ActionContext来获取
前面两种其实都是从此处获取的。
4、请求参数的封装:
属性驱动:
动作类和模型在一起
要求:表单元素的name取值必须和动作类中setXXX方法保持一致
动作类和模型分开
要求:表单中元素name的取值必须使用OGNL表达式
动作类中需要定义模型,并且提供get/set方法。
同时模型(实体类)中,需要有和表单元素OGNL表达式.后面的保持一致的setXXX方法
模型驱动:
动作类必须实现ModelDriven接口
动作类需要定义一个模型,并且必须实例化
提供接口中抽象方法的实现,并返回模型。
复杂类型的封装:
List:有序的,可以通过指定索引(下标)来给指定的对象属性赋值
Map:有键的,可以通过key给指定的对象属性赋值。
5、封装参数的细节
struts2框架能为我们转换的数据类型
基本类型自动转
日期类型按照本地格式yyyy-MM-dd来转换成日期对象
字符串数组按照逗号空格的方式拼接成字符串
表单中能为我们提供的有用数据类型只有3中
字符串 getParameter(String name)
字符串数组 getParameterValues(String name)
Map<String,String[]> map = getParameterMap(String name)
Enumeration<String> names = getParameterNames();
文件(流) getInputStream()
struts2中请求参数封装都是靠拦截器实现的
封装参数的拦截器:params
作用:到对应的位置找setXXX方法,依据就是表单元素的name属性取值。
当我们使用模型驱动时,它其实是要有一个另外的拦截器支持:
ModelDrivenInterceptor
- struts2_part02
- XP系统还不过时 教你完美征服3TB硬盘
- Linux学习笔记三
- zoj 3747 Attack on Titans 递推 计数dp
- WINDOWS是如何在注册表里记录盘符分配的
- JS使用正则+JSON对HTML模板进行数据填充
- struts2_part02
- http://bbs.csdn.net/topics/390759060
- jdbc 22
- log4j 产生的日志位置设置 和 catalina.home、catalina.base
- 完成端口与高性能服务器程序开发
- Scanner类 Scanner类输入数字,字母,字符串
- 注册表与盘符(转victor888文章 )
- 九九乘法表
- VBA 向文件写入简单数据(默认编码为ANSI或者Unicode)