servletContext 对象的解释

news2024/12/23 1:21:02

大家好,今天来分享一下servletContext 作用

关于 servletContext 对象, 他代表是整个web 项目,他可以和servlet 或者程序的容器进行通信

同时也可以管理web项目

当一个web项目当中有很多servlet, 那这些servlet之间需要通信
就要使用到servletContext 对象来负责

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在java文件夹下

package test02;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class FirstServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       // super.doPost(req, resp);
        System.out.println("你好");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //    super.doGet(req, resp);

    }
}

设置tomcat

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

会自动跳出这个页面

在这里插入图片描述

servletContext 对象

就是一个web容器(像tomcat)在启动的时候,每一个web应用都有一个servletContext 对象,负责管理整个web容器,它也表示当前的web应用

// this.getInitParameter() 初始化参数
//this.getServletConfig() servlet 配置
//this.getServletContext() servlet上下文

这是截图:(以及它具体的摆放位置)

在这里插入图片描述

这几个属性百度上都有

this.getServletContext()
是我们今天的关键

servletContext 对象主要的功能:

一. 数据共享(可以让你在一个servlet当中获取到另一个servlet当中的数据)

这句话可能不太好懂

可以看前面的博客

在这里也可以说一下,单个的servlet程序创建过程

  1. 在idea当中新建一个webapps模板的maven项目(这个不强求,只是为了方便)

  2. 导入相关依赖

  3. 写一个类,例如FirstServlet,让他继承HttpServlet 这个类

  4. 写对应的方法(dopost,doget 这两个)

  5. 在web.xml 文件中进行注册
    在这里插入图片描述

注意看它的位置

我们要在web.xml 里面去进行注册

这是在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"
         metadata-complete="true">
<!--    注册servlet-->
    <servlet>
        <servlet-name  >hello</servlet-name>
        <!--        可以随便写,就是一个别名-->
        
        <servlet-class>test02.FirstServlet</servlet-class>
<!--        这里一定要指向我们自己刚才写的类,写清楚它所在的具体路径-->
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
        <!--    这是配置它的请求路径-->
    </servlet-mapping>



</web-app>

完成之后这个web.xml 的文件就不需要动它了

servlet的代码部分也完成了

接下来我们要配置tomcat服务器

idea配置tomcat服务器看我这个就可以了

接下来我们启动tomcat ,让tomcat把我们的servlet程序在浏览器上进行展示

在这里插入图片描述

就是这样

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

到这里,我们一个最简单的servlet 程序 就好了

这就是一个单个的servlet程序的创建过程

然而,在一个项目当中,可以有多个servlet程序(只需要重复上面的操作就可以了)

在这里有一个`注意点

就是一个web.xml 文件当中可以同时注册多个servlet程序

在一个项目当中也不会只有一个servlet程序

我们今天要说的这个servletContext 对象就是用来管理各个servlet程序

在这里插入图片描述

也可以全局(也就是架构的角度上来看),就是这个样子

再说的白一点,你想创建多少个servlet程序 ,就在web.xml 这个文件里面注册多少个就可以了

接下来,我们看一下

package test02;

import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class FirstServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       // super.doPost(req, resp);

       ServletContext context=this.getServletContext();    //上下文
        String username = "帅哥";    //这个赋值为中文
       context.setAttribute("user",username);    //将赋值放到相应的对象当中

      //这个我们写的一个 ServletContext实例
      //在这里做个演示

//我们在这个把context   对象放到这个类里面



//我们就相当于在这个类里写了数据,FirstServlet这个类是一个servlet程序

      
    
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);

    }
}
`

接下来再写一个类(它属于另外一个servlet程序)

在这里插入图片描述

这个类创建好了之后,啥也不用管,先让它继承HttpServlet 这个类

之后写dopost ,doget 这两个方法

package test02;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     //   super.doGet(req, resp);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   //     super.doPost(req, resp);
    }
}

在SecondServlet这个类里获取FirstServlet的context所设置的数据

package test02;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       // super.doGet(req, resp);
        ServletContext context =this.getServletContext();
        String username ="帅哥";
        context.setAttribute("username",username);
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("名字" +username);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       // super.doPost(req, resp);
    }
}

在web.xml文件当中对SecondServlet 进行注册

  <servlet>
        <servlet-name  >hello2</servlet-name>
        <servlet-class>test02.SecondServlet</servlet-class>
<!--        这个是有关于SecondServlet的注册-->

    </servlet>
    <servlet-mapping>
        <servlet-name>hello2</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>

完整的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"
         metadata-complete="true">
<!--    注册servlet-->
    <servlet>
        <servlet-name  >hello</servlet-name>
        <servlet-class>test02.FirstServlet</servlet-class>

    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/02</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name  >hello2</servlet-name>
        <servlet-class>test02.SecondServlet</servlet-class>
<!--        这个是有关于SecondServlet的注册-->

    </servlet>
    <servlet-mapping>
        <servlet-name>hello2</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>


</web-app>

之后启动Tomcat服务器
在这里插入图片描述

在这里插入图片描述

servletContext 对象赋予的数据是在FirstServlet类

然而,servletContext 对象的取值与访问工作被放在了SecondServlet类当中

*FirstServlet类这个类和SecondServlet  这个类属于两个不同的servlet程序*

(这一条是重点)

这个小案例就是证明,servletContext 对象具有数据共享的特征

好了,有关于servletContext 对象的解释就到这里了,谢谢大家

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二证券|六大券商热议“第三支箭”:再融资重启修复市场预期

房地产利好方针接连出台&#xff0c;“第三支箭”为商场再添强心针。上星期&#xff0c;证监会决定在房地产股权融资方面调整优化五项办法。上市房企纷繁呼应&#xff0c;已有近10家房企火速筹划再融资。 时隔多年&#xff0c;监管再度重启房企股权融资&#xff0c;对房地产商场…

Java搭建宝塔部署实战基于RuoYi开源博客管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的RuoYi开源博客管理系统源码&#xff0c;是一个朋友发来给我&#xff0c;让我帮他测试怎么在宝塔搭建部署的&#xff0c;顺便录制出一个视频教程出来&#xff0c;搭建的方法还是比较简…

【基础算法】几种特殊数(素数、公约数、完全数、亲密数) C++实现

●素数 素数又称为质数&#xff0c;它指在一个大于1的自然数中&#xff0c;除了1和它自身外&#xff0c;没法被其他自然数整除的数。比1大&#xff0c;但不是素数的数称为合数。0和1既不是素数&#xff0c;也不是合数。因为素数的分布没有明显的规律&#xff0c;所以在程序中一…

争议不断的AI绘画,如今成为了顶流?

今年以来&#xff0c;AIGC迅速崛起。所谓AIGC&#xff0c;即AI-Generated Content&#xff0c;指的是利用人工智能来生成内容&#xff0c;被认为是继专业产出内容&#xff08;PGC&#xff09;、用户产出内容&#xff08;UGC&#xff09;后的新型内容创作方式。不久前掀起热议的…

「小白学Python」Windows安装Python

前言 Python下载地址 https://www.python.org/ Python下载 打开上面的链接&#xff0c;打开 Python 的下载页面&#xff0c;如下图所示&#xff1a; 我们把鼠标放到 Downloads 上&#xff0c;然后点击 Windows&#xff0c;此时界面如下图所示&#xff1a; 这里&#xff0c;我…

使用python批量的转换图片的格式并保存

使用cv2.dnn实现GoogleNet图像分类 Face-recognition实现人脸识别 Opencv实现信用卡识别 Opencv实现停车位识别 DlibOpencv库实现疲劳检测 Dlib库实现人脸关键点检测&#xff08;Opencv实现&#xff09; OpencvYOLO-V3实现目标跟踪 YOLO-V3实时检测实现&#xff08;open…

str(n)cpy的注意事项以及memset的简单使用

目录 strcpy strncpy memset 前言&#xff1a;因为C语言不能像C的string那样重载、等运算符&#xff0c;所以C语言提供了用于字符串拷贝的函数strcpy与strncpy&#xff0c;但是这两个函数都存在着一些问题&#xff1b; 我们需要先知道&#xff0c;字符串的结束标志是\0&…

五年数据库专家,带你深入高性能 MySQL 架构系统,不要等到面试再追悔莫及

MySQL 作为互联网中非常热门的数据库&#xff0c;在高并发业务场景下&#xff0c;一条好的 MySQL 语句能为企业节省大量的运作时间和成本&#xff0c;这也是为何互联网大厂面试官最爱考察数据库底层和性能调优的原因。因此&#xff0c;了解其底层原理和架构的设计非常重要&…

2022年全球城市变迁研究报告

第一章 全球城市概述 全球城市 (Global City)&#xff0c;又称为世界城市 (World City)、国际大都市或国际都会城市&#xff0c;是指在财富、社会、经济、文化及政治层面直接影响全球事务的城市。近年来&#xff0c;随着全球化的扩张&#xff0c;城市文明与软实力的影响达到鼎…

redis的key过期事件不建议实现延时消息的原因

官网的解释 https://redis.io/docs/manual/keyspace-notifications/#timing-of-expired-events 简单的意思就是不能保证时效性&#xff0c;key过期事件可能会往后推个几分钟才触发&#xff0c;特别是数据量越来越大的时候。 而且一旦客户端处理失败&#xff0c;这个事件也不…

Linux 将 /home 目录与 / 根目录磁盘合并

1. Linux 下的 /home 目录与 / 目录 一般情况下进入 Linux 系统下的 / 目录&#xff0c;会看到如下目录列表。 [rootlocalhost /]# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var可以看到其中包含 home 目录&…

SpringBoot实现WebSocket

一、什么是websocket WebSocket是HTML5下一种新的协议&#xff08;websocket协议本质上是一个基于tcp的协议&#xff09; 它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通讯的目的 Websocket是一个持久化的协议 二、新建SpringBoot工…

STM32读保护的解除和出现的原因,使用串口和ST-LINK Utility解除读保护

STM32读保护的解除和出现的原因&#xff0c;使用串口和ST-LINK Utility解除读保护STM32读保护读保护保护出现的现象出现的原因读保护解决方法1、重新下载CH340驱动2、FlyMcu串口下载软件接触读保护使用STM32 ST-LINK Utility软件解除读保护注意STM32读保护 读保护保护出现的现…

4-(1,2,2-三苯基乙烯基)苯甲醛;​CHO醛基偶联AIE材料

中文名 4-(1,2,2-三苯基乙烯基)苯甲醛 英文名 4-(1,2,2-triphenylvinyl)benzaldehyde 4-(1,2,2-三苯基乙烯基)苯甲醛物理化学性质 分子式 C27H20O 分子量 360.455 质量 360.151428 AIE聚集诱导发光材料的特点&#xff1a; 1.在固态下有强发光特性&#xff08;粉末或高浓度&am…

【Linux03-基本工具之GCC】Linux下的C语言编译器

前言 接上篇&#xff0c;继续学习基本工具。 三、gcc 是什么 Linux下的C语言编译器&#xff08;C的编译器是g&#xff0c;用法选项基本一样&#xff09;。 既然是编译器&#xff0c;我们就再来加点餐…… 链接其实分为两种类型&#xff1a;静态链接和动态链接&#xff0…

内切相减原理绘制CAD图形

CAD中的内切相减的原理你们知道是什么意思吗&#xff1f;这个就需要用CAD实际图形的绘制过程来理解了&#xff0c;这个图形就用到了这个&#xff0c;还用到了CAD直线、修剪、圆等命令共同绘制出来。 目标图形 操作步骤 1.使用CAD直线命令绘制一条长度30的垂直直线AC&#xff…

自定义 HandlerMethodArgumentResolver 怎么和默认HandlerMethodArgumentResolver进行隔离的?

工作中&#xff0c;想对一些参数进行非空默认值的操作。 DefaultValueIfNull("1000") 这个就是&#xff0c;如果为null&#xff0c;那么就默认值填1000。 操作起来。 1.自定义HandlerMethodArgumentResolver Component public class DefaultValueIfNullResolver…

seata-server-1.5.2的部署

使用的是nacos和mysql数据库&#xff0c;简单部署在Win10上&#xff0c;Linux上配置修改相同&#xff0c;启动命令不同。 找到 seata-server-1.5.2\seata\conf目录下的application.yml和application.example.yml 编辑 application.yml&#xff0c;原始版本如下&#xff1a; s…

RocketMq: Windows环境-单机部署和伪集群、集群部署

关于默认端口 broker的默认端口有3个,10911, 10912, 10909。 10911是remotingServer使用的监听端口,remotingServer主要处理以下三类消息: producer发送的消息 conumser在消费失败或者消费超时发送的消息 consumer拉取消息10912是主broker用于监听从broker请求…

制作路由器openwrt安装及配置

Openwrt软路由安装配置1、 Openwrt软路由设备信息&#xff1a; <1>登录信息&#xff1a; IP&#xff1a;10.4.1.1 账号&#xff1a;root<2>设备配置&#xff1a; 主机名 Openwrt 型号 ASUSTeK COMPUTER INC. Z9PA-U8 Series CPU 型号 Intel(R) Xeon(R) …