struts2中的数据传输

前言:在servlet中我们通常通过域对象来对数据进行前后端的交互在前台通过el表达式获取后台传递过来的数据,

在struts2中对这些域对象进行了解耦,他们相对于原来的域对象少了某些功能,比如说通过request请求获取请求的地址等,也就是说他们的功能仅限于传递数据,这使得我们进行测试的时候无需依赖web容器(tomcat服务器)。换句话说我们可以直接在Action里面写一个main()方法进行测试,这是没问题的,这在servlet中和Struts1.X中是不可想象的,它必须要么启动Tomcat然后去测试,要么装插件再进行测试。

一、从前台接收数据的三种方式

1.封装属性,构造get/set方法(理论上封装set方法就可以获取到数据了),前台对应的name的值就是后台属性的名字。

2.封装实体类的方式,同样构造get/set方法,前台对应的name的值应=“类名.属性”。

3..通过实现ModelDriven接口,重写方法  不需要user对象的set和get方法,而且页面表单name的值不需要做修改同1。

二、传输数据到前台
1.actionContext中获取servletAPI
struts把servletAPI封装成了Map对象,这些对象只能实现数据的存储和传输功能
方式1.ActionContext.getContext() 获取ActionContext对象 ac
Map<String ,Object> request =ac.getContextMap();
Map<String ,Object> session =ac.getContextSession();
方式2.实现接口RequestAware,SessionAware重写set方法
private Map req;
@Override
public void setRequest(Map<String, Object> req) {
this.req=req;
}

2.获取原生HttpServletRequest(其他域对象同理)对象传输数据

//HttpservletRequest对象
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("name", request+user.getName());

3.实现相应的接口(如:ServletRequestAware)同样可获得域对象

@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;

}

注:通过接口获得对象均应在类中声明相应的属性

private Map req;
private HttpServletRequest request;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值