FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = ( HttpServletRequest ) context.getExternalContext().getRequest();
String rootPath = request.getRealPath( "/" );//不建议使用
ServletContext servletContext = (ServletContext)facesContext.getExternalContext().getContext();
String rootPath = servletContext.getRealPath("/");
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
声明:本文来自CSDN博客:http://blog.csdn.net/Arthur0088/archive/2010/05/19/5606302.aspx
分享到:
相关推荐
在实际应用中,大文件上传是一个常见的需求,例如用户可能需要上传视频、大型文档或者数据库备份等。然而,由于HTTP协议本身的限制,传统的文件上传方式可能会遇到问题,如超时或内存溢出。 为了实现JSF的大文件...
Servlet上下文是整个Web应用程序的共享环境,它可以用来访问应用级的初始化参数,以及获取服务器上部署的应用的根目录,这对于获取文件的绝对路径至关重要。 3. **设置响应头**: 在`downloadFile...
在这个系统中,我们可能需要定义一个方法来获取当前页的数据,并在页面上显示相应的分页控制。 4. **批量删除** 批量删除通常涉及到多选和确认操作。JSF提供了`h:selectMany`系列组件来实现多选,用户可以选择多个...
下面将详细解释这三个概念的区别以及它们在JSF中的应用。 首先,`action` 是一个方法,它通常与按钮或链接等组件关联,用于处理业务逻辑。当用户点击这些组件时,JSF会提交表单,并调用对应的 `action` 方法。这个...
4. **FacesContext**:是JSF应用的核心上下文对象,提供了与当前请求相关的所有信息。 5. **监听器和事件(Listeners and Events)**:JSF允许注册监听器来响应组件或应用程序级别的事件,增强了组件之间的交互性。 ...
首先,JSF中的View ID是相对Web应用的环境路径开始计算的。当你设定View ID时,通常以`/`开头,例如`/pages/index.faces`。当用户请求这个页面时,JSF会将其转化为`/pages/index.jsp`作为视图ID。在`faces-config....
**JSF(JavaServer Faces)** 是Java平台上用于构建用户界面的一种Web开发框架,它简化了Web应用程序的开发过程,特别是在处理与用户交互的表单和事件时。本篇文章将深入探讨JSF的核心概念、主要组件以及如何使用...
在JSF(JavaServer Faces)应用中,动态显示图片是一种常见的需求,特别是在涉及到用户交互和安全性的场景下。以下将详细解释如何实现这个功能,以及其中涉及的安全考虑。 首先,我们来看Servlet部分。`...
6. **FacesContext**:它是JSF框架与应用程序之间的桥梁,提供对当前请求、响应、组件树和其他关键信息的访问。 7. **导航系统**:JSF支持基于规则的导航,允许根据用户操作和业务逻辑控制页面跳转。 8. **EL...
【JSF_Hero_vs_Monsters】项目是一个基于JavaServer Faces (JSF)技术的示例应用,展示了如何使用JSF构建一个英雄对抗怪物的游戏场景。在这个项目中,开发者可以学习到JSF的核心概念,包括组件库、数据绑定、事件处理...
- **部署到服务器**:将JSF应用部署到应用服务器。 - **测试应用**:通过浏览器测试JSF应用。 #### 第十一章:开发XFire WebService应用 **11.1 XFire框架简介** XFire是一个轻量级的Web服务框架,提供了简单的...
- `sHostName`:获取当前计算机的主机名。 - `ssPwd`:将明文密码转换为安全字符串,以增强安全性。 - `System.Diagnostics.Process.Start`:启动指定的程序,并传递用户名、密码和主机名作为参数。 ##### 步骤...
从给定的文件信息中,我们可以提炼出一系列有关AJAX实战的重要知识点,这些知识点主要围绕着如何使用Ajaxanywhere框架与JSF(JavaServer Faces)进行整合,以优化Web应用的性能,特别是解决页面刷新速度慢的问题。...
此外,`#`还可以用于访问页面上下文中的对象,如`${pageContext.request.contextPath}`可以得到当前Web应用的上下文路径。 EL表达式还有条件运算能力,例如三元运算符 `${condition ? valueIfTrue : valueIfFalse}`...
Apache Tomcat是一款开源的Java应用服务器,主要用于运行Servlet和JSP应用。在您提供的压缩包"apache-tomcat-6.0.20-deployer.zip"中,包含的是Tomcat 6.0.20版本的部署工具,这个版本发布于2009年,虽然现在已经...
(2)第1个实例需要将从支付宝获取的接口API打包成jar文件,打包后的目录如图所1.1示,然后将该jar文件与jsf-api.jar、jsf-impl、jstl-1.2.jar以及SQL Server 2000数据库驱动包(mssqlserver.jar、msutil.jar、...
- `<fmt:message>`:获取并输出资源包中的消息。 - `<fmt:setBundle>`:设置当前的资源包。 - `<fmt:formatDate>`和`<fmt:formatNumber>`:格式化日期和数字。 6. **使用JSTL的优点**: - 代码分离:将业务逻辑...
`facesContext.getExternalContext().getRequestContextPath()`获取当前请求的应用上下文路径,这在构建重定向URL时很有用。 2. **logout操作**: `"?logout&redirectTo=" + compositeData.urlAfterLogout` 这部分...