- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVAWEB开发之Struts2详解(二)
JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置
Action接受请求参数
作为MVC框架,必须要负责解析HTTP请求参数,并将其封装到Model对象中
Struts2提供了非常强大的类型转换机制用于请求数据 到 model对象的封装
Struts2和MVC定义关系
StrutsPrepareAndExecuteFilter:控制器
在Struts2中action是什么?(Struts2是一个MVC框架)
V:jsp
M:action
C:action StrutsPrepareAndExecuteFilter
Struts2提供了三种数据封装方式:
Action本身作为model对象,通过成员setter封装。(属于属性驱动)
创建独立model对象,页面通过ognl表达式封装。(属于属性驱动)
使用ModelDrivern接口,对请求数据进行封装。(属于模型驱动)
具体使用如下:
1.属性驱动
属性驱动方式(一):直接将action作为一个model,就可以得到请求参数
action类成员变量setter接收参数如下图所示:
问题1:action封装请求参数,会不会存在线程安全问题?
是不会的,因为每一次请求,都是一个新的action
优点:使用简单
缺点:需要单独定义JavaBean,将action中属性copy到JavaBean中(不能将Action作为model传给service层)
这种方式,底层是通过反射进行实现的。
属性驱动方式(二):创建一个单独的Model类,在action类中引用model作为成员变量。(页面使用ognl)
具体操作:
在action类中声明一个mdoel,private User user;
提供对应的setter和getter方法。
在页面上使用ognl来进行描述
input type=text name=user.username 如下图所示:
这种方式的优点:简单易使用,解决了第一种封装的问题。
缺点:在页面上使用了ognl表达式,页面不通用了。
问题:这种方式,数据是怎样封装的?
是通过Struts2中name为params的interceptor拦截器进行的数据封装(Struts的核心core包下struts-default.xml中定义)interceptor name=params class=erceptor.ParametersInterceptor/
2.模型驱动(在开发中应用比较多)
模型驱动的步骤:
1.让action 类实现ModelDrivern接口。
2.重写getModel方法
3.在action中实例化一个model对象,让getModel方法返回这个对象。
public class Login3Action extends ActionSupport implements ModelDrivenUser {
private User user = new User();
public User getModel() {
return user;
}
}
如下图所示:
页面:
username1:input type=text name=map[aaa].usernamebr
password1:input type=password name=map[aaa].passwordbr
username2:input type=text name=map[bbb].usernamebr
password2:input type=password name=map[bbb].passwordbr
action类:
private MapString, User map;
提供get/set
示例:
1.将action作为model(属性驱动方式一)
Login1Action
[java] view plain copy 在CODE上查看代码片派生到我的代码片
span style=font-size:18px;package cn.itcast.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
// 获取请求参数 属性驱动 第一种,直接将action作为model
public class Login1Action extends ActionS
文档评论(0)