国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

如何使用ExternalContext類

2024-07-21 02:32:35
字體:
來源:轉載
供稿:網友
    使用ExternalContext類提供的方法可以獲取ServletContext、 ServletRequest和ServletResponse對象,構造FacesContext實例時需要這些對象。 除此之外, ExternalContext實例提供了包裝器方法,可以使用這些方法獲得原來需要從ServletContext、ServletRequest及 ServletResponse對象上調用一些方法獲得的信息。
  3.3.1  獲取ServletContext、ServletRequest和ServletResponse對象
可使用下列方法獲取servlet信息:
●       getContext 此方法可獲取Web應用中與當前請求相關聯的ServletContext對象。其簽名如下:
public abstract Object getContext()
●      getRequest 此方法可獲取代表當前正在處理的請求的ServletRequest對象。其簽名如下:
public abstract Object getRequest()
●       getResponse 此方法可獲取代表當前正在呈現的響應的ServletResponse對象。其簽名如下:
public abstract Object getResponse()
這些方法都是返回一個java.lang.Object對象,不是servlet特有的類型,這樣就可以使JSF實現獨立于其運行的環境。比如,JSF既可用于Web容器,也可以用于其他容器,如portlet等。
  3.3.2  獲取ServletContext特性
getapplicationMap方法返回一個包含ServletContext對象里全部特性名/值對的Map對象。下面是此方法的簽名:
public abstract java.util.Map getApplication()
作為一個例子,下面的代碼可獲取一個名叫databaseUtility的特性:
Object contextAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map contextMap = externalContext.getApplicationMap();
if (contextMap!=null)
contextAttribute = contextMap.get("databaseUtility");
  3.3.3  獲取session對象及其特性
通過ExternalContext對象可訪問與當前請求相關聯的Session對象。getSession方法可取回當前用戶的 javax.servlet.http.HttpSession對象,假如當前用戶沒有相應的Session對象,此方法的行為由傳入的參數決定:假如為 該方法傳入了一個true值,它會創建一個Session對象;否則,它會返回null。下面是getSession方法的簽名:
public abstract Object getSession(boolean create)
此方法其實是javax.servlet.http.HttpServletRequest接口中getSession方法的包裝器。
getSessionMap方法返回一個包含與當前請求相關聯的Session對象里所有特性名/值對的Map對象。下面是它的方法簽名:
public abstract java.util.getSessionMap()
要獲取Session對象里的特性,可調用Map類的get方法,傳入要獲取的特性名即可。文檔中沒有指明在當前請求沒有相應Session對 象的情況下,此方法是返回null還是一個空的Map對象。所以在調用Map的get方法之前,需要先檢查Map是否為null。下面的代碼是獲取 Session特性的例子:
Object sessionAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map sessionMap = externalContext.getSessionMap();
if (sessionMap!=null)
sessionAttribute = sessionMap.get(key);
最后一行的key是一個包含特性名的字符串。
  3.3.4  獲取ServletContext對象的初始參數
getInitParameter方法是ServletContext對象的getInitParameter方法的包裝器,用這個方法可以提取在部署描述符(web.xml文件)里用context-init元素指定的初始參數值。此方法的簽名如下:
public abstract String getInitParameter(String parameterName)
舉例來說,假如在部署描述符聲明了如下context-init元素:
<context-param>
<param-name>contactPerson</param-name>
<param-value>Scott Jobim</param-value>
</context-param>
下面代碼中的字符串變量initParam的值會是Scott Jobim。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
String initParam = externalContext.getInitParameter("contactPerson");
getInitParameterMap方法返回一個包含ServletContext對象中全部初始參數的Map對象。其簽名如下:
public abstract java.util.Map getInitParameterMap()
為了獲取一個初始參數的值,使用Map對象的get方法,同時傳遞初始參數的名稱。比如,下面的代碼把初始參數databaseName的值輸出到控制臺。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map paramMap = externalContext.getInitParameterMap();
if (paramMap!=null) {
System.out.PRintln(paramMap.get("databaseName"));
}

  3.3.5  獲取Request對象的特性
getRequestMap方法返回一個包含當前Request對象中全部特性名/值對的Map對象。其方法簽名如下:
public abstract java.util.Map getRequestMap()
作為一個例子,下面的代碼可用來提取Request對象里的特性:
Object requestAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestMap = externalContext.getRequestMap();
if (requestMap!=null)
requestAttribute = requestMap.get(key);
最后一行里的Key是一個包含要提取的屬性名的字符串。
  3.3.6  訪問Request對象里的參數名和值
getRequestParameterMap、getRequestParameterNames和getRequestParameterValuesMap方法可用來訪問Request對象里的參數名和值。
getRequestParameterMap返回一個包含Request對象里全部參數名/值對的Map對象。其簽名如下:
public abstract java.util.Map getRequestParameterMap()
作為一個例子,下面的代碼可用來提取名為id的請求參數的值:
String id = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestParameterMap = externalContext.getRequestParameterMap();
if (requestParameterMap!=null)
id = (String) requestParameterMap.get("id");
getRequestParameterNames方法返回一個包含全部請求參數名的Iterator。此方法其實是 ServletRequest.getParameterNames方法的包裝器。不同的是,ExternalContext類的 getRequestParameterNames返回一個Iterator,而不是java.util.Enumeration。此方法的簽名如下:
public abstract java.util.Iterator getRequestParameterNames()
作為一個例子,下面的代碼把所有的請求參數名/值對輸出到控制臺。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestParameterMap = externalContext.getRequestParameterMap();
Iterator parameterNames = externalContext.getRequestParameterNames();
while (parameterNames.hasNext()) {
String parameterName = (String) parameterNames.next();
String parameterValue =
(String) requestParameterMap.get(parameterName);
System.out.println(parameterName + " : " + parameterValue);
}
getRequestParameterValuesMap方法返回一個包含Request對象里全部參數名/值對的Map對象。此方法與 getRequestParameterMap方法很相似,但getRequestParameterValuesMap可返回全部相同參數名的值。在此 方法返回的Map對象上調用get(key)方法,這一點等同于獲取當前請求的ServletRequest并在其上調用 getParameterValues(key)。也就是說,Map對象返回的是一個字符串數組。 GetRequestParameterValuesMap方法的簽名如下:
public abstract java.util.Map getRequestParameterValuesMap()
下面例子中的代碼把請求參數id的全部值輸出到控制臺。
String[] id = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestParameterValuesMap = externalContext.getRequestParameterValuesMap();
if (requestParameterValuesMap!=null) {
id = (String[]) requestParameterValuesMap.get("id");
// print all values of id
for (int i=0; i<id.length; i++) {
System.out.println(id[i]);
}
}

  3.3.7  獲取請求頭的名和值
getRequestHeaderMap方法返回一個包含當前請求中全部頭名/值對的Map對象。其方法簽名如下:
public abstract java.util.Map getRequestHeaderMap()
舉個例子來說,下面的代碼提取host頭的值:
String host = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map headerMap = externalContext.getRequestHeaderMap();
if (headerMap!=null) {
host = (String) headerMap.get("host");
System.out.println(host);
}
注重:
報頭的名稱是不區分大小寫的。比如,對getRequestHeaderMap返回的Map對象分別用host、Host和Host作為參數來調用get方法,其結果是一樣的。
getRequestHeaderValuesMap方法與getRequestHeaderMap方法相似。但在getRequestHeader
ValuesMap方法返回的Map對象上調用get方法會得到一個字符串的數組。getRequestHeaderValuesMap方法的簽名如下:
public abstract java.util.Map getRequestHeaderValuesMap()
在getRequestHeaderValuesMap方法返回的Map對象上調用get方法會返回一個java.util.Enumeration值。
下面的代碼使用getRequestHeaderValuesMap方法來獲取一個包含全部頭名/值對的Map對象,然后在此Map對象上調用get方法以獲取全部Accept-Encoding頭的值,并將結果輸出到控制臺。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map headerValuesMap = externalContext.getRequestHeaderValuesMap();
if (headerValuesMap!=null) {
Enumeration headers =
(Enumeration) headerValuesMap.get("Accept-Encoding");
while (headers.hasMoreElements()) {
String value = (String) headers.nextElement();
System.out.println(value);
}
}
  3.3.8  獲取Cookie
getRequestCookies方法是HttpServletRequest.getCookies方法的包裝器,它返回一個javax.servlet.http.Cookie對象的數組,數組中是當前Request對象里的全部Cookie。此方法的簽名如下:
public abstract Cookie[] getRequestCookies()
例如,下面的代碼取得當前請求中的全部Cookie對象,然后在結果數組上循環,輸出全部Cookie的名和值。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Cookie[] cookies = externalContext.getRequestCookies();
for (int i=0; i<cookies.length; i++) {
Cookie cookie = cookies[i];
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
System.out.println(cookieName + " : " + cookieValue);
}
getRequestCookieMap方法返回一個包含當前請求中全部Cookie的、以Cookie的名稱作為鍵的Map對象。在此Map 對象上調用get方法會返回一個javax.servlet.http.Cookie對象。GetRequestCookieMap方法的簽名如下:
public abstract java.util.Map getRequestCookieMap()
例如,下面的代碼取得名為passWord的Cookie對象并將其值輸出到控制臺。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map cookieMap = externalContext.getRequestCookieMap();
if (cookieMap!=null) {
Cookie cookie = (Cookie) cookieMap.get("password");
if (cookie!=null)
System.out.println("Value:" + cookie.getValue());
}
注重:
Cookie名稱區分大小寫。

  3.3.9  獲取場所
getRequestLocale方法是ServletRequest.getLocale方法的包裝器,它返回Request對象中的Locale對象。此方法的簽名如下:
public abstract java.util.Locale getRequestLocale()
例如,下面的代碼取回用戶的場所并輸出該場所的顯示語言和顯示國家。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Locale locale = externalContext.getRequestLocale();
System.out.println("Language:" + locale.getDisplayLanguage());
System.out.println("Country:" + locale.getDisplayCountry());
  3.3.10  獲取上下文路徑
getRequestContextPath是HttpServletRequest.getContextPath方法的包裝器,它返回請求URI中指明請求上下文的上下文路徑部分。其方法簽名如下:
public abstract String getRequestContextPath()
下面的代碼段把請求URI的上下文路徑輸出到控制臺:
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
System.out.println("Context path:" +
externalContext.getRequestContextPath());
對于URL http://localhost:8080/JSFCh03/faces/test.jsp來說,getRequestContextPath方法的返回值為/JSFCh03。
getRequestPathInfo方法是HttpServletRequest.getPathInfo方法的包裝器,它返回當客戶端進行 請求時與客戶端發送的URL相關聯的額外路徑信息。這部分信息跟在servlet路徑信息的后面,但在查詢字符串之前。 getRequestPathInfo方法的簽名如下:
public abstract String getRequestPathInfo()
例如,下面代碼輸出請求URL的路徑信息。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
System.out.println("Path info:" +
externalContext.getRequestPathInfo());
對于URL http://localhost:8080/JSFCh03/faces/test.jsp而言,getRequestPathInfo方法的返回值為test.jsp。
  3.3.11  獲取資源路徑
getResourcePaths方法是ServletContext類的getResourcePaths方法的包裝器,它返回一個Set對 象,其中包含Web應用中最長子路徑與傳入的路徑參數相匹配的資源路徑。表示子目錄的路徑以“/”結束。返回的路徑是相對于Web應用根路徑的相對路徑, 并以“/”開始。此方法的簽名如下:
public abstract java.util.Set getResourcePaths(String path)
比如,考慮如下代碼:
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Set resourcePaths = externalContext.getResourcePaths("/");
Iterator iterator = resourcePaths.iterator();
while (iterator.hasNext()) {
String path = (String) iterator.next();
System.out.println(path);
}
System.out.println("----------------------------");
resourcePaths = externalContext.getResourcePaths("/WEB-INF");
iterator = resourcePaths.iterator();
while (iterator.hasNext()) {
String path = (String) iterator.next();
System.out.println(path);
}
這段代碼兩次調用了getResourcePaths方法,第一次傳入“/”,第二次傳入“/WEB-INF”。假如在一個目錄結構如圖3-2所示的Web應用里運行以上代碼,則返回的第一個Set里包含如下路徑:
/order.jsp
/index.jsp
/Styles.CSS
/images/
/details.jsp
/WEB-INF/
/checkOut.jsp
/browse.jsp
/shoppingCart.jsp
/search.jsp
/menu.jsp
第二個Set里包含如下路徑:
/WEB-INF/faces-config.xml
/WEB-INF/web.xml
/WEB-INF/classes/
/WEB-INF/lib/
圖3-2  測試getResourcesPath的目錄結構
getResourceAsStream方法是ServletContext.getResourceAsStream的包裝器,它返回指定路徑中作為java.io.InputStream對象的資源。其方法簽名如下:
public abstract java.io.InputStream getResourceAsStream(String path)

  3.3.12  編碼URL
encodeURL方法是HttpServletResponse.encodeURL方法的包裝器,它編碼給定的URL,其方法是加入會話的ID信息;或者,假如不需要這個步驟,則直接將給定的URL原封不動地返回。其方法簽名如下:
public abstract String encodeURL(String url)
在portlet中使用JSF時,encodeActionURL和encodeResourceURL方法很有用。encodeActionURL迫使URL作為參數傳遞,造成動作在入口/portlet中起作用。這個方法的簽名如下:
public abstract String encodeResourceURL(String sb)
encodeResourceURL方法迫使URL作為參數傳遞,引用資源以在入口/portlet中起作用。該方法造成URL需要根據包括的特定入口進行重定向。實際上,它簡單地返回一個絕對URL。下面是encodeResourceURL方法的簽名:
public abstract String encodeResourceURL(String sb)
  3.3.13  分派請求
dispatchMessage方法可根據當前上下文分派請求。對servlet而言,它通過調用forward實現這一點;而對portlet而言,則是通過調用include方法實現這一點。此方法的簽名如下:
public abstract void dispatchMessage(String requestURL)
throws java.io.IOException, FacesException

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大石桥市| 郯城县| 彰武县| 汉源县| 桑日县| 乡城县| 泾川县| 吉林市| 淮阳县| 抚宁县| 双鸭山市| 进贤县| 东台市| 漯河市| 湟中县| 兴仁县| 富锦市| 乌恰县| 梅河口市| 蓝田县| 阿克| 石首市| 新源县| 上栗县| 台前县| 遂宁市| 秦皇岛市| 海口市| 广西| 蓬安县| 庆元县| 共和县| 湘乡市| 奉新县| 福清市| 英山县| 永靖县| 枣强县| 沙湾县| 吴桥县| 巩义市|