学习笔记struts2_day02
2017-11-06 23:08
239 查看
Struts2第二天
Action使用Servlet相关API
(Action是对Servlet的封装,实现了与Servlet相关的API的解耦,简化开发。但有时又需要使用我们首席的Servlet API。
1.通过ActionContext类调用Servlet API
ActionContext.getContext.get("request"):返回值是Map,需要强转,相当于一个解耦之后的HttpServletRequest
ActionContext.getSession.getSession():返回值是Map,相当于解耦之后的HttpSession
ActionContext. getApplication():返回值是Map,相当于解耦之后的ServletContext
ActionContext.getParameter():返回值是Map,存储的是所有的参数信息。键是参数名,值是具体参数值,类型是数据类型
2.通过试想***Aware接口调用ServletAPI
Action类实现RequestAware接口,框架会把HttpServletRequest对象解耦成Map,注入到Action类中
Action类实现SessionAware接口,框架会把HttpSession对象解耦成Map,注入到Action类中
Action类实现ApplicationAware接口,框架会把ServletContext对象解耦成Map,注入到Action类中
Action类试想ParameterAware接口,框架会把请求中所有的参数信息封装成M安排,注入到Action类中
3.通过ServletActionContext类调用Servlet API
ServletActionContext.getRequest():获取HttpServletRequest对象
ServletActionContext.getResponse():获取HttpServletResponse对象
ServletActionContex.getRequest().getSession:获取HttpSession对象
ServletActionContex.getServletContext():获取ServletContext对象
请求参数的接收(重点)
请求参数接收的方式有三种,分为两大类:属性驱动和模型驱动。
1.属性驱动方式接收
1.1简单属性驱动方式接收
编写登录页面(发送参数要有名字)
在Action类中定义属性提供属性对应的setter方法
注意
属性的名字要与参数名一样
属性对象的setter方法名字不能写错(属性名username==方法名setUsername)
原理
拦截器(params)拦截用户请求,调用Action类里属性的setter方法,把参数值设置到对应的属性里面去
优势:当参数比较少的时候,采用这种方式接收简单
弊端:当参数比较多的时候,Action类里定义很多个属性集stter方法,不便于向业务层传递参数,比较麻烦。
1.2对象属性驱动方式接收
编写页面,注意:参数名:user.username(对象名.属性名)
封装实体类User(属性名要和参数名对应,提供属性对应的set方法)
在Action类里提供对象属性user,提供属性对象的setter方法和getter方法,注意方法的名字
原理:
请求被拦截器拦截,对参数名(user.username)进行截取,寻找Action里对应的属性名,调用get**方法
获取到对象,如果对象为null,则调用实体类里的默认的构造方法实例,在调用对象属性的set**方法把对象设置
进去,再把参数值通过对象的set**方法吧参数值设置到对象里。当第二次设置参数是,调用get**方法获取对象
但此时对象不为null,调用对象的set方法把参数值设置到对象里。
优势:把参数封装到Action的对象属性里,Ation类没必要提供很多的简单属性及set方法,代码量少;向业务层传递参数可以直接传递对象,方便。
弊端:需要在页面中,参数名前面加上对象名,写起来有点麻烦。
2.模型驱动方式接收
编写页面login3.jsp注意:参数名前不需要加对象名
封装实体类,同对象属性驱动方式。
在Action类中提供对象属性并实例化,让Action类实现ModelDriven<实体类>接口,重写getModel方法,返回对象属性。
原理:
拦截器拦截请求(modelDriven,params),判断该Action是否实现了ModelDriven接口,如果实现了ModelDriven接口,调用getModel方法,获取对象,把参数封装到对象的属性里去(调用对象的set***方法)。
优势:
当参数比较多时,会自动封装到对象属性里,传递参数也简单;
页面上参数名字的书写简单,不需要写成“对象名.属性名”形式。
3.多种接收方式优先级的问题
结论:先采用模型驱动方式接收,再采用属性驱动方式接收
原因:与值栈相关,模型对象在栈顶,在当前Action的实例前,注入参数时,优先找到的是模型对象。
4.封装集合数据
4.1封装到List
4.2封装到Map
result结果集的配置
1.<result>标签
作用:配置结果集,指定跳转到那个页面
name属性:结果集的名字,与Action方法的返回值对应,一个Action节点可以对应多个结果集
2.全局结果集和局部结果集
Struts结果集按照作用范围不用,分为两种:局部结果集和全局结果集
局部结果集:只针对某个Action有效
全局结果集:针对某个包个所有的action都有效
3.结果集类型
在struts2-core.jar包中的sturts-default文件中,可以查看Struts2所有的结果集类型
常用的结果集类型有:
dispatcher:转发到一个页面,地址栏不会发生变化。result节点属性的默认值就是dispatcher。
redirect:重定向到一个页面,地址栏发生变化。
chain:转发到另一个action,地址栏不会发生变化,数据不会丢失。
redirectAction:重定向到另一个action,地址栏会发生变化,请求中的数据也会丢失
stream:以流的形式响应一个请求,文件下载是会用到。
在struts2.xml中,通过result节点的type属性来指定跳转类型
Action使用Servlet相关API
(Action是对Servlet的封装,实现了与Servlet相关的API的解耦,简化开发。但有时又需要使用我们首席的Servlet API。
1.通过ActionContext类调用Servlet API
ActionContext.getContext.get("request"):返回值是Map,需要强转,相当于一个解耦之后的HttpServletRequest
ActionContext.getSession.getSession():返回值是Map,相当于解耦之后的HttpSession
ActionContext. getApplication():返回值是Map,相当于解耦之后的ServletContext
ActionContext.getParameter():返回值是Map,存储的是所有的参数信息。键是参数名,值是具体参数值,类型是数据类型
2.通过试想***Aware接口调用ServletAPI
Action类实现RequestAware接口,框架会把HttpServletRequest对象解耦成Map,注入到Action类中
Action类实现SessionAware接口,框架会把HttpSession对象解耦成Map,注入到Action类中
Action类实现ApplicationAware接口,框架会把ServletContext对象解耦成Map,注入到Action类中
Action类试想ParameterAware接口,框架会把请求中所有的参数信息封装成M安排,注入到Action类中
3.通过ServletActionContext类调用Servlet API
ServletActionContext.getRequest():获取HttpServletRequest对象
ServletActionContext.getResponse():获取HttpServletResponse对象
ServletActionContex.getRequest().getSession:获取HttpSession对象
ServletActionContex.getServletContext():获取ServletContext对象
请求参数的接收(重点)
请求参数接收的方式有三种,分为两大类:属性驱动和模型驱动。
1.属性驱动方式接收
1.1简单属性驱动方式接收
编写登录页面(发送参数要有名字)
在Action类中定义属性提供属性对应的setter方法
注意
属性的名字要与参数名一样
属性对象的setter方法名字不能写错(属性名username==方法名setUsername)
原理
拦截器(params)拦截用户请求,调用Action类里属性的setter方法,把参数值设置到对应的属性里面去
优势:当参数比较少的时候,采用这种方式接收简单
弊端:当参数比较多的时候,Action类里定义很多个属性集stter方法,不便于向业务层传递参数,比较麻烦。
1.2对象属性驱动方式接收
编写页面,注意:参数名:user.username(对象名.属性名)
封装实体类User(属性名要和参数名对应,提供属性对应的set方法)
在Action类里提供对象属性user,提供属性对象的setter方法和getter方法,注意方法的名字
原理:
请求被拦截器拦截,对参数名(user.username)进行截取,寻找Action里对应的属性名,调用get**方法
获取到对象,如果对象为null,则调用实体类里的默认的构造方法实例,在调用对象属性的set**方法把对象设置
进去,再把参数值通过对象的set**方法吧参数值设置到对象里。当第二次设置参数是,调用get**方法获取对象
但此时对象不为null,调用对象的set方法把参数值设置到对象里。
优势:把参数封装到Action的对象属性里,Ation类没必要提供很多的简单属性及set方法,代码量少;向业务层传递参数可以直接传递对象,方便。
弊端:需要在页面中,参数名前面加上对象名,写起来有点麻烦。
2.模型驱动方式接收
编写页面login3.jsp注意:参数名前不需要加对象名
封装实体类,同对象属性驱动方式。
在Action类中提供对象属性并实例化,让Action类实现ModelDriven<实体类>接口,重写getModel方法,返回对象属性。
原理:
拦截器拦截请求(modelDriven,params),判断该Action是否实现了ModelDriven接口,如果实现了ModelDriven接口,调用getModel方法,获取对象,把参数封装到对象的属性里去(调用对象的set***方法)。
优势:
当参数比较多时,会自动封装到对象属性里,传递参数也简单;
页面上参数名字的书写简单,不需要写成“对象名.属性名”形式。
3.多种接收方式优先级的问题
结论:先采用模型驱动方式接收,再采用属性驱动方式接收
原因:与值栈相关,模型对象在栈顶,在当前Action的实例前,注入参数时,优先找到的是模型对象。
4.封装集合数据
4.1封装到List
4.2封装到Map
result结果集的配置
1.<result>标签
作用:配置结果集,指定跳转到那个页面
name属性:结果集的名字,与Action方法的返回值对应,一个Action节点可以对应多个结果集
2.全局结果集和局部结果集
Struts结果集按照作用范围不用,分为两种:局部结果集和全局结果集
局部结果集:只针对某个Action有效
全局结果集:针对某个包个所有的action都有效
3.结果集类型
在struts2-core.jar包中的sturts-default文件中,可以查看Struts2所有的结果集类型
常用的结果集类型有:
dispatcher:转发到一个页面,地址栏不会发生变化。result节点属性的默认值就是dispatcher。
redirect:重定向到一个页面,地址栏发生变化。
chain:转发到另一个action,地址栏不会发生变化,数据不会丢失。
redirectAction:重定向到另一个action,地址栏会发生变化,请求中的数据也会丢失
stream:以流的形式响应一个请求,文件下载是会用到。
在struts2.xml中,通过result节点的type属性来指定跳转类型
相关文章推荐
- Struts2_day02讲义_使用Struts2完成对客户的新增操作
- 《struts2权威指南》学习笔记之在Freemarker中使用struts2标签
- 马士兵Struts2学习笔记
- Struts2_day02
- struts2_day02_09-属性封装操作_10-模型驱动封装操作_11-使用属性封装和模型驱动封装注意问题
- Maven学习笔记 -- day02 Maven整合struts2及Maven核心概念、添加插件
- day27-struts2---day02( 类型转换,数据校验,国际化,拦截器)
- 学习笔记——回顾struts2文件上传
- 配置Action---struts2学习笔记
- 学习笔记之Struts2
- struts2_day02_12-表达式封装_13-比较表达式封装和模型驱动封装
- struts2笔记_day02
- struts2_day02_15-封装数据到list集合_16-封装数据到map集合
- 《struts2》学习笔记――i18n国际化
- struts2_day02_01-今天内容介绍_02-结果页面配置-全局结果页面
- Struts2 学习笔记
- struts2_day02_05-获取表单数据(使用ActionContext获取)
- struts2_day02_06-获取表单数据(使用ServletActionContext获取和接口注入)
- Struts2_day02
- struts2学习笔记 -- day02 struts2主配置文件详解