今天我们学习的是ServletContext的应用。

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。

由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

1.多个Servlet通过ServletContext对象实现数据共享。

在InitServlet的Service方法中利用ServletContext对象存入需要共享的数据

/*获取ServletContext对象*/

ServletContext context = this.getServletContext();

//存入共享的数据

context.setAttribute("name", "haha");

在其它的Servlet中利用ServletContext对象获取共享的数据

/*获取ServletContext对象*/

ServletContext context = this.getServletContext();

//获取共享的数据

String name = context.getAttribute("name");

System.out.println("共享的内容值是:"+name);

2.获取WEB应用的初始化参数。

在web.xml文件中配置需要初始化的参数信息。

<web-app>

<context-param>

<param-name>url</param-name>

<param-value>jdbc:mysql://localhost:3306/4g</param-value>

</context-param>

<context-param>

<param-name>password</param-name>

<param-value>1314qr</param-value>

</context-param>

<context-param>

<param-name>user</param-name>

<param-value>root</param-value>

</context-param>

</web-app>

在DemoServlet的doPost方法中测试获取初始化参数的步骤如下:

/*获取ServletContext对象*/

ServletContext context = this.getServletContext();

/*获取初始化参数*/

//获取指定名称的初始化参数

String url = context.getInitParameter("url");

//获取web.xml文件中所有的初始化应用参数

Enumeration<String> enumer = context.getInitParameterNames();

while(enumer.hasMoreElements()){

String name = enumer.nextElement();

String value = context.getInitParameter(name);

System.out.println(name+"=========="+value);

}

2.实现Servlet的转发:

在测试的Servlet中实现转发的步骤如下:

/*要利用ServletContext对象实现转发获取对象*/

ServletContext context = this.getServletContext();

//在request对象中存入name属性

request.setAttribute("name", "haha");

/*根据转发的地址获取 RequestDispatcher对象*/

RequestDispatcher  rd  = context.getRequestDispatcher("/index.jsp");

//调用转发方法 以下采用任意方法即可

rd.forward(request, response);

//rd.include(request, response);

注意:forward与include的区别

forward方法是把请求的内容转发到另外的一个servlet.而include是把另一个servlet处理过后的内容拿过来.

(forward方法调用后在响应中的没有提交的内容被自动消除。将请求转发给其他的Servlet后,由

被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。

include方法使原先的Servlet和转发到的Servlet都可以输出响应信息,即原先的Servlet还可以继续输出响应信息)

3.利用ServletContext对象读取资源文件。

读取资源文件(properties文件(属性文件))的三种方式

配置的properties的内容如下:

url=jdbc\:mysql\://localhost\:3306/3g ;

user=root;

password=root;

获取实现的代码如下:

/*获取ServletContext对象*/

ServletContext context = this.getServletContext();

//第一种方式

URL url = context.getResource("WEB-INF/classes/db.properties");

InputStream is =  url.openStream();

//第二种方式

/*读取db.properties文件*/

String path =context.getRealPath("WEB-INF/classes/db.properties");

/*根据文件的路径 构建文件对象*/

File file = new File(path);

/*根据file文件对象 创建输入流*/

InputStream is = new FileInputStream(file);

//第三种方式

InputStream is = context.getResourceAsStream("WEB-INF/classes/db.properties ");

以三种方式任意一种可以:

/*解析properties的文件*/

Properties prop = new Properties();

//从输入流中读取属性列表(键和元素对)。

prop.load(is);

Set<String> set = prop.stringPropertyNames();

//遍历set集合

Iterator<String> it = set.iterator();

while(it.hasNext()){

String key = it.next();

String value = prop.getProperty(key);

System.out.println(key+"-----"+value);

}

ServletContext总结的更多相关文章

  1. JavaWeb——ServletContext

    一.基本概念 说起ServletContext,一些人会产生误解,以为一个servlet对应一个ServletContext.其实不是这样的,事实是一个web应用对应一个ServletContext, ...

  2. The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

    The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory 这是由于项目里面的一些 ...

  3. 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决

    现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...

  4. 如何获得Webapp的根项目路径 即ServletContext.getRealPath() 的输入参数要以"/"开头

    ServletContext.getRealPath() 的输入参数要以"/"开头 2014-03-26 15:54 5738人阅读 评论(1) 收藏 举报 版权声明:本文为博主原 ...

  5. 重温Servlet学习笔记--servletContext对象

    一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...

  6. Servlet 之 ServletContext

    package cn.jiemoxiaodi.servlet_servletcontext; import java.io.IOException; import java.io.PrintWrite ...

  7. Tomcat启动后,从spring容器中获取Bean和ServletContext

    public static Object getBean(String beanName){ ApplicationContext context = ContextLoader.getCurrent ...

  8. The method getJspApplicationContext(ServletContext) is undefined for the type

    type Exception report message Unable to compile class for JSP: description The server encountered an ...

  9. tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()

    JDK版本:jdk1.8.0_77 Tomcat 版本:apache-tomcat-7.0.47 异常重现步骤: 1.完成项目部署 2.启动Tomcat 异常头部信息:java.lang.NoSuch ...

  10. Spring以及SPringmvc相关问题: ServletContext -父子容器

    总结如下: 明确了Servlet规范中ServletContext的作用和意义.此外明确一个Tomcat中多个web应用,每个人web应用有唯一的一个ServletContext(全局上下文).[例子 ...

随机推荐

  1. es6箭头函数中this

    普通函数: $scope.$on('$stateChangeSuccess',function(){this.list = this.getList();}); 箭头函数: $scope.$on('$ ...

  2. Node.js GET/POST请求

    在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交. 表单提交到服务器一般都使用GET/POST请求. 我将为大家介绍 Node.js GET/POST请求. 获取GET请求内容 由于G ...

  3. 关于一些学习html和css的笔记

    一.Html简介 全写: HyperText Mark-up Language  译名: 超文本标识语言  简释:一种为普通文件中某些字句加上标示的语言,其目的在于运用标签(tag)使文件 达到预期的 ...

  4. Get IP Address in Android 4.0+

    在android2.3以下的系统中,可以使用如下的代码来获取Android系统的本地IP地址: [java]  private String getLocalIPAddress() throws So ...

  5. docker 源码分析 一(基于1.8.2版本),docker daemon启动过程;

    最近在研究golang,也学习一下比较火的开源项目docker的源代码,国内比较出名的docker源码分析是孙宏亮大牛写的一系列文章,但是基于的docker版本有点老:索性自己就git 了一下最新的代 ...

  6. 在 C++ 代码中使用 UE4 插件---Using a plugin in C++ code

    例如使用 CustomMeshComponent 插件 在Build.cs 文件 中 添加以下两行代码 如图可配置路径,可解决#include "CustomMeshComponent&qu ...

  7. GCD的其他方法

    1.栅栏函数 作用:控制线程的执行顺序 注:栅栏函数不能使用全局并发队列 -(void)barrier { //1.创建队列(并发队列) dispatch_queue_t queue = dispat ...

  8. MQTT实现长连接,IM最简单实例

    1,引入MqttSDK. 2, 头文件 #import "MQTTSession.h" //定义主题#define kTopic @"lichanghong"/ ...

  9. ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法

    ssh连接linux服务器只显示-bash-4.1#不显示路径时,我们只需要修改  ~/.bash_profile文件,如果不存在这个文件,那么新建一个,增加内容  export PS1='[\u@\ ...

  10. 转:GROUPING SETS、ROLLUP、CUBE

    转:http://blog.csdn.net/shangboerds/article/details/5193211 大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那 ...