Servlet上下文 ServletContext

上下文接口    ServletContext接口
    每一个应用都有唯一的一个上下文对象,即为ServletContext对象
    ServletContext对象可以和请求、会话对象一样处理属性
        setAttribute
        getAttribute
        removeAttribute
    当容器启动时,会加载容器中的每一个应用,并针对每一个应用创建一个对象,称为上下文(context)对象。每一个应用只有一个唯一的上下文对象。Servlet API中提供了ServletContext接口来表示上下文对象。例如,Tomcat下有一个项目capter10,启动tomcat的时候,就会为capter10初始化唯一一个ServletContext独享,作为全局的信息存储空间。
    
    获取上下文对象:
        Servlet.getServletConfig(), ServletConfig.getServletContext()
        或者使用HttpServlet中的getServletContext()方法
    ServletContext接口中有很多方法,其中较为常见的是用来存储、获取上下文属性的方法,方法名和含义与请求和会话中的相关方法类似。
     Object getAttribute(String name)
          Returns the servlet container attribute with the given name, or null if there is no attribute by that name.
    Enumeration getAttributeNames()
          Returns an Enumeration containing the attribute names available within this servlet context.
    ServletContext getContext(String uripath)
          Returns a ServletContext object that corresponds to a specified URL on the server.
    String getContextPath()
          Returns the context path of the web application.
    String getInitParameter(String name)
          Returns a String containing the value of the named context-wide initialization parameter, or null if the parameter does not exist.
    Enumeration getInitParameterNames()
          Returns the names of the context's initialization parameters as an Enumeration of String objects, or an empty Enumeration if the context has no initialization parameters.
    RequestDispatcher getNamedDispatcher(String name)
          Returns a RequestDispatcher object that acts as a wrapper for the named servlet.
    String getRealPath(String path)
          Returns a String containing the real path for a given virtual path.
    RequestDispatcher getRequestDispatcher(String path)
          Returns a RequestDispatcher object that acts as a wrapper for the resource located at the given path.
    void removeAttribute(String name)
          Removes the attribute with the given name from the servlet context.
    void setAttribute(String name, Object object)
          Binds an object to a given attribute name in this servlet context.
          
    使用例子:
        使用ServletContext进行登录人次的统计。
        在jsp中,直接使用application内置对象就是该应用的ServletContext
        多次登录成功后,计数信息将被累加,但是,如果服务器重启,或者应用被重新加载,上下文对象将被小辉,那么计数器将被清0,解决这个问题就需要使用监听器。
        
    上下文参数
    在web.xml中可以配置上下文参数,在整个上下文中有效
    <context-param>
        <param-name>path</param-name>
        <param-value>/WEB-INF/props</param-value>
    </context-param>
    获取上下文参数的方法:
        public String getInitParameter(String name):该方法通过上下文参数名字,获取上下文参数的值
    上下文参数封装到上下文对象中,而上下文对象是全局的,一个应用只有唯一的一个上下文对象。所以上下文参数可以被该应用下任何Servlet或者jsp使用,在JSP中如果要使用上下文参数,可以直接使用application.getInitParameter.
    
    ServletConfig和ServletContext都有一个getInitParameter方法,有什么区别?
        ServletConfig中的getInitParameter获取的是Servlet类的初始化参数。在web.xml中的servlet标记中通过<init-param>设置。Servlet初始化参数只能被该Servlet使用,其他servlet无法使用。ServletContext中的getInitParameter方法,获取的是上下文参数,在web.xml中通过<context-param>设置,可以被该应用下任何一个资源使用。
        
使用的例子:

 

ServletContext context=this.getServletContext();
Integer count=(Integer) context.getAttribute("count");
  <!--
jsp是特殊的Servlet,不好直接获取ServletContext,我们可以直接使用jsp的内置对象application,不需要声明创建
-->
您是第<%=application.getAttribute("count") %>位访问者<br/>
<a href="<%=response.encodeURL("showOwn") %>">显示个人信息</a>
  <context-param>
<param-name>path</param-name>
<param-value>upload</param-value>
</context-param>
       ServletContext context=this.getServletContext();
String path=context.getInitParameter("path");
File file=new File(path);
file.mkdirs();

Context上下文对象(抄书的)的更多相关文章

  1. Asp.Net SignalR Hub中的上下文对象

    Hub中的 Context 使用了集线器后,会发现对比持久连接类少了OnConnectioned这样的事件,事实上是有的.需要我们去override .这下似乎发现了什么问题,记得持久连接类中有con ...

  2. EF上下文对象线程内唯一性与优化

    在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...

  3. [译] ASP.NET 生命周期 – ASP.NET 上下文对象(五)

    ASP.NET 上下文对象 ASP.NET 提供了一系列对象用来给当前请求,将要返回到客户端的响应,以及 Web 应用本身提供上下文信息.间接的,这些上下文对象也可以用来回去核心 ASP.NET 框架 ...

  4. Servlet配置对象、上下文对象、多线程问题

    一.Servlet配置对象(ServletConfig):Servlet初始化时,容器调用其init(ServletConfig)方法,传递该对象. 1.获得对象方法: (1).直接使用getServ ...

  5. 基于Spring DM管理的Bundle获取Spring上下文对象及指定Bean对象

    在讲述服务注册与引用的随笔中,有提到context.getServiceReferences()方法,通过该方法可以获取到OSGI框架容器中的指定类型的服务引用,从而获取到对应的服务对象.同时该方法还 ...

  6. Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象

    前言 在上一篇文章中(Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库)[https://www.cnblogs.com/viter/p/10243577.html],介 ...

  7. Android开发 ---ContentProvider数据提供者,Activity和Service就是上下文对象,短信监听器,内容观察者

    1.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...

  8. Flask的Context(上下文)学习笔记

    上下文是一种属性的有序序列,为驻留在环境内的对象定义环境.在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步.事务.实时激活.安全性等等. 比如在计算机中,相对于进程而言,上下文就是进 ...

  9. Asp.Net Core获取当前上下文对象

    HttpContext简介 .Net Core中的HttpContext上下文是个抽象类,命名空间为Microsoft.AspNetCore.Http 所在程序集 \netstandard2.0\Mi ...

随机推荐

  1. IE6 png 透明--四种解决方法

    FF和IE7已经直接支持透明的png图了,下面这个主要是解决IE6下透明PNG图片有灰底的 方法一:定义一个样式,给某个div应用这个样式后,div的透明png背景图片自动透明了.(注意两处图片的路径 ...

  2. iOS-CALayer实现简单进度条

    /** *  用CALayer定制下载进度条控件 *  1.单独创建出CALayer *  2.直接修改CALayer的frame值,执行隐式动画,实现进度条效果 *  3.用定时器(NSTimer) ...

  3. Linux静态库和动态库

    Linux 工具 ❑ GCC: The GNU Compiler Collection, containing the GNU C compiler❑ G++: A C++ compiler, inc ...

  4. HtmlAgilityPack 之 HtmlNode类

    HtmlAgilityPack中的HtmlNode类与XmlNode类差不多,提供的功能也大同小异.下面来看看该类提供功能. 一.静态属性 public static Dictionary<st ...

  5. 【poj2478-Farey Sequence】递推求欧拉函数-欧拉函数的几个性质和推论

    http://poj.org/problem?id=2478 题意:给定一个数x,求<=x的数的欧拉函数值的和.(x<=10^6) 题解:数据范围比较大,像poj1248一样的做法是不可行 ...

  6. Gradle Goodness: Skip Building Project Dependencies

    If we use Gradle in a multi-module project we can define project dependencies between modules. Gradl ...

  7. 关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)

    对于模态非模态对话框默认是不响应菜单的UPDATE_COMMAND_UI消息的,需要增加对WM_INITMENUPOPUP消息的处理以后,才可以响应UPDATE_COMMAND_UI. void CX ...

  8. Docker搭建MySQL服务

    Docker开源镜像 前面我们已经安装好了Docker,也简单了解了Docker.那么我们可以尝试搭建一个MySQL服务. 要搭建服务就要启动服务容器,要创建容易就要有镜像,Docker提供了一个类似 ...

  9. IE8 浏览器自动保存文档副本,添加缓存

    若响应(response)HTTP头信息中没有关于缓存的头信息,则在IE8中第二次请求网页时,从缓存中拿取文件,而不是重新向服务器请求.而在Firefox或chrome则是重新向服务器请求. 解决方法 ...

  10. JVM垃圾回收机制总结(4) :新一代的垃圾回收算法

    垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...