标签:name context apach 推荐 action turn att line string
Struts中的数据处理的三种方式:
public class DataAction extends ActionSupport{ @Override public String execute() throws Exception { // 1. 请求数据封装; 2. 调用Service处理业务逻辑,拿到结果数据 3. 数据保存到域中 /* * // Struts中对数据操作,方式1: 直接拿到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"); */ // 【推荐:解耦的方式实现对数据的操作】 // Struts中对数据操作,方式2: 通过ActionContext类 ActionContext ac = ActionContext.getContext(); // 得到Struts对HttpServletRequest对象进行了封装,封装为一个map // 拿到表示request对象的map Map<String,Object> request = ac.getContextMap(); // 拿到表示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"); return SUCCESS; } }
尽量的用方式二,如果有些功能,第二种方式实现不了,需要采用原始的方式来做,也可以使用第一种,比如获取路径,方式二就实现不了。
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="data" namespace="/" extends="struts-default"> <!-- 全局配置 --> <global-results> <result name="success">/data.jsp</result> </global-results> <action name="data" class="c_data.DataAction"> </action> </package> </struts>
data.jsp:
<body> ${request_data } <br/> ${session_data } <br/> ${application_data } <br/> </body>
数据处理的实现方式三:实现接口的方式
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; } }
对数据操作的所有方法(把数据保存到域中)
方式一:直接获取servletapi
核心类:ServletActionContext提供的静态方法
方式二:通过ActionContext获取不同(代表request/session/application)的map
方式三:实现接口的方法:(RequestAware/SessionAware/ApplicationAware)
方式一是与servlet耦合的方式,会导入servlet相关的jar包
方式二,三是与servlet解耦的方式,不会导入与servlet相关的jar包
不推荐使用第一种方式。
一般用第二种方式,
如果在程序中反复多次的用request,session,application对象,推荐使用第三种
比如开发一个BaseAction的时候(其他action继承此类),可以用第三种方式。
标签:name context apach 推荐 action turn att line string
原文地址:http://www.cnblogs.com/lxboy2009/p/6084039.html