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

版权声明:https://me.csdn.net/weixin_42636552 https://blog.csdn.net/weixin_42636552/article/details/84881276

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

我需要在黄色标志的文件里面拿到红色圈标记的文件地址,我应该怎么办?

这个时候一般会想到二种解决方案:

一、使用相对地址,先回退到项目名,然后再在WebContent下面进行访问。

二、使用绝对地址,利用反射直接到达访问方的class地址,然后再激进型访问。

好了,上面两种方案都是可行的,但是必须要注意一点:


不能在地址里面出现WebContent 。

我今天看了好多的博客,但是大多数都是范范而谈,好多不同的博客都是相同的文字,甚至有的代码里面作者都是相同的,

“好巧哦”

但是没有解决我的问题,我还是不知道怎么从src下面直接访问WebContent文件?

现在好好看看我的笔记,这里没有概念,只有方法。

希望日后遇到这种问题,可以不再百度。


我在代码里面使用了反射,利用绝对地址,原因是什么,代码简洁啊

此文章就从反射出发,开始寻找WebContent.。

一、此文件的class在哪里?

先放一个知识点

 在这个知识点的启发下,我开始寻找我的class包

  String picPath= pictureYanzheng.class.getClassLoader().getResource("/").getPath();

“  这是一行要获取图片地址的代码 "

pictureYanzheng是我的类名,使用  pictureYanzheng.class.getClassLoader().getResource("/")就可以直接定位到此类的编译之后,也就是成为了class的时候的保存地址

我是保存在D盘里面的eclipseWork下面,但是下面的路径就不是直接的项目名,而是一些乱七八糟的东西

那我那个黄色的class也就找到了

所以现在也就了解到了为什么不能直接在地址里面使用WebContent了

你的项目都不在本来你认为的地方,那项目里面这个扑所迷离的东西怎么会老老实实的待在你可以一眼瞅到的地方呢?

二、我要访问的东西在哪里?

在刚在获得的那个地址下面,我继续寻找我的图片在编译之后会保存在哪个地方,最后发现了一个地址

可激动了

红色的圈圈就是我要的东西

这个时候有点和咱们最开始了解到了地址不太一样了,毕竟人家现在已经升级为“”编译后“啦”

比较两个地址就会发现,src下面的类在WEB-INF的class里面,而WebContent下面的东西是在类的直接下面的,所以WebContent其实再编译后充斥着项目名那个地位。

你本来以为src和WebContent是兄弟俩,最后长着长着,一个变成了另一个的爸爸,

满满的绿色

三、怎么让两个进行相互访问

这里有一个知识点

【  ../  】

代表回一个等级,从孙子辈到儿子辈

如果连用【../ ../ 】

就代表从孙子辈到爷爷辈。

所以我的地址就可以直接

String picPath= pictureYanzheng.class.getClassLoader().getResource("../../images/Amier.jpg").getPath();

"../../images/Amier.jpg"

成功从孙子到爷爷了!

成功


所以也就是说

  • class到class:非静态使用new,静态直接调用
  • class到WebContent:可以利用反射直接【. . /】连接
  • WebContent到class:最常见就是Servlet之间的传递,直接WEB配置就行

好啦,到此为止,休息。

猜你喜欢

转载自blog.csdn.net/weixin_42636552/article/details/84881276
今日推荐