基本概念

  • 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. SpringMVC源码剖析(一)- 从抽象和接口说起

    SpringMVC作为Struts2之后异军突起的一个表现层框架,正越来越流行,相信javaee的开发者们就算没使用过SpringMVC,也应该对其略有耳闻.我试图通过对SpringMVC的设计思想和 ...

  2. [Android Tips] 5. INSTALL_PARSE_FAILED_MANIFEST_MALFORMED on Android-2.1

    最近在 http://testin.cn 上的多款 android 2.1 设备上出现安装失败的问题 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 问题分析 貌似 a ...

  3. for循环和迭代

    迭代的一个时间复杂度最大就是n^2,而在for循环和迭代相结合的一个情况下则是一个排序组合,不再是一个简单n^2,而是阶乘n!.

  4. RobotFrameWork WebService Soap接口测试 (一)

    在做完基于http协议的接口测试之后,开始弄soap协议了,之前有过开发java webservice自动化框架的经验,所以我想着应该并不会很难.对于webservice的简介,服务器端和客户端的开发 ...

  5. python-操作excel数据文件

    1.excel文件操作 读文件xlrd模块:

  6. Upload file

    <h3>Upload File</h3> <form action="@Url.Action("Upload","UploadCo ...

  7. SQL SERVER 2008 登陆失败(SQL和windows都没有对应的权限)

    转自:http://www.cnblogs.com/zerocc/p/3425431.html 昨天在测试一些权限今天早上来就发现SQL SERVER 登陆不上去,报错为: 用户登陆失败:消息 184 ...

  8. NaN

    not a number 全称, 任何数/0 js会出现NaN alert(NaN==NaN); // false isNaN(NaN); // true alert(isNaN(10)); // f ...

  9. android项目的结构和布局

    一.res文件夹 1.res文件夹用于存放Android的资源.包括:动画.静态图片.字符串.菜单.布局.视频.文件等. 1.drawable-ldpi:低分辨率图形(120像素/英寸) 2.draw ...

  10. img的hover事件闪动

    今天给同学写一个相册照片鼠标浮动显示细节的效果,遇到了闪动的bug,也顺利解决,就写下来跟大家分享. 我使用的是'标签:hover + 标签'的形式,如果使用jquery的mouseover.mous ...