今天我们学习的是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. VB6.0对鼠标滚轮不支持的解决方法[转]已经测试work

    今天要修改一个老DLL文件,安装了vb6,用起来很不爽. VB6编辑器 和 VBA编辑器 (Office 中的VB编辑器)都不支持鼠标滚动. 但 MS 已经提供了补丁http://download.m ...

  2. C# 跨线程操作无效

    提示此错误的原因就是控件由主线程创建,在另一个线程进行操作时就会被阻止,防止数据间随意篡改. 如果一定要跨线程作业,如进度条或状态显示等,基本有三种方法解决: 1.Control.CheckForIl ...

  3. 关于MVC

    MVC,或多或少都有听说过.这个模式在客户端程序里面比较常见.以前有人老说mvc是什么设计模式之类.至少我理解的不是.我觉得 MVC是一种模块划分方法.根据它,我们可以快速地划分单独某个模块.比如排行 ...

  4. bzero函数

    函数原型:void bzero(void *s,int n) 作用:bzero函数的作用是将s指针指向的地址的前n个字节清零. 头文件:#include <string.h> eg.

  5. Visual Studio 编译项目失败,提示找不到文件

     博客地址:http://blog.csdn.net/FoxDave 今天碰到了一个蠢问题,虽然咱们正常情况下是遇不到的,但这确实是个应该注意的地方,所以简单记录一下. Visual Studio ...

  6. JAVA ,Map接口 ,迭代器Iterator

    1.    Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...

  7. C++指针比较的问题

    在C++里面,指针的比较是要保障type-safe的,也就是说,这两个指针必须是convertible的:从一个指针能够直接转换到另一个指针(有中间路径不算,不然都往void*转没完没了),顺序不限 ...

  8. swift项目中使用OC/C的方法

    假如有个OC类OCViewController : UIViewController类里有两个方法 //swift调用oc或c的混编是比较常用的,反过来的调用很少.这里只写了swift调用oc和c的方 ...

  9. Unity Sprite转Prefab

    新项目使用Unity5.X,遇到了一些问题,其中就有Sprite的管理更新问题,查了一些资料,Mono推荐的是转为Prefab处理. 看了一些国外同行的处理方法,分析了一个编辑器插件脚本.学到了一些技 ...

  10. 使用POSIX正则库匹配一行中多个结果

    正则匹配与正则表达式是什么东西我就不说了,在这里说下POSIX这个c语言正则库在对字符串进行正则匹配时取出多个结果的问题. 首先简单说明下POSIX正则库的几个函数和使用方法 第一个函数:int re ...