Servlet如何读取Web资源文件?【操作演示】
在实际开发中,有时候可能会需要读取Web应用中的一些资源文件,比如配置文件,图片等。为此,在ServletContext接口中定义了一些读取Web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于Web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。表3-5中列举了ServletContext接口中用于获取资源路径的相关方法,具体如下:
ServletContext接口的常用方法

了解了ServletContext接口中用于获得Web资源路径的方法后,接下来通过一个案例,分步骤演示如何使用ServletContext对象读取资源文件,具体如下:
(1)创建一个资源文件。在chapter03项目中右击src目录,选择【New】—>【Other】选项,进入创建文件的界面,如图3-40所示。

新建文件的界面单击图3-40所示的【Next】按钮,进入填写文件名称的界面,如下图所示。

填写文件名称的界面在上图中,【File name】文本框中的内容为资源文件的名称,在此,将创建的资源文件命名为itcast.properties,并且选择存放的目录为src目录。单击【Finish】按钮,完成配置文件的创建。在创建好的itcast.properties文件中,输入如下所示的配置信息:
Company= itcast
Address=Beijing
需要注意的是,Eclipse中src目录下创建的资源文件在Tomcat服务器启动时会被复制到项目的WEB-INF/classes目录下,如下图所示。

WEB-INF/classes目录
(2)编写读取itcast.properties资源文件的Servlet。在cn.itcast.servlet包中创建一个名称为TestServlet06的Servlet类,该类的实现代码如文件3-9所示。
文件TestServlet06.java
packagecn.itcast.servlet;importjava.io.*;importjava.util.Properties;importjavax.servlet.*;importjavax.servlet.http.*;publicclassTestServlet06extendsHttpServlet{publicvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8");ServletContext context =this.getServletContext();PrintWriter out = response.getWriter();//获取相对路径中的输入流对象InputStream in = context.getResourceAsStream("/WEB-INF/classes/itcast.properties");Properties pros =newProperties();pros.load(in);out.println("Company="+ pros.getProperty("Company")+"<br>");out.println("Address="+ pros.getProperty("Address")+"<br>");}publicvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{this.doGet(request, response);}}
在文件3-9中,使用ServletContext的getResourceAsStream(String path)方法获得了关联itcast.properties资源文件的输入流对象,其中的path参数必须以正斜线“/”开始,表示itcast.properties文件相对于Web应用的相对路径。
(3) 启 动Tomcat服 务 器 , 在 浏 览 器 的 地 址 栏 中 输 入地址“http://localhost:8080/chapter03/TestServlet06”访问TestServlet06,浏览器的显示结果如图3-43所示。

运行结果从图3-43中可以看出,itcast.properties资源文件的内容被读取出来。由此可见,使用ServletContext可以读取到Web应用中的资源文件。
(4)有的时候,开发者需要获取的是资源的绝对路径。接下来,对文件3-9TestServlet06.java进行修改,通过使用getRealPath(String path)方法获取资源文件的绝对路径,修改后的代码如文件3-10所示。
文件3-10TestServlet06.java
packagecn.itcast.servlet;importjava.io.*;importjava.util.Properties;importjavax.servlet.*;importjavax.servlet.http.*;publicclassTestServlet06extendsHttpServlet{publicvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{PrintWriter out = response.getWriter();ServletContext context =this.getServletContext();//获取文件绝对路径String path = context.getRealPath("/WEB-INF/classes/itcast.properties");FileInputStream in =newFileInputStream(path);Properties pros =newProperties();pros.load(in);out.println("Company="+ pros.getProperty("Company")+"<br>");out.println("Address="+ pros.getProperty("Address")+"<br>");}publicvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{this.doGet(request, response);}}
在文件3-10中,使用ContextServlet对象的getRealPath(String path)方法获得itcast.properties资源文件的绝对路径path,然后使用这个路径创建关联itcast.properties文件的输入流对象。
(5)启动Tomcat服务器,在浏览器的地址栏中再次输入地址“http://localhost:8080/chapter03/TestServlet06”访问TestServlet06,同样可以看到图3-43所显示的内容。
相关文章:

Servlet如何读取Web资源文件?【操作演示】
在实际开发中,有时候可能会需要读取Web应用中的一些资源文件,比如配置文件,图片等。为此,在ServletContext接口中定义了一些读取Web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于Web应…...

[ vulhub漏洞复现篇 ] Drupal 远程代码执行漏洞(CVE-2019-6339)
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

flex-shrink和felx-grow
本文就是简单的介绍下flex-shrink和felx-grow的作用和计算方式吧;关于这个介绍也是很多;flex-shrinkflex-shrink是flex布局中的一种方式,简单来说,就是当布局大小小于容器大小的时候,使用flex-shrink能够按照一定的比例…...

将HTTP接口配置成HTTPS
一、使用Java的keytool.exe程序生成本机的TLS许可找到Java的jdk目录进入bin默认安装路径C:\Program Files\Java\jdk1.8.0_91\bin 进入命令面板,在bin的路径栏中输入cmd敲击回车即可使用keytoolkeytool -genkeypair -alias tomcat_https -keypass 123456 -keyalg RSA…...
YOLOV5报错解决办法
🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓YOLOV5报错解决办法,做好准备了么,那么开始吧。 🌲🌲🐴🐴 1.在pycharm终端使用pip install…...

java final关键字 详解
概述:作用:细节:演示:总结:一、概述 : final [ˈ faɪnl],最终的,最后的,决定性的,不可改变的。final作为Java中的一个关键字可以用来修饰类,方法,…...

Vbs_To_Exe制作简易exe程序
文章目录一、准备vbs脚本文件二、工具打包exe一、准备vbs脚本文件 新建一个文本文档 复制下面代码到文本文档中 Set speech CreateObject("SAPI.SpVoice") speech.Speak "l love you!"修改文本后缀为.vbs。编码选择ANSI(解决中文乱码问题&am…...

AI制药 - TMScore(US-align)、RMSD、Sequence 源码
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/129125467 参考文档:Nature Methods | 蛋白、RNA、DNA及其复合物结构的比对算法US-align 官网地址:https://zhanggroup.org/US-align/ TMScore TMScore,…...
关于个人的经历
简介 我是一个意外接触微机技术的五年专生(前三年寄读一个中专,后两年回大专学校),2020年中考失利,以高中线上30分去了现在所在五年专,专业是软件,目前个人已过程序员,网管,信息处理员ÿ…...
设计在单链表中删除值相同的多余结点的算法(包括指针的引用的知识点)
1 C中指针与引用的区别 引用相当于起别名int m; int &n m;n 相当于 m 的别名(绰号),对 n 的任何操作就是对m的操作。 所以 n 既不是m的拷贝,也不是指向 m 的指针,其实n就是 m 它自己。 引用的注意事项ÿ…...

100份简历才找一个合适的,2023,软件测试岗位饱和了吗?
各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的…...

(三十七)vue 项目中常用的2个Ajax库
文章目录axios实现vue-resource实现上一篇:(三十六)Vue解决Ajax跨域问题 先看一个github搜索案例 有一个搜索框,输入相关用户名,就能模糊搜索出用户,展现到下方 第一步:我们用到了第三方样式库…...

Python打包调试问题解决
使用pyinstaller打包,发现问题:代码运行时调试的结果不一致代码中设定的图标打包后没有显示出来打包代码程序test.py为入口函数main()所在的文件pyinstaller -F -w -i test.ico test.py 不会出现控制台,图标为test.ic…...

计算机SCI期刊自引率一般是多少? - 易智编译EaseEditing
论文常用来指进行各个学术领域的研究和描述学术研究成果的文章,是探讨问题进行学术研究的一种手段,又是描述学术研究成果进行学术交流的一种工具,包括学年论文、毕业论文、学位论文、科技论文、成果论文等。 一般来说,论文的自引…...

力扣(LeetCode)417. 太平洋大西洋水流问题(2023.02.19)
有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights[r][c]…...
Python解题 - CSDN周赛第30期 - 天然气订单
本期比赛的在线测试系统好像出了点问题,导致很多选手最后提交的分数是0,而问哥也遇到好几次提交后一直显示“运行中”而没有结果的情况。鉴于之前遇到过类似情况,不停地刷新页面才得以继续。但是此问题已经存在并持续了好几期,极大…...

移动WEB开发一、基础知识
零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…...

07 二叉树
开始系统学习算法啦!为后面力扣和 蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括 概念, 算法运行过程,以及 代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私…...

从 ClickHouse 到 Apache Doris,腾讯音乐内容库数据平台架构演进实践
导读:腾讯音乐内容库数据平台旨在为应用层提供库存盘点、分群画像、指标分析、标签圈选等内容分析服务,高效为业务赋能。目前,内容库数据平台的数据架构已经从 1.0 演进到了 4.0 ,经历了分析引擎从 ClickHouse 到 Apache Doris 的…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...