ServletContext理解学习

1.ServletContext原理
ServletContext简介:
Tomcat启动的时候,需要识别webapps下的各个WEB应用,识别各个WEB应用的同
时为*每个WEB应用创建对应的对象ServletContext*,**一个WEB应用对应一个
ServletContext.**每个ServletContext中都有一个很大的MAP,并且tomcat在启动之初就向
这个MAP中放入了大量的键值对的数据.当然我们也可以通过程序向这个大的MAP中
放入键值对的数据.

注意:一个web应用对应唯一的一个ServletContext对象

ServletContext生命周期
同整个web应用的生命周期一致

在这里插入图片描述

ServletContext的作用

1_如何获取ServletContext对象

ServletContext servletContext=getServletContext();

通过观察:
SevletContext中已经存放了很多键值对的数据
全局的WEB.xml+当前WEB的web.xml
当前WEB路径

2_多个Servlet之间共享数据 attribute:属性

由于一个WEB应用只有一个ServletContext对象,当我们在访问服务端的Servlet时,都可以在Servlet中获取到当前应用唯一的ServletContext对象,所以可以利用ServletContext对象来实现共享数据.

ServletContext.setAttribute(name, object);

向ServletContext中的MAP设置键值对的数据:键名是字符串类型,值为Object类型

ServletContext.getAttribute(name);

从ServletContext中的MAP获取数据,通过键名获取对应的值: 返回类型为Object

ServletContext.getAttributeNames();

从ServletContext中的MAP获取MAP中所有的键名,返回一个枚举类型

ServletContext.removeAttribute(name);

从ServletContext中的MAP通过键名移除对应的值

3_获取到WEB项目下指定资源

WEB项目的运行位置和源码位置不在同一个位置,有时候我们需要获取到WEB项目在
运行过程中,指定资源的真实路径或者指定资源的输入流,此时可以通过ServletContext来获取?为什么可以获取到?因为ServletContext里存放了当前web项目的路径等信息.

String realPath=
    ServletContext.getRealPath("/WEB-INF/conf/conf01.properties")
获取服务端指定目录下指定资源/目录的真实路径

InputStream is=
    ServletContext.getResourceAsStream("/WEB-INF/conf/conf01.properties")
获取服务端指定目录下指定文件的输入流对象

4_获取到整个WEB全局的配置信息

我们之前在WEB中是为Servlet配置过键值对的数据,这些数据只能在当前的Servlet中获取到,如果希望配置一些参数,这些数据可以在所有Servlet都可以获取到,此时我们可以为当前应用配置全局的参数信息.配置方式如下:

<!-- 全局的配置参数:所有的Servlet都可以获取到的	
       局部的Servlet配置参数:当前的Servlet可以获取到
   -->
  <context-param>
    <param-name>username</param-name>
    <param-value>mary</param-value>
  </context-param>
  <context-param>
    <param-name>password</param-name>
    <param-value>1234</param-value>
  </context-param>

    init:初始化   parameter:参数
ServletContext.getInitParameter(name);

ServletContext.getInitParameterNames()

5_获取到文件的mime类型

我们每次向客户端响应的内容类型可能是不一样的.在讲解HTTP协议那天,我们通过观察网络部分,发现如果本次响应的内容类型是一个HTML网页,那么在contentType消息头中对应的值是:text/html;如果如果本次响应的内容类型是一个css文件.有时候用户会下载我们服务端的不同资源,为了让浏览器更好的识别返回到客户端的内容类型,我们要设置一下本次响应的内容类型,但问题是:计算机业界各种类型的文件是很多的,我们怎么知道应该如何设置本次响应内容类型呢?就可以通过如下的API:

String value=ServletContext.getMimeType("333.avi");
ServletContext在tomcat/conf/web.xml中,根据文件后缀来查找本次响应内容是什么.

Servlet上下文:
ServletContext相当于横跨在tomcat和我们自己写的Servlet中间的一个对象. 我们可以
在Servlet中通过ServletContext(Servlet上下文)获取到tomcat提供一些功能.
Tomcat通过识别各个ServletContext管理各个WEB应用下的Servlet

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值