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介绍和用法 的相关文章

  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的

随机推荐

  • 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