struts2中的request,session等问题
2016-11-27 09:51
429 查看
学到struts的数据处理的时候,发现有几种获得request和session的方式,那么几种获取数据,以及显示有什么不同呢?
一般来说,在struts中的数据处理分为三个阶段
请求数据封装
调用Service处理业务逻辑,拿到结果数据
数据保存到域中
其实现方式也有三种
在jsp上拿数据:
在网页上的结果:
requset数据:request_data1 session数据: application数据:application_data1
注意:
该方法用法与servlet中用法相同
ServletActionContext继承自ActionContext,所以ServletActionContext也线程安全,线程安全要求每个线程都独立进行,所以req的创建也要求独立进行,所以ServletActionContext.getRequest()这句话不要放在构造函数中,也不要直接放在类中,而应该放在每个具体的方法体中(eg:login()、queryAll()、insert()等),这样才能保证每次产生对象时独立的建立了一个req。
用struts2如果处理get传参是中文,只能使用该方法进行处理乱码问题
在debug时的结构图:
在jsp上拿数据:
在网页上的结果:
requset数据:request_data1_actionContext
session数据:session_data1_actionContext
application数据:application_data1_actionContext
在jsp的取值和网页显示与上面相同。
一般来说,在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的取值和网页显示与上面相同。
相关文章推荐
- 关于Spring与Velocity结合的问题(获得request,session)
- 在ashx一般处理程序文件中不能使用session和request的问题解决办法
- struts2 action中获得session request response
- Struts2 访问request、session和application对象
- STRUTS2获得session和request
- Struts2学习(六):访问隐藏的request和session
- STRUTS2获得session和request
- 在ashx一般处理程序文件中不能使用session和request的问题解决办法
- Struts2的Action中取得request,response,session等对象的方法
- struts2获取request,session,application4种方式
- struts2获得session和request
- struts2的action中获得request response session 对象
- STRUTS2获得session和request
- struts2添加request/session/application属性
- struts2的action中获得request response session
- 告诉你如何获得(struts2)request response session 对象
- struts2的action中获得request response session 对象
- struts2的action中获得request response session
- struts2 session、request、response
- [Struts2] 如何访问或添加request/session/application属性, 以及获取对象.