3.3.8 获取CookiegetRequestCookies方法是HttpServletRequest.getCookies方法的包装器,它返回一个javax.servlet.http.Cookie对象的数组,数组中是当前Request对象里的全部Cookie。此方法的签名如下:
public abstract Cookie[] getRequestCookies()
例如,下面的代码取得当前请求中的全部Cookie对象,然后在结果数组上循环,输出全部Cookie的名和值。
getRequestCookieMap方法返回一个包含当前请求中全部Cookie的、以Cookie的名称作为键的Map对象。在此Map对象上调用get方法会返回一个javax.servlet.http.Cookie对象。GetRequestCookieMap方法的签名如下:public abstract java.util.Map getRequestCookieMap()例如,下面的代码取得名为password的Cookie对象并将其值输出到控制台。
注意:Cookie名称区分大小写。
3.3.9 获取场所getRequestLocale方法是ServletRequest.getLocale方法的包装器,它返回Request对象中的Locale对象。此方法的签名如下:
public abstract java.util.Locale getRequestLocale()
例如,下面的代码取回用户的场所并输出该场所的显示语言和显示国家。
3.3.10 获取上下文路径getRequestContextPath是HttpServletRequest.getContextPath方法的包装器,
它返回请求URI中指明请求上下文的上下文路径部分。其方法签名如下:
public abstract String getRequestContextPath()下面的代码段把请求URI的上下文路径输出到控制台:
public abstract String getRequestPathInfo()
例如,下面代码输出请求URL的路径信息。
对于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)
比如,考虑如下代码:
3.3.12 编码URLencodeURL方法是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
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 编码URLencodeURL方法是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
本文介绍JSF中用于获取HTTP请求信息的各种方法,包括获取Cookie、场所、上下文路径等,帮助开发者更好地理解如何处理客户端请求。
709

被折叠的 条评论
为什么被折叠?



