ServletContext 的功能与用处是什么?

解决方案 »

  1.   

    ServletContext接口简述 ServletContext接口的简述:public interface ServletContext
    定义了一系列方法用于与相应的servlet容器通信,比如:获得文件的MIME类型,分派请求,或者是向日志文件写日志等。
    每一个web-app只能有一个ServletContext,web-app可以是一个放置有web application 文件的文件夹,也可以是一个.war的文件。
    ServletContext对象包含在ServletConfig对象之中,ServletConfig对象在servlet初始化时提供servlet对象。getContext()方法概述:public ServletContext getContext(java.lang.String uripath)
    返回一个指定URL地址的ServletContext对象。
    该方法允许servlets获得对服务器的各部分上下文的访问权,并根据需要从上下文获得RequestDispatcher对象。这个指定的URL路径必须带有"/",被解释为服务器文档根目录下的相对路径,并跟其它web-app主机的上下文根目录匹配。
    在一个安全的环境下,servlet容器会返回null。getMajorVersion()方法概述:public int getMajorVersion()
    返回servlet容器支持的Servlet API的版本号,所有实现都必须返回整型数2。getMinorVersion()方法略。getMimeType()方法概述:public java.lang.String getMimeType(java.lang.String file)
    返回指定文件的文件类型,如果文件类型未知,则返回null。文件类型由servlet容器的配置决定并在一个web-app中被指定。一般情况下的文件类型是:"text/html" 和"image/gif"。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。
    getResource()方法概述: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可以是任意类型和长度的。getRequestDispatcher()方法概述:public RequestDispatcher getRequestDispatcher(java.lang.String path)
    返回一个RequestDispatcher对象,该对象扮演着一个给定资源包装者的角色。一个RequestDispatcher对象可以用于传送一个请求到特定资源或者把特定资源包含到一个响应当中。该特定资源可以是动态的也可以是静态的。
    通过getContext()方法可以为外部contexts资源获取RequestDispatcher对象。如果ServletContext不能获取RequestDispatcher对象,返回null。getNamedDispatcher()方法概述:public RequestDispatcher getNamedDispatcher(java.lang.String name)
    为指定名字的servlet对象返回一个RequestDispatcher对象。Servlet和JSP页面可以通过服务器管理或web application deployment descriptor被命名。一个Servlet实例的名称可以由ServletConfig.getServletName()决定。getServlet()方法、getServlets()方法、getServletNames()方法,不推荐使用。log(java.lang.String msg)方法概述:public void log(java.lang.String msg)
    把指定的信息写进servlet日志文件,通常是事物日志。日志文件的名称和类型与servlet容器有关。public void log(java.lang.Exception exception,java.lang.String msg) 略
    public void log(java.lang.String message,java.lang.Throwable throwable) 略getRealPath()方法概述:public java.lang.String getRealPath(java.lang.String path)
    返回一个指定虚拟路径的真实路径(完整路径)的字符串。
    举例:虚拟路径"/index.html"将返回服务器文件系统中的绝对路径"http://host/contextPath/index.html", 当中的contextPath是ServletContext的上下文路径。
    返回的路径将适用于servlet容器所运行的操作系统。假如无法把虚拟路径映射为真实路径,该方法将返回null。(比如当路径指定的内容是源于.war文件)getServerInfo()方法概述:public java.lang.String getServerInfo()
    返回servlet容器的名称和版本号。
    返回的字符串格式是servername/versionnumber(服务器名/版本号),例如:the JavaServer Web Development Kit 将返回字符串”JavaServer Web Dev Kit/1.0”。
    servlet容器还将返回其它可选信息,如:“JavaServer Web Dev Kit/1.0 (JDK 1.1.6; Windows NT 4.0 x86)”getInitParameter()方法概述:public java.lang.String getInitParameter(java.lang.String name)
    返回上下文定义的变量的值,如果变量不存在,返回null。
    见ServletConfig.getInitParameter(java.lang.String)。getInitParameterNames()方法概述:public java.util.Enumeration getInitParameterNames()
    返回上下文定义的所以变量的枚举函数,如果空则返回空枚举函数。getAttribute()方法概述:public java.lang.Object getAttribute(java.lang.String name)
    返回指定名字的servlet容器变量值,如果无该变量则返回null。getAttributeNames()方法概述:public java.util.Enumeration getAttributeNames()
    返回servlet容器的所有变量的枚举函数,如果空则返回空枚举函数。setAttribute()方法概述:public void setAttribute(java.lang.String name,java.lang.Object object)
    在servlet容器内绑定一个指定对象给一个指定的名字。如果该名字已经绑定到一个对象,则用该对象覆盖之。
    If listeners are configured on the ServletContext the container notifies them accordingly. (不会翻译,求助)
    如果传递一个null值,则相当于调用removeAttribute()。removeAttribute()方法概述:public void removeAttribute(java.lang.String name)
    移除指定名字的servlet容器变量。getServletContextName()方法概述:public java.lang.String getServletContextName()
    返回web application的名字。最后,见Servlet.getServletConfig(), ServletConfig.getServletContext()〔StartupServlet.java〕/*
    * @class: StartupServlet
    * @version: 1.0
    * @Date: 2004/12/16 15:51:40
    */
    package com.chinacreator.ac.javabean.servlet;import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.net.*;import com.chinacreator.tousu.application.*;
    import com.chinacreator.tousu.application.ApplicationDocument.*;
    import com.chinacreator.ac.javabean.log.*;
    import com.chinacreator.ac.javabean.util.*;
    import com.chinacreator.ac.javabean.servlet.*;/**
    *
    * <p>Title: StartupServlet</p>
    * <p>Description: 启动加载的servlet类</p>
    * <p>Copyright: Copyright (c) 2004</p>
    * <p>Company: chinacreator</p>
    * @author hui.deng
    * @version 1.0
    * @see
    */
    public class StartupServlet
    extends HttpServlet {private static final Log log = new Log(StartupServlet.class);private ApplicationDocument document = null;//Initialize global variables
    public void init() throws ServletException {ServletContext application = this.getServletContext();AccessControlFacade facade = new AccessControlFacade();
    DictionaryProcessor dictionaryProcessor = facade.getAllDictionariesWrapper();/**
    * 存入字典
    * @param dictionaryProcessor 字典处理器
    */
    application.setAttribute(Constant.DICTIONARY_OBJECT_NAME,
    dictionaryProcessor);
    }}
    〔web.xml〕<servlet>
    <servlet-name>startupservlet</servlet-name>
    <servlet-class>com.chinacreator.ac.javabean.servlet.StartupServlet</servlet-class>
    <load-on-startup>10</load-on-startup>
    </servlet><servlet-mapping>
    <servlet-name>startupservlet</servlet-name>
    <url-pattern>/startup</url-pattern>
    </servlet-mapping>〔get.jsp〕/**
    * 取出字典
    * @return Object 字典处理器
    */
    public Object getDictionaryProcessor() {
    return application.getAttribute(Constant.DICTIONARY_OBJECT_NAME);
    }
      

  2.   

    恩,楼上的说的很多,但我还是不太明白ServletContext的作用.有没有更简单的解释呢?
    比如说.在web通信中ServletContext的地位是什么?他和Servlet的区别是什么?
      

  3.   

    个人理解就是servletcontext就是指你创建的这个工程的对象(类),你可以给它增加属性,servlet,以及html等等,只不过servlet,html可以在手动增加,
      

  4.   

    个人认为servletcontext就是获取上下文根,就是你写的JSP的根文件夹,通过调用方法获取初始化的配置信息,自己的看法,我也是一知半解
      

  5.   

    就是 application 。主要获取你项目的一些 路径,配置信息等。
      

  6.   

    同意楼上的,ServletContext对象就相当于jsp的application