本文共 8011 字,大约阅读时间需要 26 分钟。
1:在Action中如何获得作用域(request,session,application)对象;
取得Map(键值对映射集)类型的requet,session,application;
对数据操作的所有方法:(即把数据保存到域中)
主要使用的是方式2和方式3;
方式1:直接获取ServletApi,核心类是ServletActionContext提供的静态的方法;
1 package com.bie.lesson04; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpSession; 6 7 import org.apache.struts2.ServletActionContext; 8 9 import com.opensymphony.xwork2.ActionSupport;10 11 /** 12 * @author Author:别先生 13 * @date Date:2017年9月11日 下午10:06:41 14 *15 *16 */17 public class StrutsData extends ActionSupport{18 19 /**20 * 21 */22 private static final long serialVersionUID = 1L;23 24 @Override25 public String execute() throws Exception {26 27 //数据保存到域中28 //方式一,直接拿到servletApi执行操作29 HttpServletRequest request = ServletActionContext.getRequest();30 HttpSession session = request.getSession();31 ServletContext application = ServletActionContext.getServletContext();32 //操作33 request.setAttribute("request_data", "request_data");34 session.setAttribute("session_data", "session_data");35 application.setAttribute("application_data", "application_data");36 37 38 return SUCCESS;39 }40 }
方式2:通过ActionContext获取不同(代表request/session/application)的map;
1 public class ScopeAction01 { 2 3 private Maprequest; 4 private Map session; 5 private Map application; 6 7 8 public ScopeAction01(){ 9 request = (Map ) ActionContext.getContext().get("request");10 session = ActionContext.getContext().getSession();11 application = ActionContext.getContext().getApplication();12 13 }14 15 16 public String execute(){17 //向作用域中存储数据18 request.put("requestKey", "requestValue");19 session.put("sessionKey", "sessionValue");20 application.put("applicationKey", "applicationValue");21 22 return "success";23 }24 25 }
方式3:实现接口的方法:(RequestAware/SessionAware/ApplicationAware);
1 package com.bie.action01; 2 3 import java.util.Map; 4 5 import org.apache.struts2.interceptor.ApplicationAware; 6 import org.apache.struts2.interceptor.RequestAware; 7 import org.apache.struts2.interceptor.SessionAware; 8 9 /** 10 * @author 作者:别先生11 * @version 创建时间:2017年5月7日 上午8:37:05 12 * 类说明 13 * 作用域的使用方法214 */15 16 public class ScopeAction2 implements RequestAware,SessionAware,ApplicationAware{17 18 private Maprequest;19 private Map session;20 private Map application;21 22 23 public void setApplication(Map application) {24 this.application = application;25 }26 27 public void setSession(Map session) {28 this.session = session;29 }30 31 public void setRequest(Map request) {32 this.request = request;33 }34 35 public String execute(){36 //map使用put设置值37 request.put("requestKey", "requestValue");38 session.put("sessionKey", "sessionbValue");39 application.put("applicationKey", "applicationValue");40 41 return "success";42 }43 44 45 }
方式1和方式2简介:
第一步: 引包,省去
第二步:配置Struts2的过滤器
1 23 struts2_20170221 45 12 13 14index.html 6index.htm 7index.jsp 8default.html 9default.htm 10default.jsp 1115 16 20 21struts2 17 18org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 1922 23 27 28struts2 24 25/* 26
第三步:开发Action,方式一和方式二的对比
1 package com.bie; 2 3 import java.util.Map; 4 5 import javax.servlet.ServletContext; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpSession; 8 9 import org.apache.struts2.ServletActionContext;10 11 import com.opensymphony.xwork2.ActionContext;12 import com.opensymphony.xwork2.ActionSupport;13 14 /** 15 * @author BieHongLi 16 * @version 创建时间:2017年2月21日 下午4:46:14 17 * 18 */19 public class FinalAction extends ActionSupport{20 21 private static final long serialVersionUID = 1L;22 23 @Override24 public String execute() throws Exception {25 //1:请求数据封装 2:调用service处理业务逻辑,拿到结果数据26 //3:数据保存到域中27 28 //【struts2和servlet耦合的方法,29 // 比如获取目录application.getRealPath("");等等】30 //Struts中对数据操作,方式1:直接拿到ServletApi,执行操作31 /*HttpServletRequest request=ServletActionContext.getRequest();32 HttpSession session=request.getSession();33 ServletContext application=ServletActionContext.getServletContext();34 35 request.setAttribute("request_data", "request请求的数据");36 session.setAttribute("session_data", "session请求的数据");37 application.setAttribute("application_data", "application请求的数据");*/38 39 40 41 //[推荐:解耦的方式实现对数据的操作,没有和servlet有耦合,42 // 向域对象中存储值推荐]43 //Struts中对数据操作,方式2:直接拿到ActionContext,执行操作44 //getContext()发发一个静态方法,可以直接调用,返回值就是ActionContext45 ActionContext ac=ActionContext.getContext();46 //得到Strust对HttpServletRequest对象进行了封装,封装为了一个Map47 //拿到表示request对象 的map48 Maprequest=ac.getContextMap();49 //拿到session对象的map50 Map session=ac.getSession();51 //拿到application对象的map52 Map application=ac.getApplication();53 54 //数据55 request.put("request_data", "request_data_actionContext");56 session.put("session_data", "session_date_actionContext");57 application.put("application_data", "application_date_actionContext");58 return SUCCESS;59 }60 61 }
第四步:Struts2的配置文件。
1 2 5 67 8 9 10 18 1911 13 14success.jsp 1215 17success.jsp 16
方式三:只有开发Action的过程不一样,其他一样,这里只写了开发Action的代码
1 package com.bie; 2 3 import java.util.Map; 4 5 import org.apache.struts2.interceptor.ApplicationAware; 6 import org.apache.struts2.interceptor.RequestAware; 7 import org.apache.struts2.interceptor.SessionAware; 8 9 import com.opensymphony.xwork2.ActionSupport;10 11 /** 12 * @author BieHongLi 13 * @version 创建时间:2017年2月21日 下午7:40:02 14 * 15 */16 public class ImplAction extends ActionSupport 17 implements RequestAware,SessionAware,ApplicationAware{18 19 private static final long serialVersionUID = 1L;20 private Maprequest;21 private Map session;22 private Map application;23 24 //struts2运行的时候,会把代表request的map对象注入25 @Override26 public void setRequest(Map request) {27 this.request=request;28 }29 30 //struts2运行的时候,会把代表session的map注入31 @Override32 public void setApplication(Map session) {33 this.session=session;34 }35 36 //struts2运行的时候,会把代表application的map注入37 @Override38 public void setSession(Map application) {39 this.application=application;40 }41 42 @Override43 public String execute() throws Exception {44 request.put("request_data", "request_dataAware");45 session.put("session_data", "session_dataAware");46 application.put("application_data","application_dataAware");47 return SUCCESS;48 }49 }
转载地址:http://vkgma.baihongyu.com/