ServletContext介绍和用法

2023-11-11

1、介绍 ServletContext

ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象

2、用法

以下所有post方法都是都是注册于同一个servlet

    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>com.workhah.servlet.ServletContextTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

(1)getInitParameterNames 和 getInitParameter

  • 获取所有参数名称列表
    java.util.Enumeration getInitParameterNames()
  • 根据指定的参数名获取参数值
    java.lang.String getInitParameter(String name)

web.xml

    <context-param>
        <param-name>t1</param-name>
        <param-value>1</param-value>
    </context-param>
    <context-param>
        <param-name>t2</param-name>
        <param-value>2</param-value>
    </context-param>

servlet

 	@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取servletcontext
        ServletContext servletContext = getServletContext();

        /*
             获取所有参数名称列表
             java.util.Enumeration getInitParameterNames()
             根据指定的参数名获取参数值
             java.lang.String getInitParameter(java.lang.String name)
         */
        // 先获取所有全局配置参数名称
        Enumeration<String> names = servletContext.getInitParameterNames();
        // 遍历迭代器
        while(names.hasMoreElements()){
            // 获取每个元素的参数名字
            String parameName = names.nextElement();
            // 根据参数名字获取参数值
            String parameValue = servletContext.getInitParameter(parameName);
            // 打印
            System.out.println(parameName+"="+parameValue);
        }
    }

输出结果为:

t1=1
t2=2

(2)getMajorVersion 和 getMinorVersion

  • 返回此 servlet 容器支持的 Java Servlet API 的主要版本。
    int getMajorVersion()
  • 返回此 servlet 容器支持的 Servlet API 最小版本号。
    int getMinorVersion()
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取servletcontext
        ServletContext servletContext = getServletContext();

        /*
            返回此 servlet 容器支持的 Java Servlet API 的主要版本。
             int	getMajorVersion()
            返回此 servlet 容器支持的 Servlet API 最小版本号。
            int	getMinorVersion()
         */
        System.out.println(servletContext.getMajorVersion());
        System.out.println(servletContext.getMinorVersion());

    }

(3)getRealPath 和 getContextPath

  • 获取当前工程名字
    String getRealPath(String path)

  • 根据相对路径获取服务器上资源的绝对路径
    String getContextPath()

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取servletcontext
        ServletContext servletContext = getServletContext();
		// 页面显示内容
           resp.getOutputStream().write(("工程名字:"+ servletContext.getContextPath() + "\n" 
                + servletContext.getRealPath("/file/computer.png")
                ).getBytes());
    }

在这里插入图片描述

结果为:
在这里插入图片描述

(4)getRequestDispatcher

RequestDispatcher getRequestDispatcher(String name)
返回具有指定名字或路径的servletJSPRequestDispatcher。如果不能创建RequestDispatch,返回null。如果指定路径,必须以 “/” 开头,并且是相对于servlet上下文的顶部。这就是我们常说的请求转发

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取servletcontext
        ServletContext servletContext = getServletContext();
		// 请求转发到index.jsp(url不变)
        servletContext.getRequestDispatcher("/index.jsp").forward(req, resp);
    }

结果:
在这里插入图片描述

(5)getMimeType 和 getResourceStream

  • 返回指定文件名的MIME类型。典型情况是基于文件扩展名,而不是文件本身的内容(它可以不必存在)。如果MIME类型未知,可以返回null。 返回值有 text/plain、text/html、image/jpeg、image/png、application/json等等。
    String getMimeType(String fileName)
    了解更多MIME可以参考这里
  • 默认从web根目录下取资源,并以字节流的形式返回
    InputStream getResourceAsStream(String path)

具体实例点击这里

(6)setAttribute 和 removeAttribute 和 getAttribute

  • 增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。
    void setAttribute(String s,Object o)
  • 获取指定名称的属性的值
    Object getAttribute(String s)
  • 移除指定名称的属性
    void removeAttribute(String s)

servletContextsetAttributegetAttributeremoveAttributerequestsession的类似,只是生命周期不同,它在服务器关闭时周期才结束。其实servletContextapplication是一样的,就相当于一个类创建了两个不同名称的变量。两者的区别就是application用在jsp中,servletContext用在servlet中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ServletContext介绍和用法 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • STM32的RTC时钟及其相关寄存器

    1 什么是RTC时钟 RTC时钟本质上上一个定时器系统 但是其定时器的计数值最终是以2020 1 30 16 27 类似这样的形式呈现的 说白了就是它就是实时时钟 并且这个时钟不怕断电 断电后它在后备区继续计时 而后备区是有电池供电的 2
  • vscode使用remote-ssh连接远程服务器 报错:“过程试图写入的管道不存在”

    问题如题 网络上有很多解决 过程试图写入的管道不存在 的方法 笔者基本试过了一遍 也没能解决问题 这里不是指他们的方法没有用 只是能解决的问题可能不是我遇到的这种 我的解决方法是 修改配置文件的格式 就这么简单 这种格式才是正确的 从第二行
  • sqli-labs/Less-31

    欢迎界面和上一关差不多 所以我们还是使用双参数注入 首先判断第二个参数是否为数字型 输入如下 id 1 id 1 and 1 2 回显如下 所以属于字符型 然后判断是单引还是双引 输入如下 id 1 id 1 回显如下 正确回显了 所以不属
  • ^A在linux的处理

    这是hive的默认分隔符 用脚本awk或python可以把分隔符设置为 x01 在vim中选中时 用ctrl a来表示这个分隔符
  • 工业互联网+5G 发展策略研究

    本文首发于 邮电设计技术 边缘计算社区经过授权转发 摘要 工业互联网发展水平与一个国家的国际竞争力强相关 截至2020 年我国工业互联网发展初见成效 但商业模式还需要持续探索 首先探索工业互联网定义及发展情况 其次理清工业互联网与5G 关系
  • C++ DLUT 上机作业(四)

    文章目录 C DLUT上机作业 四 1 intArray 2 Goods 3 Cpoint 4 Account C DLUT上机作业 四 啥都不说 直接来 1 intArray 设计整型数组类intArray 实现若干数据的相关操作 包括构
  • React-实现循环轮播

    问题 写字体轮播的时候 不使用swiper库 使用top定位 让字体过渡上下移动 发现写成的效果就是每次播到最后一个元素后 只能突然展示第一个元素 失去了那种上下移的动过渡效果 ss 解决 import useRef useEffect u
  • K近邻思想解决字体反爬

    猫眼电影字体反爬 1 解决思路 1 1 获取对照组字体文件 按照不同字形字体的unicode得到文字与其坐标的对应关系形成可遍历的数据结构 然后处理成可计算的数组或者直接遍历出所有的坐标数据 1 2 再提取当前访问页面的自定义字体文件 取出
  • (CNN)卷积神经网络原理详解,大白话讲解卷积

    卷积到底在卷啥 卷积是什么 零基础入门神经网络的小白都会有这样的疑问 其实卷积很简单 卷积神经网络CNN 是一类包含卷积计算且具有深度结构的前馈神经网络 Feedforward Neural Networks 是深度学习 deep lear
  • 香农公式说明了什么_香农公式理解

    1948 年 香农 Shannon 用信息论的理论推导出了带宽受限且有高斯白噪 声干扰的信道的极限信息传输速率 当用此速率进行传输时 可以做到不出差错 用公式表示 则信道的极限信息传输速率 C 可表达为 C B log2 1 S N b s
  • 中小微企业如何选择网络品牌推广公司?

    有人认为品牌推广是大型企业的事情 中小微企业没有必要做品牌推广 口碑侠营销顾问则不以为然 口碑侠认为小微企业之所以还是小微企业就是因为没有做有效的品牌推广 不是他们不需要品牌推广 而是资金和团队还做不了成规模的品牌推广 如果有足够的条件开展
  • PTI:通过枢轴完成人脸投影

    paper PTI Pivotal Tuning for Latent based Editing of Real Images 2022 ACM TOG StyleGan 人脸编辑相关 人脸投影 paper code 在StyleGAN中
  • Qt Qml 多媒体播放视频(MediaPlayer)遇到的问题及解决方法

    文章目录 前言 一 视频无法播放的原因 1 目录结构 2 正确代码 二 绝对路径 相对路径 三 路径中的转义字符 测试版本 前言 Qml 多媒体播放视频开发过程中遇到的问题 记录一下 一 视频无法播放的原因 创建的Qt Quick Ui P
  • 分布式管理和集中式管理的优劣-----项目架构和配置分离

    模块化是不可逆转的趋势 模块化是不可逆转的趋势 面向接口编程的优势 集中式管理的优劣 分布管理的优劣 高内聚和低耦合 高内聚 低耦合 总结 现如今 在整个项目开发的过程中模块化以他独特的优势引领了一股项目架构潮流 灵活 可复用 后期易维护
  • 2023年使用率超高的10个Figma插件

    大家好 我是不知名设计师 l1m0 今天分享内容为 10个使用率超高的Figma插件 文末我还会为大家解答 Figma有汉化版吗 这个问题 埋个伏笔 接着往下看吧 Figma 相信屏幕前的大家都很熟悉了 作为一款功能超强大的设计工具 Fig
  • android 控件之checkbox自定义样式

    1 首先在drawable文件夹中添加drawable文件checkbox style xml
  • Unity人机交互—Input

    文章目录 键盘输入方法 鼠标输入方法 虚拟轴 按键 设置虚拟轴 按键 常用的移动方法 官方组件角色控制器CharacterController 属性 方法 自己写的移动脚本和鼠标控制视角 通过虚拟按键来实现移动 镜头跟随鼠标旋转 键盘输入方
  • 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定 解决方法

    1 关注 公众平台安全助手 2 进入 公众平台安全助手 点击右上角的用户图标 进入公众号信息界面 3 进入 公众号信息 界面后 点击右上角的 图标 打开更多选项 4 打开 更多选项 后 选择设置选项 进入设置 5 进入 设置 后 请关闭消息
  • [网络安全提高篇] 一二二.恶意样本分类之基于API序列和机器学习的恶意家族分类详解

    终于忙完初稿 开心地写一篇博客 网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但
  • ServletContext介绍和用法

    ServletContext介绍和用法 1 介绍 ServletContext 2 用法 1 getInitParameterNames 和 getInitParameter 2 getMajorVersion 和 getMinorVers