「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战」
什么是ServletContext
Web容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext对象,这个对象代表当前Web应用。并且它被所有客户端共享(比如你在淘宝登陆了,那你的登陆信息会被带到很多页面,就是跳到其他页面发现也是登陆上的)。
ServletContext的应用
共享数据
多个Servlet通过ServletContext对象实现数据共享
- 添加属性:
setAttribute(String name, Object obj);
- 得到值:
getAttribute(String name)
,这个方法返回Object - 删除属性:
removeAttribute(String name)
测试:
首先创建一个放置数据的类
1 | java复制代码package com.cheng.servlet; |
注册Servlet
1 | xml复制代码<servlet> |
然后创建一个接收数据的类
1 | java复制代码package com.cheng.servlet; |
注册Servlet
1 | xml复制代码<servlet> |
启动Tomcat开始测试:
1.启动HelloServlet放置数据到ServletContext中
2.启动GetServlet从ServletContext中获得数据
获取配置的初始化参数
在web.xml里配置的初始化参数可以用getInitParameter()
方法获取
1 | xml复制代码 <context-param> |
写一个实现类
1 | java复制代码package com.cheng.servlet; |
注册Servlet
1 | xml复制代码 <servlet> |
运行Tomcat,查看结果
请求转发
RequestDispatcher 代表请求的派发者。
Forward是指内部转发。当一个Servlet处理请求的时候,它可以决定自己不继续处理,而是转发给另一个Servlet处理。
例如,我们已经编写了一个能处理/hello3
的ServletDemon03
,继续编写一个能处理/hello4
的ServletDemon04
,ServletDemon04
在收到浏览器的请求后,它并不自己发送响应,而是把请求和响应都转发给路径为/hello3
的ServletDemon03
,后续请求的处理实际上是由ServletDemon03
完成的。这种处理方式称为转发(Forward)
流程图如下所示:
编些一个实现请求转发的实现类
1 | java复制代码package com.cheng.servlet; |
注册路径为/hello4的servlet
1 | xml复制代码 <servlet> |
注册路径为/hello3的servlet
1 | xml复制代码<servlet> |
启动Tomcat查看转发结果
==注:转发是在Web服务器内部完成的,对浏览器来说,它只发出了一个HTTP请求,浏览器的地址栏路径仍然是/hello4,浏览器并不知道该请求在Web服务器内部实际上做了一次转发。==
读取资源文件
类路径:即发布到Tomcat服务器后的ClassPath路径,在classes目录下
Properties可以用来保存属性集(类似Map, 以键值的形式保存数据,不同的是Properties都是String类型的)。这个类的优势是可以从流中获得属性集,或者把属性集报错到流中。
获取配置文件的信息
1 | properties复制代码username=root |
实现类
1 | java复制代码package com.cheng.servlet; |
注册servlet
1 | xml复制代码<servlet> |
实现
本文转载自: 掘金