取得Map 类型的 request,session,application, HttpServletRequest,HttpSession,ServletContext的引用。
分访问 Map 类型和原始类型两种。
1、获取 Map 类型的request,session,application( Map 类型)的第一种方式,他们保存在都ActionContext中:
1 package com.bjsxt.struts2.user.action; 2 3 import java.util.Map; 4 5 import com.bjsxt.struts2.user.model.User; 6 import com.opensymphony.xwork2.ActionContext; 7 import com.opensymphony.xwork2.ActionSupport; 8 9 public class LoginAction1 extends ActionSupport{ 10 11 private static final long serialVersionUID = -7767523825141043349L; 12 13 private Map request; 14 private Map session; 15 private Map application; 16 17 private User user; 18 19 public LoginAction1(){ 20 //在 对应方法中或者在构造方法中获取都一样 21 request = (Map)ActionContext.getContext().get("request"); 22 session = ActionContext.getContext().getSession(); 23 application = ActionContext.getContext().getApplication(); 24 } 25 26 public String execute(){ 27 request.put("r1", "r1"); 28 session.put("s1", "s1"); 29 application.put("a1", "a1"); 30 return SUCCESS; 31 } 32 33 public User getUser() { 34 return user; 35 } 36 37 public void setUser(User user) { 38 this.user = user; 39 } 40 41 }
jsp页面的访问:
1 <s:property value="#request.r1"/> 2 <s:property value="#session.s1"/> 3 <s:property value="#application.a1"/>
2、获取 Map 类型的request,session,application的第一种方式,一般用这种就行了:
实现了RequestAware,SessionAware,ApplicationAware 这三个接口,这种方式是通过Struts2把这三个对象注入给Action的。
1 package com.bjsxt.struts2.user.action; 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.bjsxt.struts2.user.model.User; 10 import com.opensymphony.xwork2.ActionSupport; 11 12 /** 13 * 只用这种 14 * @author Administrator 15 * 16 */ 17 public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{ 18 19 private static final long serialVersionUID = -7767523825141043349L; 20 21 private Map<String, Object> request; 22 private Map<String, Object> session; 23 private Map<String, Object> application; 24 25 private User user; 26 27 public String execute(){ 28 request.put("r1", "r1"); 29 session.put("s1", "s1"); 30 application.put("a1", "a1"); 31 return SUCCESS; 32 } 33 34 public User getUser() { 35 return user; 36 } 37 38 public void setUser(User user) { 39 this.user = user; 40 } 41 42 public Map<String, Object> getRequest() { 43 return request; 44 } 45 46 public void setRequest(Map<String, Object> request) { 47 this.request = request; 48 } 49 50 public Map<String, Object> getSession() { 51 return session; 52 } 53 54 public void setSession(Map<String, Object> session) { 55 this.session = session; 56 } 57 58 public Map<String, Object> getApplication() { 59 return application; 60 } 61 62 public void setApplication(Map<String, Object> application) { 63 this.application = application; 64 } 65 66 }
获取的方式跟第一种是一样的。
3、获取 HttpServletRequest,HttpSession,ServletContext (原始类型)的第一种方式:
1 package com.bjsxt.struts2.user.action; 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 public class LoginAction3 extends ActionSupport{ 12 13 private static final long serialVersionUID = -7767523825141043349L; 14 15 private HttpServletRequest request; 16 private HttpSession session; 17 private ServletContext application; 18 19 public LoginAction3(){ 20 request = ServletActionContext.getRequest(); 21 session = request.getSession(); 22 application = session.getServletContext(); 23 } 24 25 public String execute(){ 26 27 return SUCCESS; 28 } 29 }
取值,要是request、session、application中存在这个属性的话:
1 <%=request.getAttribute("r1") %> 2 <%=session.getAttribute("s1") %> 3 <%=application.getAttribute("a1") %>
4、获取 HttpServletRequest,HttpSession,ServletContext (原始类型)的第二种方式:
1 package com.bjsxt.struts2.user.action; 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 import org.apache.struts2.interceptor.ServletRequestAware; 9 10 import com.opensymphony.xwork2.ActionSupport; 11 12 public class LoginAction4 extends ActionSupport implements ServletRequestAware{ 13 14 private static final long serialVersionUID = -7767523825141043349L; 15 16 private HttpServletRequest request; 17 private HttpSession session; 18 private ServletContext application; 19 20 public String execute(){ 21 return SUCCESS; 22 } 23 24 @Override 25 public void setServletRequest(HttpServletRequest request) { 26 this.request = request; 27 this.session = request.getSession(); 28 this.application = session.getServletContext(); 29 } 30 31 }
取值方式和第三种一样。
补充:
1 <s:property value="#attr.r1"/> 2 <s:property value="#attr.s1"/> 3 <s:property value="#attr.a1"/>
这种获取方式会去ActionContext中遍历查找,所有的r1、s1、a1的值,一般情况下我们都会知道变量的值精确存放点,不推荐使用这个取值方式。
链接: http://pan.baidu.com/s/1pLk9ZCJ 密码: idbm