当前课程知识点:Web后端开发技术 > 第2章 Servlet技术基础 > 2.6 ServletContext接口 > 2.6.1 ServletContext接口
欢迎大家回来继续学习web后端
开发技术
这一小节我们将讲
Servlet
Context接口
Servlet
Context的接口是这样的
它又称为 Servlet的上下文
是servlet与servlet
容器之间通讯的接口
Servlet容器在启动的时候
它会为每一个 web应用创建一个
唯一的这样一个Servlet
Context对象
这一点大家一定要记住
这张图来说明
ServletContext
以及ServletConfig
之间的关系
下面我给大家解释一下
一个web应用程序
一个web应用服务器
它包含了Servlet容器
在Servlet容器当中
可能运行着多个 web应用
每一个web应用都是一个
ServletContext
在Servlet
Context
上下文的环境下
运行着各种各样的Servlet
对于每一个Servlet都有一个唯一的
ServletConfig与它相对应
这是Servlet
ServletConfig以及
ServletContext
之间的这种关系
那么如何在Servlet当中获得设备的Servlet
Context的对象
这个方法有这么两个
有这么两个
我们其中使用哪一个都是可以的
对于Servlet
Context接口
它所实现的功能可以分为这么三类
一类是实现与web应用相关的这些
方法的这种功能
第2类
实现与Servlet容器相关的方法
第3类
是与服务器相关的方法
下面我们逐一给大家讲解一下
首先说一下与当前外部应用相关的
方法
因为当前外部应用相关的方法可以
分为这么三大部分
第1部分是初始化参数
这句话的意思其实也是在告诉大家
对于一个web应用
可以做一些初始化工作
那么做初始化工作所使用的方法
就是这里面所提到的 get
Parameter
以及 getInit
ParameterNames
接下来这个方法是 web应用的
一些信息
比如获取context
path
也就是当前web应用的根路径
获取 servlet
context
name
也就是当前web应用的名称
等等
下面这组方法是关于在应用域内进行
属性的存和取的一些方法
属性的存取
实际上就是键值对就是key和void
那么就有Servlet的方法
就有ser的方法
就有get的方法
还有remove这样一些方法
Attribute就是属性的意思
这是与当前外部应用相关的三类方法
下面我们看这样一个事例
在这个事例当中
我们看到在Servlet当中通过get
ServletContext
得到应用上下文
然后通过他进一步得到
context
path
也就是应用的根目录
再去得到当前的应用的名称
然后打印出来
这里面大家就一定要区分开
路径和应用名之间的差别
我们看到这里面是斜线mooc
然后得到的跟路径是斜线mooc
应用的名就是mooc
下面我们演示一个使用应用
域属性进行存取
这个方法来实现网站访问技术的功能
我们来演示一下网站访问技术的这么
一个例子
那么这个网站访问技术的整体思路
就是我需要用一个全局变量
每当有一个用户访问我这个页面的时候
我全局变量就做一个增一的操作
那么全局变量我们可以存储在
ServletContext对象
当中
每次访问的时候给它取出来
然后给它做一个增一的操作就可以了
好
我们现在来看代码
首先我先建立一个叫做ContextAttributServlet这么
一个 Servlet
那么我们在doget的方法里面
去写相关的代码
首先我们先要有一个叫做
ServletContext的这么一个对象
好
那么这个对象可以通过附累的
get
ServletContext
对象可以拿到
好
我把它引入
我那个技术变量
假如说
是存在我的Servlet的
Context变量当中
它的属性名称就是Count
所以说我就可以通过count点
get和Attribute的方法
根据名称count
把这个值给他拿到
注意我这里是用的integer
为什么用integer
因为有可能第1次访问的时候
这个值是不存在的
那么这个值不存在
它就是一个空值
如果你要用普通的 int
它就会出错
我们用它的包装类integer
它是能够存储空值的
因此我们在这里需要判断一下
如果我们的count是等于空的
那么很显然这是第1次访问
我就把这count值给初始化成1
就可以了
那么否则肯定不是第1次访问
我们count就做一个加1的操作
或者大家这么写也是可以的
好了
那么 count自增完以后
我就需要把 count再重新设置
回去
context.set和
Attribute
我们的属性的名称叫count
我们这个值我们已经增益以后的
count值
好
那么紧接着我可以向页面当中输出了
所以还用我们的print
writer对象
Writer out
request.get
response
.get
Writer
好 然后out.printIn
当前网站访问次数
把我们count值
加起来就可以了
好
我们 context
Attribute的编码就
已经啊写完了
ContextAttributeServlet
我们是写在 chapter2
这个项目当中的大家要注意一下
所以说我们访问他敲回车
大家可以看到这里输出的是1
那么之所以出乱码是因为我这里出现
的中文
而我这里却没有设置我的中文的编码
方式
我们在第1节课的时候也跟大家说过
我们可以设置request点
set
character
encoding
是UTF-8
response
.set
content
Type
是text
html然后 charset=UTF
-8就可以了
但是大家已经可以看到这里已经访问
是一次了
对吧
如果再一刷新
就会显示的是两次
这会我们重启了
因为重启完以后它的基数就重新变
那么两次
那么同样我打开一个新的浏览器
即使不是这个浏览器
它也会继续的记数 大家看 敲
那么他就从3开始了
所以我们就可以通过 Servlet
的context的对象完成我们
网站的计数这么一个程序
与servlet容器相关的方法
这个方法主要包括获取 Servlet容器的
名称以及版本
以及获取 Servlet
容器所支持的
servlet的
API的主版本号
次版本号等相关的一些信息
还有一个就是记录日志的方法
因为服务器相关的方法使用
servletcontent接口
可以直接访问web
应用的静态资源
获取文件的MIME这种类型
也可以得到它的真实
存放的路径
这些方法在这个表格当中已经列出来了
我们下面简单介绍一下
第1个方法叫做
getRescurceAsStream
也就是说
将指定参数当中这个文件
通过这个方法得到的是一个输入流
第2个方法叫做get
resource
也就是说将指定参数所指定资源转化
为或者说得到的是一个url
类型的对象
第3个方法是用来获取一个文件的
真实的物理存在的这样一个路径
这个方法是非常有用的
下面这个方法是用来获取指定参数了
这个文件的
MIME类型的
下面我们看一个事例
那么这个事例就是使用
context接口相关的方法
来访问服务器上的图片
那么这个图片是存在于images下面
这个名称叫mypic.jpg文件
我们看一下相关的代码
在这里首先在Servlet当中
获取到设备的context
然后通过对象
调用
getResource
AsStream
得到当前的图片的输入字节流
然后它又使用另外一种方式就
getResource
去得到这个图片相对应的 url
这样一个对象
然后这个对象又进一步调用的
Open
stream
同样得到的是一个输入的字节流
在这里面分别他们各自调用的
available
available的方法
它的作用就是返回当前这个流当中的
长度来比较一下
它们两个是不是一样
这个代码的意思就是要比较通过两种
方式读
同样一个文件
它的大小
长度是不是一样
然后下面这个代码来演示
对应于这样一个文件
这是一个虚拟的路径
它的真实的路径是什么样的
就是通过getRealPath
然后下边是通过get
MIME type来返回
文件的mime类型的
这个是它的执行结果
我们看到通过两种方式访问的同样的
一个图片
它的长度是一样的
这个结果应该是一样的
不可能是不一样
然后我们看到这个图片的真实路径是
放在c盘
什么文件夹路径下面的
这个功能是非常有用的
比如我们从网上下载图片的时候
我们不希望直接下载的图片
我们就可以通过这种方式
把图片的真实路径读取到
然后再通过其他的方法将这个图片
信息返回给客户
然后这是文件的
MIme类型
好
本小节我们就讲到这里
-1.0 导学
--1.0.1 导学
-1.1 Web应用开发概述
--1.1.3 测试
-1.2 准备Java Web应用开发环境
--1.2.2 测试
-1.3 任务实现:Hello World Web项目
--1.3.2 测试
-1.4 小结
--1.4.1 小结
-本课程所有代码
--课程参考代码
-2.0 导学
--2.0.1 导学
-2.1 Servlet概述
--2.1.3 测试
-2.2 创建Servlet
--2,2,3 作业
-2.3 Servlet应用
--2.3.4 测试
-2.4 任务实现:某高校毕业生信息发布系统-注册与登录(Servlet版)
--2.4.3 测试
-2.5 ServletConfig接口
-2.6 ServletContext接口
-2.7 HttpServletRequest接口
--2.7.5 测验
-2.8 HttpServletResponse接口
--2.8.3 测试
-2.9 任务实现:某高校毕业生信息发布系统-简历添加
--2.9.1 任务实现:某高校毕业生信息发布系统-简历添加
-2.10 小结
-动画演示:Java Web应用服务器处理客户端请求的过程
-3.0 导学
--3.0.1 导学
-3.1 Cookie技术
--3.1.3 测试
-3.2 Session技术
--3.2.2 Session技术-Session技术应用购物车
--3.2.3 测试
-3.3 URL重写与隐藏表单域
--3.3.2 测试
-3.4 任务实现:某高校毕业生信息发布系统-简历修改
--3.4.1 任务实现:某高校毕业生信息发布系统-简历修改
-3.5 小结
--3.5.1 小结
-4.0 导学
-4.1 jsp概述
--4.1.2 测试
-4.2 脚本元素
--4.2.2 测试
-4.3 指令元素
--4.3.2 测试
-4.4 动作元素
--4.4.3 测试
-4.5 内置对象
--4.5.3 测试
-4.6 JavaBean
--4.6.3 测试
-4.7 任务实现:某高校毕业生信息发布系统-首页(JSP版)
--4.7.1 任务实现:某高校毕业生信息发布系统-首页(JSP版)
-4.8 小结
--4.8.1 小结
-5.0 导学
--5.0.2 测试
-5.1 el语法
--5.1.2 测试
-5.2 el隐含对象
--5.2.2 测试
-5.3 任务实现:某高校毕业生信息发布系统-学生详细信息展示
--5.3.1 任务实现:某高校毕业生信息发布系统-学生详细信息展示
--5.3.2 测试
-5.4 小结
--5.4.1 小结
-6.0 导学
--6.0.2 测试
-6.1 核心标签库
--6.1.5 测试
-6.2 任务实现:某高校毕业生信息发布系统-首页(JSTL版)
--6.2.1 任务实现:某高校毕业生信息发布系统-首页(JSTL版)
--6.2.2 测试
-6.3 小结
--6.3.1 小结
-7.0 导学
--7.0_导学
-7.1 过滤器
--7.1.3 测试
-7.2 监听器
--7.2.1.1与ServletContext相关的监听器
--7.2.4 测试
-7.3 任务实现:某高校毕业生信息发布系统-单态登录
--7.3.1 任务实现:某高校毕业生信息发布系统-单态登录
--7.3.2 测试
-7.4 小结
--7.4.1小结
-8.0 导学
--8.0_导学
-8.1 JDBC API
--8.1.2 测试
-8.2 JDBC API访问MySQL基本步骤
--8.2.2 测试
-8.3 任务实现:某高校毕业生信息发布系统-注册与登录
--8.3.1 任务实现:某高校毕业生信息发布系统-注册与登录(JDBC版)
--8.3.2 测试
-8.4 小结
--8.4.1小结
-9.0导学
--9.0导学
-9.1 技术准备
--9.1.5 测试.
-9.2 系统设计
-9.3 系统实现
-9.4 小结
--9.4.1小结







