今天我们学习的是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");  //一般用属性Attribute方法存储数据

在其它的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");

//调用转发方法(将name属性转发到index.jsp) 以下采用任意方法即可

rd.forward(request, response);
//或者rd.include(request, response);

//等价于 request.getRequestDispatcher("/index,jsp").forward(request,response);将请求和响应转发到index.jsp的jsp文件中
 
    
注意: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);

}

转载于:https://www.cnblogs.com/yasepix/p/7452451.html

ServletContext的应用相关推荐

  1. ServletContext讲解

    怎么理解ServletContext呢? 你可以把它想象成一个公用的空间,可以被所有的客户访问,也就是说A客户可以访问D,B客户也能访问D,C客户也能访问D 使用ServletContext 如何得到 ...

  2. 8 ServletContext

    1 为什么需要ServletContext 技术 显示网站多少人在线,显示当前登录者是第几位登录者等信息. 2 什么是ServletContext 可以把它想象成一个服务器上的公共空间,每个用户都可以 ...

  3. Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】

    第一次自学springmvc的时候,老是报错Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml],郁闷的不要不 ...

  4. Servlet-监听器(ServletContext、Request、Session)

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/twilight_karl/article/details/73743391 ServletContextL ...

  5. ServletContext 与application的异同

    servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图.ServletContext实例是通过 getServletContext()方法获得的,由于H ...

  6. java servletcontext_Java ServletContext对象用法解析

    ServletContext对象: ServletContext类似字节码文件对象,在web创建的时候就自动生成了,并且是唯一的,跟随着项目和服务器共存亡了.通过这个对象,我们可以向里面存数据(键值对 ...

  7. Servlet—08—ServletContext; Servlet Config;

    Servlet Context: 1.问题: request解决了一次请求内的数据共享问题,  session解决了相同用户不同请求的数据共享问题,  那么不同的用户的数据共享问题怎么办呢? 2.解决 ...

  8. 上下文对象及servletContext接口

    上下文对象是web服务器上基于web应用的一个背景环境对象,上下文对象提供了一个同一web应用内不同资源间共享信息的场所. -------------------------------------- ...

  9. Java之旅(二)--- ServletContext

     什么是ServletContext?  WEB容器在启动时,它会为每一个WEB应用程序都创建一个相应的ServletContext对象.它代表当前web应用.通过使用这个对象,servlet能够 ...

  10. Web三大组件的注册——Servlet、Filter、Listener(监听三大作用域: ServletContext、HttpSession、ServletRequest )

    Web三大组件的注册 Servlet @WebServlet("/user.action") <servlet> </servlet> <servle ...

最新文章

  1. eslint 换行_javascript – 预期的换行符为“LF”,但在Eslint中使用gulp找到“CRLF”换行符...
  2. OpenStack Pike Minimal安装:三、镜像管理
  3. Unity3D架构之PureMVC
  4. iphone个系列尺寸_iPhone 12尺寸对比:又是真香的典范?
  5. [安卓基础] 006.打开另一个Activity
  6. 必要商城高级UED经理张不写:设计师如何规划职业方向
  7. 谷歌历史版本_《地图中的历史》,本书中的地图,我们为你找到了高清版本
  8. 数据库原理与应用(SQL Server)笔记 第七章 流程控制语句、系统内置函数
  9. 1006. 换个格式输出整数 (15)
  10. [Leetcode][第1002题][JAVA][查找常用字符][计数][HashMap]
  11. access vba代码大全_VBA 实践指南 -- VBA连接各种数据库
  12. 可编程led灯带原理_SCPSD-250-04-27派克真空压力传感器故障和工作原理
  13. 性能测试之性能监控技术
  14. centos www服务器文件unable create,Centos Vsftpd 无上传权限 (553 Could not create file)
  15. 虚拟主机支持ssl支持php7,虚拟主机支持https改造吗
  16. 盘点俄罗斯大神写的几款软件,你用过几个?最后1个是我的童年
  17. 【位操作笔记】位合并 通过掩码
  18. 浅谈Ambarella 的BOSS架构
  19. 程序人生 - 2020年杭州市积分入学实施办法权威解读
  20. 微信公众号-消息推送

热门文章

  1. 解决 react-router 中 history is 'undefined' 的问题
  2. 开源社群系统 ThinkSNS+ 0.7.4 版本发布
  3. sqoop遇到的问题
  4. Flex动态创建多个曲线图+柱形图
  5. PKU 1062 昂贵的聘礼
  6. JQuery input file 上传图片
  7. 我的Python学习笔记(四):动态添加属性和方法
  8. 项目案例:新闻发布系统---主题管理及页面新闻显示
  9. Json.net说法——(四)序列化错误处理
  10. C++常见谬误总结(1)