今天我们学习的是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);

}

最新文章

  1. cocos2d-x事件EventListenerTouchOneByOne没反应
  2. Android开发环境搭建
  3. Linux上成功编译CoreCLR源代码
  4. FIR数据广播结构-提高时钟速率
  5. 对石家庄铁道大学官网UI设计的分析
  6. Mac下的利器们介绍
  7. Java SE7新特性之try-with-resources语句
  8. CentOS7 发布 ASP.NET MVC 4 --- mono 4.6.0 + jexus 5.8.1
  9. C# 多线程基础
  10. 如何设置win7系统的文件夹为系统文件,从而隐藏文件夹
  11. 基于 Java 2 运行时安全模型的线程协作--转
  12. Blacksmith test
  13. SQL集合运算 差集 并集 交
  14. SQL server 数据库 ——聚合函数(一列 多行,值类型)
  15. 解决:mysql is blocked because of many connection errors;
  16. cocos2d-x-3.x 学习总结(一)
  17. Python--面向对象初识
  18. python面试题整理
  19. Windows 10 +VS2019 编译OpenCV 4.1.0
  20. 【转】vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的

热门文章

  1. Jquery基础(动画效果的轮播图特效)
  2. iframe在iphone手机上的问题
  3. http中长连接和websocket的长连接的区别
  4. [PAT] A1018 Public Bike Management
  5. PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
  6. 修改testlink上传文件大小
  7. stun/turn服务器部署
  8. Vue.js_devtools_5.1.0.zip【需要的可自行下载】
  9. LaTeX技巧006:使用pdfLaTeX时,添加PDF文件属性的方法
  10. 初识压缩感知Compressive Sensing