Servlet笔记(11):Servletcontext对象

1、什么是ServletContext
ServletContext是一个全局储存空间,随服务器的生命周期变化,

Cookie,Session,ServletContext的区别
Cookie: 存在于客户端的本地文本文件
Session: 存在于服务器的文本文件,一个客户端有唯一session
ServletContext: 存在于服务器,并开辟一块服务器区域,可以被所有客户端访问。
在这里插入图片描述
ServletContext对象通常也被称为context域对象。

Servlet对象之间可以通过ServlertContext对象来实现通讯。

当WEB容器在启动时,为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用并且它被所有客户端共享。
我们可以拓展场景,通常在咨询网站浏览时,会有客服弹窗,这就可以基于ServletContext进行通讯。

当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁。【即关闭浏览器客户端】

2、ServletContext使用方法

  • 获取ServletContext对象
//直接调取ServletContext对象
this.getServletContext();
//通过ServletConfig对象,调取ServletContext对象
this.getServletConfig().getServletContext();

ServletContext对象的结构

名字(String)值(Object)

操作方法
添加属性:boolean setAttribute(String name,Object obj)
得到值:Object getAttribute(String name)
删除属性:boolean removeAttribute(String name)

生命周期
ServletContext中的生命周期从创建开始,到服务器关闭结束。

使用实例
1.分别创建两个Servlet对象
servlet1.java

public class servlet1 extends HttpServlet{
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		ServletContext servletContext = this.getServletContext();
		//ServletContext servletCOntext = this.getServletConfig().getServletContext();
		servletContext.setAttribute("name","小明");
		out.println("将 name = " + servletContext.getAttribute("name")+"写入ServletContext");
	}
}

servlet2.java

public class servlet2 extends HttpServlet{
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		ServletContext servletContext = this.getServletContext();
		//ServletContext servletCOntext = this.getServletConfig().getServletContext();
		String name = servletContext.getAttribute("name");
		out.println("name = " + name);
	}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>servlet1</servlet-name>
        <servlet-class>servlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet1</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>servlet2</servlet-name>
        <servlet-class>servlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet2</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>
</web-app>

效果图
在这里插入图片描述
在这里插入图片描述

chrom浏览器

在这里插入图片描述

QQ浏览器

在这里插入图片描述
3、ServletContext应用

  • 多Servlet对象共享数据
  • 实现Servlet的请求转发

两种请求转发方法:
request对象转发

request.getRequestDispatcher("转发目的路径").forward(reqeust,response);

ServletContext实现请求转发

this.getServletContext().getRequestDispatcher("转发目的路径").forwaard(request,response);

配置Web应用初始化

<!--
init-param标签用于servlet配置初始化参数,通过ServletConfig对象获取参数
 -->
<servlet>
	<servlet-name>MyServlet</servlet-name>
	<servlet-class>MyServlet</servlet-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>utf-8</param-value>
	</init-param>
</servlet>

获取初始化参数

String encoding = this.getServletConfig().getInitParameter("encoding");

配置Servlet全局配置

<context-param>
	<param-name>name</param-name>
	<param-value>gavin</param-value>
</context-param>

4、利用ServletContext对象读取资源文件(比如properties文件)
读取资源文件要根据资源文件所在位置决定,有两种情况:
4.1 文件在WebRoot文件夹下,即Web应用的根目录。
假设Web根目录下【web文件夹下】有一个配置数据库信息的dbinfo.properties文件,配置了name和password属性,通过ServletContext读取文件:

//这种方法默认读取路径为Web应用的根目录
InputStream stream = this.getServletContext().getResourceAsStream("dbinfo.properties");
// 创建属性对象
Properties properties = new Properties();
properties.load(stream);
String name = properties.getProperty("name");
String password = properties.getProperty("password");
out.println("name="+name+";password="+password);

dbinfo.properties

name=root
password=root

**4.2 文件放置在src目录下 **
这时需要使用类加载器,其默认加载src根目录

InputStream stream = MyServlet.class.getClassLoader().getResourceAsStream("dbinfo.properties");

若文件放置在src的子文件夹中,则加载方式为

InputStream inputStream = MyServlet.class.getClassLoader().getResourceAsStream("com/properties/dbinfo.properties");

注意: ServletContext只有在读取web应用根目录下的文件,才能获取文件的全路径。

String path = this.getServletContext().getRealPath("/images/Servlet.jpg");

网站开发中的功能模块应用

网站计数器,网站在线用户显示,聊天系统等功能
若涉及不同用户共享数据,且数据量不打,且不希望占用数据库内存,可以考虑使用ServletContext实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zain_horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值