一、介绍

当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,该对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享。

二、作用

1.获取Web应用程序的初始化参数

a.在web.xml的根元素下配置初始化参数

<context-param>                         <param-name>companyName</param-name><param-value>itcast</param-value>
</context-param>
<context-param>                         <param-name>address</param-name>    <param-value>beijing</param-value>
</context-param>                        

b.配置Servlet

<servlet>                                                         <servlet-name>TestServlet03</servlet-name>                    <servlet-class>cn.itcast.servlet.TestServlet03</servlet-class>
</servlet>
<servlet-mapping>                                                 <servlet-name>TestServlet03</servlet-name>                    <url-pattern>/TestServlet03</url-pattern>
</servlet-mapping>                                                

c.创建Servlet,读取参数

public class TestServlet03 extends HttpServlet {private static final long serialVersionUID = -5118888737164357097L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();// 得到ServletContext对象ServletContext context = this.getServletContext();// 得到包含所有初始化参数名的Enumeration对象Enumeration<String> paramNames = context.getInitParameterNames();// 遍历所有的初始化参数名,得到相应的参数值,打印到控制台out.println("all the paramName and paramValue are following:");// 遍历所有的初始化参数名,得到相应的参数值并打印while (paramNames.hasMoreElements()) {String name = paramNames.nextElement();String value = context.getInitParameter(name);out.println(name + ": " + value);out.println("<br>");}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doGet(request, response);}
}

d.启动tomcat

http://localhost:8080/chapter03/TestServlet03

2.实现多个servlet对象之间共享数据

ServletContext对象就是域对象:域对象在一定范围内能存值和取值。

由于一个Web应用中的所有Servlet共享同一个ServletContext对象,因此ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。在ServletContext接口中定义了分别用于增加、删除、设置ServletContext域属性的四个方法,如表所示。

创建两个Servlet

public class TestServlet04 extends HttpServlet {private static final long serialVersionUID = 8996912978637148061L;public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletContext context = this.getServletContext();// 通过setAttribute()方法设置属性值context.setAttribute("data", "this servlet save data");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}
public class TestServlet05 extends HttpServlet {private static final long serialVersionUID = 4095782463787881243L;public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();ServletContext context = this.getServletContext();// 通过getAttribute()方法获取属性值String data = (String) context.getAttribute("data");out.println(data);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

http://localhost:8080/chapter03/TestServlet04

http://localhost:8080/chapter03/TestServlet05

3.读取Web应用下的资源文件

在实际开发中,有时候可能会需要读取Web应用中的一些资源文件,比如配置文件,图片等。为此,在ServletContext接口中定义了一些读取Web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于Web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。表中列举了ServletContext接口中用于获取资源路径的相关方法,具体如下:

路径问题:
         普通java项目:直接使用jdk编译java文件,所以说文件的路径是相对于工作空间。
                比如:
                    Properties por = new Properties();
                    InputStream inStream = new FileInputStream("src/config.properties");
                    por.load(inStream);
                    String value =por.getProperty("key");
                    System.out.println(value);
         web项目:运行在tomcat服务器上面的,所以说文件的路径是相对于tomcat服务器。
                  服务器端是没有src这个目录,写路径不能写src,必须相对于tomcat服务器端的路经。

案例代码1:ServletContext读取属性文件

案例代码2:ServletContext读取图片

3-3-ServletContext接口相关推荐

  1. 上下文对象及servletContext接口

    上下文对象是web服务器上基于web应用的一个背景环境对象,上下文对象提供了一个同一web应用内不同资源间共享信息的场所. -------------------------------------- ...

  2. Servlet | ServletConfig接口、ServletContext接口详解

    目录 一:ServletConfig接口 二:ServletContext接口 三:补充缓冲机制 一:ServletConfig接口 (1)ServletConfig是什么? javax.servle ...

  3. Servlet中ServletConfig接口和ServletContext接口的作用

    前言: Servlet的作用: Servlet 是接口,是 JavaEE 规范之一.接口起到了规范的作用. Servlet 是 JavaWeb 三大组件之一.三大组件分别是:Servlet 程序.Fi ...

  4. JavaWEB ServletContext 接口详解

    1.使用了ServletConfig 对象创建出来ServletContext 对象 获取ServletContext 对象的第一种方式 使用了ServletConfig 对象获取到 ServletC ...

  5. ServletContext接口

    在Tomcat服务器中的Web的项目,也叫做Web应用程序,应用程序也是对象. 在JavaWeb开发中,使用ServletContext对象表示Web应用程序. 文章目录 ServletContext ...

  6. Servlet基础:接口、类、请求响应、配置、会话追踪、上下文、协作、异常

    10.1 Servlet介绍 ​ Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的Web服务器端编程技术,主要用于在Web服务器端获得客户端的访问请求信息和动 ...

  7. 服务器响应的生成:HTTP响应报头——HttpServletResponse接口的应用

    一,响应报头 响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息 常用的响应报头 Location Content-T ...

  8. ServletContext 与application的异同

    servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图.ServletContext实例是通过 getServletContext()方法获得的,由于H ...

  9. JavaWeb 入门篇(3)ServletContext 详解 具体应用

    当Servlet 容器启动的时候 会为每个web应用创建一个ServletContext 对象代表当前的web应用. 在web.xml 文件中不止可以配置Servlet的初始化信息 还可以给整个web ...

  10. Servlet入门篇(GenericServlet 类 - HttpServlet 类 -ServletConfig 接口 - HttpServletRequest 接口……)

    1.Servlet 简介 Servlet 对请求的处理和响应过程可分为以下几个步骤: (1)客户端发送请求至服务器端: (2)服务器将请求信息发送至 Servlet : (3)Servlet 生成响应 ...

最新文章

  1. java 判断ocx是否存在_OCX控件的注册卸载,以及判断是否注册
  2. Windows下基于python3使用word2vec训练中文维基百科语料(一)
  3. 在数据框中采样随机行
  4. 你的设备中缺少重要的安全和质量修复_城市排水管道三类非开挖修复技术汇总...
  5. (转)Silverlight数据校验之INotifyDataErrorInfo
  6. 用C语言实现分治方法数组的排序,C语言实现分治法实例
  7. 用css3制作旋转加载动画的几种方法
  8. pandas聚合dataframe某一列的值中的所有元素
  9. 第 4 章 MySQL 锁机制
  10. 下标随着页面链接的跳转
  11. QuickCHM V2.6
  12. GDOI2016模拟8.19数学
  13. windows10关闭java自动更新
  14. 中国智能家居企业出海,亚马逊云科技为其提供“GPS锦囊”
  15. Iceberg在袋鼠云的探索及实践
  16. Android 常用的第三方框架和组件
  17. python 画图效果
  18. egg-shell-decorators 给你的蛋蛋加个壳
  19. 潜在语义分析 (LSA),概率潜在语义分析 (PLSA)
  20. 怎么实现ZBrush 4R7中界面视窗的快速转换

热门文章

  1. java中 static变量和方法到底是存在内存什么区域?
  2. 【java】JDK中注解的底层实现
  3. 95-872-060-源码-CEP-匹配事件提取
  4. 95-850-020-源码-心跳-JobMaster与TaskExecutor之间的心跳检测
  5. 【kafka】kafka 启动的时候 日志 find a corrupted index file
  6. 【java】我工作三年了,该懂并发了!
  7. 【Flink】JobManager responsible for xx lost the leadership zk变动导致重启
  8. Kudu 使用注意点
  9. Gradle 比 Maven 好为什么用的人少
  10. Springboot 关于日期时间格式化处理方式总结