目录

  • 阐述
  • 解决方案
    • 新出现的问题
  • 最终方案

阐述

在完成第五个第六个war包时,发现第5个包中的is得到的是空指针

 public void init() throws ServletException{//count = 0;System.out.println("在init中完成计数器的初始化begin");sc = this.getServletContext();path = sc.getRealPath("WEB-INF/count.txt");System.out.println("读路径是:"+path);//说明path没问题try {System.out.println("进入try catch");InputStream is = LifeServlet.class.getResourceAsStream("count.txt");System.out.println("is="+is);BufferedReader br = new BufferedReader(new InputStreamReader(is));String string = br.readLine();System.out.println("读到的字符串是:"+string);count = Integer.parseInt(string);br.close();is.close();} catch (Exception e) {// TODO: handle exceptionSystem.out.println(e.getMessage());}System.out.println("在init中完成计数器的初始化end");}

而第六个war包正常显示

 public void init() throws ServletException{count = 0;System.out.println("在init中完成计数器的初始化");sc = this.getServletContext();path = sc.getRealPath("WEB-INF/count.txt");try {System.out.println("进入try catsh");InputStream is = LifeServlet.class.getResourceAsStream("countinpackage.txt");System.out.println("is的值是:"+is);BufferedReader br = new BufferedReader(new InputStreamReader(is));String string;string = br.readLine();System.out.println("读到的字符串为:"+string);count = Integer.parseInt(string); //计数器完成初始化br.close();is.close();} catch (IOException e) {e.printStackTrace();System.out.println("1");}}

经对比,未发现两段代码代码有出入,在仔细排查过后,发现:

InputStream is = LifeServlet.class.getResourceAsStream(“count.txt”);
InputStream is = LifeServlet.class.getResourceAsStream(“countinpackage.txt”);

count.txtcountinpackage.txt所在的路径不同:

解决方案

对此,我认为有两种解决方案:

  1. 将count.txt放入与该java文件同一包下
  2. 修改路径为正确的相对路径格式

新出现的问题

当我认为修改过后能够解决问题,却发现is得到的值依旧是空指针

InputStream is = LifeServlet.class.getResourceAsStream("../../../WebContent/WEB-INF/count.txt");


当时考虑,是否自己对相对路径的理解存在偏差。在自己的多次实操过后发现没有问题。

最终方案

经老师的提醒,发现问题是web项目运行的时候所在的路径和本地路径不相同

使用插旗的方式,我们找到了该工作目录下的路径

String Path= this.getClass().getResource("").getPath();

得出的结果是:

path=
C:\Users\sch\Documents\workspace-spring-tool-suite-4-4.6.0.RELEASE.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\j2019001001_05_showServletLifeCyclePlusDemo\count.txt

通过打开该路径,我们可以发现,任何WEB-INF里的文件,映射到了以该包为根目录下的位置,如这里的j2019001001_05_showServletLifeCyclePlusDemo/

注意,运行的.java文件编译之后生成的会在WEB-INF下生成的classes的servlet里

/WEB-INF/classes/servlet/

故上图的LifeServlet.class会出现在该目录下。
因此对于该问题来说,只需要修改路径为

path = sc.getRealPath("count.txt");

就可以找到此路径了

src包中文件用相对路径访问WebContent下文件的问题相关推荐

  1. 快速替换jar包中.class、.html、.yml格式的文件

    快速替换jar包中.class..html..yml格式的文件 文章目录 快速替换jar包中.class..html..yml格式的文件 背景 下载反编译软件JD-GUI 使用 jd-gui 打开we ...

  2. Python获取当前目录下所有文件的绝对路径并存储在文件中

    Python获取当前目录或者其他指定目录下所有文件的绝对路径并存储在文件中,程序如下: import osfid = open('GetAbsolutePath.txt', 'w')rootdir = ...

  3. 【Nginx】location 指向某一个文件 / 指定路径访问某一文件

    前言 nginx 1.15.11(下面的代码在此版本测试通过) win10 phpstudy 8.1.1.3 location 指向某一个文件 / 指定路径访问某一文件 location指向某一个文件 ...

  4. mac 上传ftp服务器文件夹权限,mac 访问 ftp服务器文件夹权限

    mac 访问 ftp服务器文件夹权限 内容精选 换一换 在"云服务器列表"页,单击下拉按钮展开会话列表,查看会话连接状态,出现"关闭应用失败"的异常.将鼠标移动 ...

  5. 怎么从src包中文件直接访问WebContent下面文件

    今天想做一个关于图片点击文字进行验证的功能,图片我放在WebContent下面的images文件夹里面,现在在src的某一个包里面的class类需要拿到这些图片,这个时候就涉及到了相对地址和绝对地址的 ...

  6. http 直接显示目录下文件_Win10支持直接访问Linux子系统文件:你的下一台Linux何必是Linux

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 微软,致力于做最好的Linux发行版. 今天,安装Windows 10测试版本号19603的用户发现,系统里WSL (Windows中的Li ...

  7. pd linux文件夹打不开,Mac怎么访问pd虚拟机文件夹 Mac如何访问pd虚拟机文件夹

    作为很多使用Mac系统的用户来说,有时候需要用到的软件或者工具在Mac系统下并不支持,这时候我们就需要借助虚拟机工具来安装windows系统实现工作或者学习的需要.那么Mac怎么访问pd虚拟机文件夹? ...

  8. 访问ftp服务器文件夹权限设置,访问ftp服务器文件夹权限设置

    访问ftp服务器文件夹权限设置 内容精选 换一换 如果请求因错误导致未被处理,则会返回一条错误响应.错误响应中包括错误码和具体错误描述.表1列出了错误响应中的常见错误码. 媒体处理服务无存储功能,您需 ...

  9. win10系统任务栏文件件右键快速访问历史打开文件夹设置

    在任务栏文件夹通常系统通过右键访问最近浏览的文件夹,从而实现文件夹的快速访问,然而有时发现文件夹右键后并不显示历史文件夹. 本教程将通过设置实现在任务栏文件夹添加最近浏览历史文件,如下: 具体操作步骤 ...

最新文章

  1. 服务注册发现与kit实践
  2. 数据挖掘实战:带你做客户价值分析(附代码)
  3. 【C++】log(n)斐波那契数列计算
  4. extern C 作用
  5. 数据仓库中捕获变化数据(CDC,Changed Data Capture)的四种手法
  6. MongoDB 与传统数据库的对比
  7. Javascript重温OOP之原型与原型链
  8. Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
  9. python变量和数据类型_python的变量和数据类型
  10. Oracle Cluster Health Monitor(CHM)简介
  11. Android 系统性能优化(30)---Android性能全面分析与优化方案研究
  12. 随机数芯片,从硬件上能产生真随机数,非伪随机数
  13. 从王者荣耀看设计模式(六.状态模式)
  14. Markdown 编辑器 Editor.md 图片上传使用
  15. 来,创建一个高效的IMEI编码生成器
  16. 上海通用北盛汽车2012届校园招聘长春理工大学专业面试安排 共 27 人
  17. java media player 设置音量_SoundPlayer可调音量 - c#
  18. BMM 和 FMM 中文分词
  19. wechat4j开发-菜单创建
  20. transformer模型的奥秘-学习笔记

热门文章

  1. 实用的 IDEA Debug 调试技巧(超详细案例)
  2. 【韧性架构】让你的微服务容错的 5 种模式
  3. title标签-HTML5精讲 课时ID:6.4 【表严肃】#HTML教程 #HTML5教程 #title标签
  4. python输入x的值求y_python – 机器学习 – 如何使用过去的20行作为每个Y值的X输入...
  5. 报错vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in render: “TypeError: Cannot read property ‘length‘
  6. jvm内存分区和TLAB
  7. 转载:Unity3D游戏如何加快冷启动时间
  8. 详细说说hook Api技术
  9. 如何结交大佬 -- 舔狗是要技术的
  10. 基于JSP的学生奖学金评定管理系统的设计与实现_kaic