基本概念

  • Web容器在启动时,会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用。
  • ServletContext(javax.servlet.http.ServletContext )存储了整个Web应用运行的上下文信息,即Web应用的全局信息,并且这些信息可以被不同的Servlet共享。
  • ServletConfig对象中维护了对ServletContext对象的引用,Tomcat创建Servlet对象后,在init方法中将ServletContext通过ServletConfig传递给当前的Servlet。
  • 多个Servlet共享同一个ServletContext,ServletContext对象一直存活到整个Web应用停止。
  • Servlet可以通过this.getServletContext() 来获取当前Web应用的ServletContext。通过ServletContext可以实现如下功能:
    • 获取Web应用初始化参数:getInitParamNames(), getInitParamValue(String name)
    • Servlet之间信息共享:getRequestDispatcher("/XX/XX") 实现信息的转发
    • 读取资源文件 :根据ServletContext获取上下文的工作根目录,根据根目录下资源的路径映射此资源在硬盘的绝对路径,再根据getResourceAsStream或者getRealPath获取硬盘绝对路径下的文件流。
    • 除了上述常用功能,Servlet还能实现对Listner/Filter/Session/Cookie的信息获取和配置,获取MimeType,URL下所有资源等等功能....

ServletContext 读取资源文件

  • ServletContext中存的参数信息可以被所有Servlet共享,实际开发中常常把数据库,编码信息等所有Servlet都需要的参数化信息存储在ServletContext的配置中供Servlet调用:
    1. 配置web.xml中的ServletContext参数
    2. 在Servlet中通过获取ServletContext调用参数

示例:配置ServletContext参数

<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<context-param>
<param-name>firstContextParaName</param-name>
<param-value>firstContextParaValue</param-value>
</context-param> <servlet>
<servlet-name>FirstServletContext</servlet-name>
<servlet-class>servletContext.FirstServletContext</servlet-class>
<init-param>
<param-name>servletConfigName</param-name>
<param-value>servletConfigValue</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>FirstServletContext</servlet-name>
<url-pattern>/FirstServletContext</url-pattern>
</servlet-mapping>
</web-app>

示例:Servlet中获取Context参数

    /**
* 获取系统初始化参数web.xml里的context-param
*/
public void getAllInitialParams() {
Enumeration<String> enums = this.getServletContext().getInitParameterNames();
String initParam;
while (enums.hasMoreElements()) {
initParam = enums.nextElement();
System.out.println("initParam names: " + initParam + " initParam value: "
+ this.getServletContext().getInitParameter(initParam));
}
}

ServletContext 传递参数

ServletContext又被称为Context域对象,可以在此对象中存储参数,但通常不建议这么做,因为可能会有线程安全问题。使用ServletContext传递参数,采用以下几步:

  1. 在ServletA中设置参数(是attribute,不是initParam),servletContext().setAttribute("key","value");
  2. 在ServletB中获取参数(注意A必须运行在B前面),servletContext().getAttribute("key");
/**
* ServletContext 对应Context域对象,可以在域对象中存储参数,servletContext.setAttribute("key","value");
* 普通变量的转发非常不赞同用Context,因为Context是全局的,在多线程条件下会导致变量的问题.
*
*/
public class FirstServletContexForParasTransfer extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
this.getServletContext().setAttribute("GenerateContextAttrsByServlet", "testContextServletAttrTransfer");
//设置Context域参数以后转发请求到另一个Servlet,另一个Servlet可以获取刚刚设置的参数;如果直接调用另一个Servlet,由于没有设置参数,取值结果会变为null
this.getServletContext().getRequestDispatcher("/FirstServletContexForParasTransferReceiver").forward(request, response);; }
}

 

public class FirstServletContexForParasTransferReceiver extends HttpServlet{

	public void doGet(HttpServletRequest request,HttpServletResponse response){

		System.out.println("get a attribute from SevletContext: "+this.getServletContext().getAttribute("GenerateContextAttrsByServlet"));
}
}

  

 

ServletContext(Context域对象) 获取资源文件

详见 JavaWeb基础:读写资源文件

JavaWeb基础: ServletContext的更多相关文章

  1. JavaWeb基础知识总结

    JavaWeb基础知识总结.   1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...

  2. JavaWeb基础: 学习大纲

    JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...

  3. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  4. 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总

    作者 : Stanley 罗昊 本人自行总结,纯手打,有疑问请在评论区留言 [转载请注明出处和署名,谢谢!] 一.java基础 1.多态有哪些体现形式? 重写.重载 2. Overriding的是什么 ...

  5. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

  6. JavaWeb基础: 获取资源文件

    Web工程在编译构建完毕以后,需要部署到Tomcat上运行,资源的硬盘路径也会随着改变.要想对资源文件进行读写操作需要获取其硬盘地址,在Web工程中通常通过ServletContext/ClassLo ...

  7. 25天javaweb基础

    第一天(html) 表格标签,超链接标签,图片标签,排版标签,列表标签 第二天(css) 表单标签 第三天(JS) js语法 定时器(系统对象的定时器setinterval,js的定时器seTimeo ...

  8. javaweb基础 02--javaweb基础概念

    1.WEB资源 * 静态web资源:指web页面中供人们浏览的数据始终是不变(如 html 页面). * 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内 ...

  9. JavaWeb 基础面试

    1. 启动项目时如何实现不在链接里输入项目名就能启动?  修改Tomcat配置文件 server.xml.找到自己的项目配置 : <Context docBase="oneProjec ...

随机推荐

  1. 【整理】虚拟机和主机ping不通解决办法

     检查几个方面: 1.检查虚拟网卡有没有被禁用2.检查虚拟机与物理机是否在一个VMNet中3.检查虚拟机的IP地址与物理机对应的VMNet是否在一个网段4.检查虚拟机与物理机的防火墙是否允许PING, ...

  2. Unity 对象查找

    GameObject.Find() 对象名 可查找带不带脚本,不能查隐藏,有可能不是要找的对象 GameObject.Find() 目录结构 可查找带不带脚本,能查隐藏,能确定是要找的对象 trans ...

  3. 30分钟LINQ教程

    在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  4. Web服务端软件的服务品质概要

    软件品质概述 提供同样功能.产品和服务的服务者中, 竞争力来自功能的多样化和服务品质的差异化, 无论是个体.企业还是国家. 这里的服务指功能.产品的实现程度和处理能力,以及研发/客服提供的技术支持程度 ...

  5. OBD K线抓包

    14230 Link 命令:  const u8 LinkCmd14230[6] = { 0xC2, 0x33, 0xF1, 0x01, 0x00, 0xE7 }; 14230 Enter 命令: c ...

  6. WF4.0入门(一)

    WF的全称是Windows Workflow Foundation .这是 Microsoft 快速构建基于工作流的应用程序的编程模型.引擎和工具.NET Framework 4 中这个 WF 版本更 ...

  7. LA 3211 飞机调度

    题目链接:http://vjudge.net/contest/142615#problem/A 题意:n架飞机,每架可选择两个着落时间.安排一个着陆时间表,使得着陆间隔的最小值最大. 分析: 最小值最 ...

  8. 系统巡警 v1.2 系统行为分析神器

    系统巡警,是一款安全辅助软件,可以帮助系统维护人员或安全研究人员观察系统运行情况,包括进程启动与销毁记录.模块加载记录.线程启动与销毁记录.系统服务创建修改和删除记录.文件与文件夹的增加删除和修改记录 ...

  9. 【Spring】Junit加载Spring容器作单元测试

    如果我们需要对我们的Service方法作单元测试,恰好又是用Spring作为IOC容器的,我们可以这么配置Junit加载Spring容器,方便做单元测试. > 基本的搭建 (1)引入所需的包 & ...

  10. 第 十一 天 Flagmeng 和动画

    1.flagment 的使用,生命周期. 传递数据. 2. 基本动画的使用. 3. 对话框的使用. 4.样式和主题.