一、ServletContext 接口

  1、ServletContext 是什么

    (1)ServletContext 是一个接口,它表示 Servlet 上下文对象(可以和程序的容器(服务器)来通信);

    (2)一个 web 工程, 只有一个 ServletContext 对象实例;

    (3)ServletContext 对象是一个域对象;

    (4)ServletContext 是在 web 工程部署启动的时候创建。 在 web 工程停止的时候销毁

  2、域对象

    域对象:就是类似于 Map,可以在里面存取数据,叫域对象。

    域对象的范围:指的是 存取数据的操作范围。

    ServletContext 范围:整个 Web 工程。

二、获取 ServletContext 对象

  1、通过 ServletConfig 获取

    方法:

ServletContext servletContext = getServletConfig().getServletContext();

  2、通过ServletRequest及其子类获取

    方法:

ServletRequest req = (ServletRequest)request;                    //强转成 ServletRequest 获取
ServletContext servletContext3 = req.getServletContext();
ServletContext servletContext5 = request.getServletContext(); //通过 HttpServletRequest 获取

  3、通过 getServletContext() 方法获取

    直接调用该方法,其实是 GenericServlet 类中的方法,其本质还是通过 ServletConfig 对象获取的

ServletContext servletContext = getServletContext();

三、功能作用

  1、获取 web.xml 中配置的 上下文参数 context-param

 //web.xml配置
<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<!--context-param 是上下文参数(它属于整个 web 工程)-->
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>
  //获取参数的 方法
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取 web.xml 中配置的上下文参数 context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param 参数 username 的值是:" + username);
System.out.println("context-param 参数 password 的值是:" + context.getInitParameter("password"));
}

    注意:

      ① <context-param> 标签要书写在 <web-app> 里面,<servlet>的外面;

      ② 这里配置的参数是为整个 web 工程配置的,对所有的 servlet 都有效;而之前 <init-param> 为某一个servlet单独配置的,注意区分;

  2、域对象:存取数据

    (1)setAttribute(String name,Object value);   存储数据

    (2)getAttribute(String name);   获取数据

    (3)removeAttribute(String name);  移除数据

     ServletContent 对象范围:所有用户所有请求的数据(谨慎使用)

     Demo:

 // ContextServlet1
public class ContextServlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {
// 获取 ServletContext 对象
ServletContext context = getServletContext();
System.out.println(context);
System.out.println("保存之前: Context1 获取 key1 的值是:" + context.getAttribute("key1"));
context.setAttribute("key1", "value1");
System.out.println("Context1 中获取域数据 key1 的值是:" + context.getAttribute("key1"));
}
}
// ContextServlet2
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
ServletContext context = getServletContext();System.out.println(context);
System.out.println("Context2 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));
}

  3、获取当前的工程路径(虚拟路径):格式:/工程路径

    获取当前工程的路径(虚拟路径),格式:/工程路径

String contextPath = getServletContext().getContextPath();

  4、获取工程部署后在服务器硬盘上的绝对路径(真实路径)

    获取工程绝对路径(真实路径)

String realPath = getServletContext().getRealPath("/");

          Demo:

 // 获取工程部署后在服务器硬盘上的绝对路径(真实路径)
/**
* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA/eclipse 代码的 web 目录
*/
System.out.println("工程部署的路径是:" + context.getRealPath("/"));
System.out.println("工程下 css 目录的绝对路径是:" + context.getRealPath("/css"));
System.out.println("工程下 imgs 目录 1.jpg 的绝对路径是:" + context.getRealPath("/imgs/1.jpg")); String b = context.getRealPath("/b.txt");//web目录下资源访问
String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问

  5、获取MIME类型

    MIME 类型:在互联网通信过程中定义的一种文件数据类型。

    格式:

大类型/小类型;   如:text/html、image/jpeg 等

     获取一个文件的 MIME类型

String mimeType = getServletContext().getMimeType(String fileName);

  

Java 之 ServletContext 对象的更多相关文章

  1. 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法

    今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...

  2. Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象

    本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法. ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始 ...

  3. Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)

    一.Servlet简介  1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...

  4. JAVA基础之ServletContext对象

    个人理解:  ServletContext类似字节码文件对象,在web创建的时候就自动生成了,并且是唯一的,跟随着项目和服务器共存亡了.通过这个对象,我们可以向里面存数据(键值对),也可以通过别的Se ...

  5. mvc-servlet---ServletConfig与ServletContext对象详解(转载)

    ServletConfig与ServletContext对象详解 一.ServletConfig对象    在Servlet的配置文件中,可以使用一个或多个<init-param>标签为s ...

  6. ServletContext对象

    **1 ServletContext对象   1)在web应用中,由服务器创建的唯一的一个对象是ServletContext   2)ServletContext对象在每一个Servlet中取得都是相 ...

  7. Java 四大域对象总结

    一.ServletContext 1.生命周期:当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟 ...

  8. javaWEB总结(4):ServletContext对象方法

    前言:之前每次学到ServletContext对象都会抗拒,跳着学,后面才发现有很多不懂的原理都在这个对象里面,后悔莫及,所以今天特地把他单放在一篇文章里,算是对他的忏悔. 1.什么是ServletC ...

  9. ServletConfig与ServletContext对象(接口)

    ServletConfig:封装servlet的配置信息. 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. <ser ...

随机推荐

  1. easyui datagrid的行编辑器editor 如何实现新增时可修改,编辑时,不可修改

    项目出现一个需求,要求用户界面的用户名,新增时,可自由输入,编辑时,不可修改 html页面 <table id="gridlist" data-bind="data ...

  2. Ubuntu 上编译opencv_contrib模块for Android

    https://blog.csdn.net/ipfpm/article/details/81132144 [ubuntu]Ubuntu中Android SDK下载跟配置 android24的版本 (1 ...

  3. mark_Linux_wc

    Linux wc命令 Linux wc命令用于计算字数. 利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指定文件名称.或是所给予的文件名为"-",则wc指令会从标准 ...

  4. C++内存管理2-内存泄漏

    1 C++中动态内存分配引发问题的解决方案 假设我们要开发一个String类,它可以方便地处理字符串数据.我们可以在类中声明一个数组,考虑到有时候字符串极长,我们可以把数组大小设为200,但一般的情况 ...

  5. nginx使用与配置入门指南

    这是一篇关于nginx使用与配置的入门指南,但不包括nginx的编译与安装.我假定你知晓如何安装nginx.对大多数Linux系统来说,nginx都已经存在于它们的软件包里,直接使用系统提供的软件管理 ...

  6. Prometheus监控实战day2——监控主机和容器

    Prometheus使用exporter工具来暴露主机和应用程序上的指标,目前有很多exporter可供利用.对于收集各种主机指标数据(包括CPU.内存和磁盘),我们使用Node Exporter即可 ...

  7. Grammar01 语法七要素之一_词类

    1 词类 1.1 词类表格 实词 名词 -> n. -> noun -> 给所有人和物命名的词. 动词 -> v. (vt. vi.) -> verb ( transit ...

  8. UE4 常用数学

    转自:https://dawnarc.com/2016/07/mathlinear-algebra%E5%90%91%E9%87%8F%E7%A7%AF%E5%A4%96%E7%A7%AF%E5%8F ...

  9. json_encode不自动转义斜杠“/”的方法

    默认的情况之下使用 json_encode 对数组进行 json 格式的转换时候会自动的将数据中含有斜杠的字符串进行转义,如图 两种解决办法   其一,正则替换: $a = str_replace(& ...

  10. 最新超简单解读torchvision

    torchvision https://pytorch.org/docs/stable/torchvision/index.html#module-torchvision The torchvisio ...