ServletContext与ServletConfig

ServletContext

javax.servlet

   Interface ServletContext

   public interface ServletContext

 

   ServletContext 定义了一些能够与 Servlet 控制器通信的方法。对于 web 容器来说, ServletContext 接口定义了一个 servlet 环境对象,这个对象定义了一个在 Servlet 引擎上的 Servlet 的视图。通过使用这个对象, Servlet 可以记录事件,得到资源并得到来自 Servlet 的引擎类。

 

   Servlet 容器在启动时会加载 web 应用,并为每个 web 应用创建唯一的 ServletContext 对象,可以把 ServletContext 看成是一个 Web 应用的服务器端组件的共享内存,在 ServletContext 中可以存放共享数据,它提供了读取和设置共享数据的方法 .

 

ServletContext 定义了 25 个方法,可以详细参考帮助文档来获得信息。

 

ServletContext 对象只在 web 应用被关闭的时候才被销毁,也就是说 ServletContext 对象生命周期是 Application 。不同的 web 应用, ServletContext 各自独立存在。

 

  一个 web 应用由 jsp,Servlet javabean web 组件的 **** 构成,每一个 web 应用,容器都会有一个 ServletContext 对象,而 javax.servlet.ServletContext 接口就提供了访问这个 ServletContext 对象的途径。你可以通过一个 Servlet 实例的 getServletContext() 方法得到该 Servlet 运行其中的这个 ServletContext 对象, 从这个对象中你可以访问如下信息资源:

   1. 初始化参数

   2. 存储在背景中的对象

   3. 与背景关联的资源

   4. 日志

一般来说,对整个应用的配置,为了不使用“硬编码”,应该配置为 ServletContext 参数,比如字

符集设定。

<web-app>

.................

<context-param>

       <param-name>myBlog</param-name>

       <param-value>www.csdn.net</param-value>

</context-param>

.................

</web-app>

 

ServletContext ctx = getServletContext();

String s = ctx.getInitParameter(“myBlog”);

ServletContext 接口提供的方法可分为以下几种类型。

(1)      用于在 Web 应用范围内存取共享数据的方法。

 

setAttribute(String name, java.lang.Object object)

getAttribute(String name)

getAttributeNames()

removeAttribute(String name)

 

2 )访问当前 Web 应用的资源。

 

public ServletContext getContext(java.lang.String uripath)

返回一个指定 URL 地址的 ServletContext 对象。

在一个安全的环境下, servlet 容器会返回 null

 

getInitParameter(String name) :根据给定的参数名,返回 Web 应用范围内的匹配的初始化参数值。在 web.xm 文件中,直接在 <web-app> 根元素下定义的 <context-param> 元素表示应用范围内的初始化参数。

 

getInitParameterNames() :返回一个 Enumeration 对象,它包含了 Web 应用范围内的所有初始化参数名。

 

getServletContextName() :返回 Web 应用的名字,即 web.xm 文件中 <display-name> 元素的值。

 

getRequestDispatcher(String path) :返回一个用于向其他 Web 组件转发请求的 RequestDispatcher 对象。这个指定的 URL 路径必须带有 "/" ,被解释为服务器文档根目录下的相对路径,并跟其它 web-app 主机的上下文根目录匹配。

 

3 )访问 Servlet 容器的相关信息。

 

getMajorVersion() :返回 Servlet 容器支持的 Java Servlet API 的主版本号。

 

getMinorVersion() :返回 Servlet 容器支持的 Java Servlet API 的次版本号。

 

getServerInfo() :返回 Servlet 容器的名字和版本。

 

4 )访问服务器端的文件系统资源。

 

getRealPath(String path) public java.lang.String getRealPath(java.lang.String path)

返回一个指定虚拟路径的真实路径(完整路径)的字符串。

举例:虚拟路径 "/index.html" 将返回服务器文件系统中的绝对路径 "http://host/contextPath/index.html", 当中的 contextPath ServletContext 的上下文路径。

返回的路径将适用于 servlet 容器所运行的操作系统。假如无法把虚拟路径映射为真实路径,该方法将返回 null 。(比如当路径指定的内容是源于 .war 文件)

 

getResource(String path) public java.net.URL getResource(java.lang.String path) throws java.net.MalformedURLException

返回由 path 指定的资源路径对应的一个 URL 对象,该 path 必须以“ /" 开头并作为当前目录的相对位置。

该方法允许 servlet 容器使 serlets 中的一个资源变为可用。该资源允许是一个本地资源或者是一个远程文件系统,这些资源可以在数据库中,或者在一个 .war 文件中。

servlet 容器必须实现 URL 句柄和 URLCOnnection 对象,这些对象对于资源访问是必需的。

如果没有匹配的资源,该方法返回 null

某些容器甚至可以向该方法所返回的资源写数据。

这个资源可以直接返回,所以请求一个 a.jsp 文件将返回 JSP 源文件。用一个 RequestDispatcher 对象取而代之,可以包含执行的结果。

这个方法功能有别于 java.lang.Class.getResource ,一个基于 class loader 检索资源的方法。但前者不依赖于 class loaders

 

getResourceAsStream() public java.io.InputStream getResourceAsStream(java.lang.String path)

返回一个由 String path 指定位置资源的 InputStream 。返回的 InputStream 可以是任意类型和长度的。

 

getMimeType(String file) :返回参数指定的文件的 MIME 类型。

 

getResourcePaths() public java.util.Set getResourcePaths(java.lang.String path)

返回一个存储 web-app 中所有资源路径的 Set (集合)。

路径以” /" 结尾表示一个子目录,并以 "/" 开头表示一个对于 web-app 的相对路径。

例子:

/welcome.html

/catalog/index.html

/catalog/products.html

/catalog/offers/books.html

/catalog/offers/music.html

/customer/login.jsp

/WEB-INF/web.xml

/WEB-INF/classes/com.acme.OrderServlet.class,

getResourcePaths("/") 将返回 Set {"/welcome.html", "/catalog/", "/customer/", "/WEB-INF/"}

getResourcePaths("/catalog/") 将返回 Set {"/catalog/index.html", "/catalog/products.html", "/catalog/offers/"}

如果子目录为空,返回 null

6 )输出日志。

 

log(String msg) :向 Servlet 的日志文件中写日志。

 

log(String message, java.lang.Throwable throwable) :向 Servlet 的日志文件中写错误日志,以及异常的堆栈信息。

 

ServletConfig 接口中定义了 getServletContext() 方法。 HttpServlet 类继承 GenericServlet 类,而 GenericServlet 类实现了 ServletConfig 接口,因此在 HttpServlet 类或 GenericServlet 类及子类中都可以直接调用 getServletContext() 方法,从而得到当前 Web 应用的 ServletContext 对象。

JSP application 是实现了 ServletContext 接口的类

         ServletConfig

javax.servlet

   Interface ServletConfig

 

   public interface ServletConfig

 

相对于 ServletContext ServletConfig 是针对特定的 Servlet 的参数或属性。 ServletConfig 是表示单独的 Servlet 的配置和参数,只是适用于特定的 Servlet 。从一个 servlet 被实例化后,对任何客户端在任何时候访问有效,但仅对本 servlet 有效,一个 servlet ServletConfig 对象不能被另一个 servlet 访问。

 

   1. 首先要设置初始化参数,如果只有一个特定的 servlet 要设定的参数 (Servlet 名字以及其它参数等 ) ,其它 servlet 不能共享,应该配置为 ServletConfig 参数,如一个读取附件的 servlet 要用到绝对目录,而别的 servlet 不会用到:

   <web-app>

   <servlet>

   <servlet-name>GetAtt</servlet-name>

   <servlet-class>mail.GetAttServlet</servlet-class>

   <init-param>

   <param-name>absPath</param-name>

   <param-value>/usr/mail/ax/axman/Maildir/</param-value>

   </init-param>

   </servlet>

</web-app>

 

2. 其次要取得 ServletConfig 对象 :

 

   1). init() 方法中得到 .

   public class Test extends HttpServlet {

   ServletConfig config;

   public void init(ServletConfig config) throws ServletException {

   super.init(config);

   this.config = config;

}

 

   2). getServletConfig() 方法中得到 .

   ServletConfig config=this.getServletConfig();

   if(config.getInitParameter("absPath").eaquals("adsd"){

   .......

   }

   Servlet 引擎代表的 Servlet 容器的对象和 Servlet 的配置参数信息一并封装到 ServletConfig 对象中,并在 Servlet 的初始化中将 ServletConfig 传给 Servlet

 

   Servlet 容器,我们可以理解为一个应用程序,它的一些配置信息也将可以从 ServletConfig 得到。这里的 Servlet 创建并装载 Servlet 实例对象后,调用 int(ServletConfig) 传对象。这就决定了,这个 ServletConfig Servlet 的生命周期与 servlet 有关。

 

   Servlet 引擎, Servlet ServletConfig 对象之间关系: Servlet 引擎,我们就当是一个框架,而 Servlet 是一个被调用的成份,但是同时,我们也应该知道,主体框架程序是根据配置文件来创建 ServletConfig 对象,这里才创建 Servlet 对象,并通过 init() ServletConfig

 

   ServletConfig 接口定义了 4 个方法:

 

   getServletName() 方法(定义: public java.lang.String getServletName() ),该方法返回一个 servlet 实例的名称,该名称由服务器管理员提供。

 

   getServletContext() 方法概(定义: public ServletContext getServletContext() ),返回一个 ServletContext 对象的引用。一个 web 应用有一个 servletContext ,全局的对象。

 

   getInitParameter() 方法(定义: public java.lang.String getInitParameter(java.lang.String name) ),返回一个由参数 String name 决定的初始化变量的值,如果该变量不存在,返回 null

 

  getInitParameterNames() 方法(定义: public java.util.Enumeration getInitParameterNames() ),返回一个存储所有初始化变量的枚举函数。如果 servlet 没有初始化变量,返回一个空枚举函数。

 

  

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值