Action 類
1. action VS Action 類
1). action: 代表一個? Struts2 的請求.
2). Action 類: 能夠處理 Struts2 請求的類.
> 屬性的名字必須遵守與 JavaBeans 屬性名相同的命名規(guī)則.
屬性的類型可以是任意類型. 從字符串到非字符串(基本數(shù)據(jù)庫類型)之間的數(shù)據(jù)轉(zhuǎn)換可以自動發(fā)生
> 必須有一個不帶參的構(gòu)造器: 通過反射創(chuàng)建實例
> 至少有一個供 struts 在執(zhí)行這個 action 時調(diào)用的方法
> 同一個 Action 類可以包含多個 action 方法.
> Struts2 會為每一個 HTTP 請求創(chuàng)建一個新的 Action 實例, 即 Action 不是單例的, 是線程安全的.
關(guān)于 Struts2 請求的擴展名問題
1). org.apache.struts2 包下的 default.properties 中配置了 Struts2 應用個的一些常量
2). struts.action.extension 定義了當前 Struts2 應用可以接受的請求的擴展名.
3). 可以在 struts.xml 文件中以常量配置的方式修改 default.properties 所配置的常量.
?在 Action 中訪問 WEB 資源
1). 什么是 WEB 資源 ?
HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API。
?2). 為什么訪問 WEB 資源?
B\S 的應用的 Controller 中必然需要訪問 WEB 資源: 向域?qū)ο笾凶x寫屬性, 讀寫 Cookie, 獲取 realPath ....
3). 如何訪問 ?
I. 和 Servlet API 解耦的方式: 只能訪問有限的 Servlet API 對象, 且只能訪問其有限的方法(讀取請求參數(shù), 讀寫域?qū)ο蟮膶傩? 使 session 失效...).?
? ? ?> 使用 ActionContext> 實現(xiàn) XxxAware 接口
? ? ?> 選用的建議: 若一個 Action 類中有多個 action 方法, 且多個方法都需要使用域?qū)ο蟮?Map 或 parameters, 則建議使用Aware 接口的方式
? ? ?> session 對應的 Map 實際上是 SessionMap 類型的! 強轉(zhuǎn)后若調(diào)用其 invalidate() 方法, 可以使其 session 失效!
II. 和 Servlet API 耦合的方式: 可以訪問更多的 Servlet API 對象, 且可以調(diào)用其原生的方法.?
? ? ?> 使用 ServletActionContext
? ? > 實現(xiàn) ServletXxxAware 接口.
Struts2的Action對象中使用Map類型request,session,application
1、聲明private Maprequest;private Mapsession;private Mapapplication;
2、產(chǎn)生ActionContext實例ActionContext context=ActionContext.getContext();
3、獲取request,session和application
Map<String,Object>? request=(Map<String,Object>) context.get("request");
Map<String,Object> ??session=context.getSession();
Map<String,Object> ??application=context.getApplication();
4、存值
String info="星期一";
request.put("info",info);
session.put("info",info);
application.put("info",info);
5、JSP頁面取值
request范圍內(nèi)的info值:request.getAttribute("info");
session范圍內(nèi)的info值:session.getAttribute("info");
application范圍內(nèi)的info值:application.getAttribute("info");
**獲取請求參數(shù)
//. 獲取請求參數(shù)對應的 Map, 并獲取指定的參數(shù)值.
//鍵: 請求參數(shù)的名字, 值: 請求參數(shù)的值對應的字符串數(shù)組//注意: 1. getParameters 的返回值為在 Map, 而不是 Map
//? ? 2. parameters 這個 Map 只能讀, 不能寫入數(shù)據(jù), 如果寫入, 但不出錯, 但也不起作用!
Map<String,Object>? parameters = actionContext.getParameters();
System.out.println(((String[])parameters.get("name"))[0]);
parameters.put("age", 100);
**注銷session
if(sessionMap instanceof SessionMap){
? ? SessionMap sm = (SessionMap) sessionMap;
? ? sm.invalidate();
? ?System.out.println("session 失效了. ");
}