Struts 2提供了多種方式來(lái)訪問(wèn)上述的三種對(duì)象,歸結(jié)起來(lái),可以劃分為兩大類:與Servlet API解耦的訪問(wèn)方式和與Servlet API耦合的訪問(wèn)方式。
與Servlet API解耦的訪問(wèn)方式(IoC方式)
為了避免與Servlet API耦合在一起,方便Action類做單元測(cè)試,Struts 2對(duì)HttpServletRequest、HttpSession和ServletContext進(jìn)行了封裝,構(gòu)造了三個(gè)Map對(duì)象來(lái)替代這三種對(duì)象, 在Action中,直接使用HttpServletRequest、HttpSession和ServletContext對(duì)應(yīng)的Map對(duì)象來(lái)保存和讀取 數(shù)據(jù)。
要獲取這三個(gè)Map對(duì)象,可以使用com.opensymphony.xwork2.ActionContext類,ActionContext 是action執(zhí)行的上下文,在ActionContext中保存了action執(zhí)行所需的一組對(duì)象,包括parameters、request、 session、application和locale等。ActionContext類定義了如下方法,用于獲取 HttpServletRequest、HttpSession和ServletContext對(duì)應(yīng)的Map對(duì)象。
Ø public Object get(Object key)
ActionContext類沒(méi)有提供類似getRequest()這樣的方法來(lái)獲取封裝了HttpServletRequest的Map對(duì)象。要得到請(qǐng)求Map對(duì)象,你需要為get()方法傳遞參數(shù)“request”。
Ø public Map getSession()
獲取封裝了HttpSession的Map對(duì)象。
Ø public Map getApplication()
獲取封裝了ServletContext的Map對(duì)象。
我們看 通過(guò)ActionContext來(lái)獲取request、session和application對(duì)象的LoginAction1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package action;
import java.util.Map;
import dbPackage.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class LoginAction1 implements Action
{ private User user;
public User getUser()
{ return user;
}
public void setUser(User user)
{ this.user = user;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception
{
if("zhangsan".equals(user.getUsername())&& "1234".equals(user.getPassword()))
{ ActionContext context = ActionContext.getContext();
Map request = (Map)context.get("request");
Map session = context.getSession();
Map application = context.getApplication();
//在請(qǐng)求中放置歡迎信息。
request.put("greeting", "歡迎您來(lái)到程序員之家");
//在session中保存user對(duì)象
session.put("user", user);
//統(tǒng)計(jì)用戶訪問(wèn)量,在application中保存用戶訪問(wèn)量數(shù)據(jù)
Integer count = (Integer)application.get("counter");
if(null == count) count=1;
else count++;
application.put("counter", count);
return SUCCESS;
}else {
return ERROR;
} }}
|
在成功頁(yè)面中,可以使用JSP內(nèi)置的表達(dá)式語(yǔ)言來(lái)訪問(wèn)request、session和application范圍的數(shù)據(jù),代碼如例3-12所示。
例3-12 success.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<%@ page contentType="text/html;charset=GBK" %>
<html>
<head><title>歡迎頁(yè)面</title></head>
<body>
<h3>${sessionScope.user.username},${requestScope.greeting}。<br>
本站的訪問(wèn)量是:${applicationScope.counter}</h3>
</body>
</html>
|
與Servlet API耦合的訪問(wèn)方式(非IoC方式)
要獲得上述對(duì)象,關(guān)鍵Struts 2.0中com.opensymphony.xwork2.ActionContext類。我們可以通過(guò)它的靜態(tài)方法getContext()獲取當(dāng)前 Action的上下文對(duì)象。 另外,org.apache.struts2.ServletActionContext作為輔助類(Helper Class),可以幫助您快捷地獲得這幾個(gè)對(duì)象。
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
如果你只是想訪問(wèn)session的屬性(Attribute),你也可以通過(guò)ActionContext.getContext().getSession()獲取或添加session范圍(Scoped)的對(duì)象。
本文轉(zhuǎn)載于:http://www.emool.cn/archives/y2009/318.html
名稱: ?4C.ESL | .↗Evon
口號(hào): 遇到新問(wèn)題?先要尋找一個(gè)方案乄而不是創(chuàng)造一個(gè)方案こ
mail: 聯(lián)系我