您的位置:首页 > 编程语言 > Java开发

struts2中的request,session等问题

2016-11-27 09:51 429 查看
学到struts的数据处理的时候,发现有几种获得request和session的方式,那么几种获取数据,以及显示有什么不同呢?

一般来说,在struts中的数据处理分为三个阶段

请求数据封装

调用Service处理业务逻辑,拿到结果数据

数据保存到域中

其实现方式也有三种

一、直接拿到servletAPI,执行操作

HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session = request.getSession();
ServletContext application=ServletActionContext.getServletContext();
// 操作
request.setAttribute("request_data", "request_data1");
session.setAttribute("session_data", "session_data1");
application.setAttribute("application_data", "application_data1");


在jsp上拿数据:

requset数据:<s:property value="#request.request_data"/>
session数据:<s:property value="#session.session_data"/>
application数据:<s:property value="#application.application_data"/>


在网页上的结果:

requset数据:request_data1 session数据: application数据:application_data1

注意:

该方法用法与servlet中用法相同

ServletActionContext继承自ActionContext,所以ServletActionContext也线程安全,线程安全要求每个线程都独立进行,所以req的创建也要求独立进行,所以ServletActionContext.getRequest()这句话不要放在构造函数中,也不要直接放在类中,而应该放在每个具体的方法体中(eg:login()、queryAll()、insert()等),这样才能保证每次产生对象时独立的建立了一个req。

用struts2如果处理get传参是中文,只能使用该方法进行处理乱码问题

二、解耦的方式实现对数据的操作

// Struts中对数据操作,方式2: 通过ActionContext类
ActionContext ac = ActionContext.getContext();
// 得到Struts对HttpServletRequest对象进行了封装,封装为一个map
// 拿到表示request对象的map
Map<String,Object> request = (Map<String, Object>) ac.get("request");
// 拿到表示session对象的map
Map<String, Object> session = ac.getSession();
// 拿到表示servletContext对象的map
Map<String, Object> application = ac.getApplication();
// 数据
request.put("request_data", "request_data1_actionContext");
session.put("session_data", "session_data1_actionContext");
application.put("application_data", "application_data1_actionContext");


在debug时的结构图:



在jsp上拿数据:

requset数据:<s:property value="#request.request_data"/>
session数据:<s:property value="#session.session_data"/>
application数据:<s:property value="#application.application_data"/>


在网页上的结果:

requset数据:request_data1_actionContext

session数据:session_data1_actionContext

application数据:application_data1_actionContext

三、AOP方式

实现接口:

public class DataAction extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{

private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;

// struts运行时候,会把代表request的map对象注入
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}

// 注入session
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}

// 注入application
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}

@Override
public String execute() throws Exception {

// 数据
request.put("request_data", "request_data1_actionAware");
session.put("session_data", "session_data1_actionAware");
application.put("application_data", "application_data1_actionAware");

return SUCCESS;
}
}


在jsp的取值和网页显示与上面相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts session struts2.0