Struts2_访问Web元素

取得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

posted @ 2017-04-06 16:01  流年如水烟雨随风  阅读(193)  评论(0编辑  收藏  举报