servlet 获取资源相关方法

在JavaWeb工程目录中的WebRoot是应用项目的根目录( 咱们知道发布到Tomcat服务器中的就是这个WebRoot目录),在项目的目录下文件的 文件路径和 文件IO流如何获取呢?
如 WebRoot目录下的b.txt 和 a.txt

获取真实路径

可以使用ServletContext对象来获取Web应用下的资源。
例如 期望获取根目录下的文件dp.properties 在服务器端的真实路径

String contextPath = getServletContext().getRealPath("dp.properties");

再例如在hello应用的根目录下创建a.txt文件,现在想在Servlet中获取这个资源,就可以使用ServletContext来获取。
获取a.txt的真实路径:String realPath =servletContext.getRealPath(“/a.txt”),realPath的值为a.txt文件的绝对路径:F:\tomcat9\webapps\hello\a.txt;
获取b.txt的真实路径:String realPath =servletContext.getRealPath(“/WEB-INF/b.txt”);F:\tomcat9\webapps\web_filter\WEB-INF\b.txt
其中,方法getRealPath(path)的路径path 的参数值 “/a.txt” 的 / 表示 应用项目的根目录
​ ----- 是针对getRealPath()

获取资源流

ServletContext提供了一种更加简洁的方式,可以通过ServletContext获取资源流,即把资源以输入流的方式获取:

获取a.txt资源流:InputStream in =servletContext.getResourceAsStream(“/a.txt”);

获取b.txt资源流:InputStream in =servletContext.getResourceAsStream(“/WEB-INF/b.txt”);

获取类路径下资源

获取classes目录下的资源
通过使用Class或者ClassLoader:可以较为便捷的获取到类路径下的资源。
上面是通过ServletContext的getResourceAsStream方法,这里要通过Class或者ClassLoader的getResourceAsStream方法。

InputStream in = this.getClass().getResourceAsStream("/xxx.txt");

通过Class类的对象来获取类路径下的资源,对应JavaWeb应用的类路径就是classes目录下的资源。

具体的代码为:Class类的getResourceAsStream(String path)

路径以“/”开头,相对classes路径;

路径不以“/”开头,相对当前class文件所有路径,例如在com.servlet.MyServlet中执行,那么相对/classes/com/servlet/路径;

例如:
InputStream in = com.servlet.MyServlet.class.getResourceAsStream("a.jpg");

获取的是:/WEB-INF/classes/com/servlet/a.jpg,即与MyServlet.class同目录下的资源

例如:
InputStream in = com.servlet.MyServlet.class.getResourceAsStream("/a.jpg");

获取的是:/WEB-INF/classes/a.jpg,即类路径的根目录下的资源,类路径的根目录就是/classes目录

通过ClassLoader类的对象来获取类路径下的资源,对应JavaWeb应用的类路径就是classes目录下的资源
具体的代码为:ClassLoader类的getResourceAsStream(Stringpath)。注,ClassLoader对象需要通过Class对象调用.getClassLoader()方法得到。

路径不以“/”开头,相对classes路径;
例如:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("a.jpg");

获取的是:/WEB-INF/classes/a.jpg,即类路径的根目录下的资源,类路径的根目录就是/classes目录
若我想获取src目录下的a.txt中的内容 怎么办呢?
获取src路径下的资源,其实就是 获取类路径下的资源;或者说 若想在类路径下存放文件 在写代码的时候 将这个文件直接放置于src目录下即可。咱们知道,src目录下的文件并不会部署到Tomcat服务器中;只会将这个JavaWeb工程中的WebRoot目录下内容发布到服务器中
src目录下的.java文件会被编译成.class文件 并存放于WebRoot-- WEB-INF – classes 目录下,非.java文件(如 .txt文件)会直接复制于WebRoot – WEB-INF – classes 目录下,展开WebRoot – WEB-INF – classes 目录 或者 项目的工作空间中的对应的目录下
注意,getResourceAsStream(“a.txt”) 其中路径没有以 / 开头,是相对于classes目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值