对于想了解webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?的读者,本文将是一篇不可错过的文章,并且为您提供关于javaweb中的相对路径和绝对路径、J
对于想了解webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?的读者,本文将是一篇不可错过的文章,并且为您提供关于java web中的相对路径和绝对路径、Java Web中解决路径(绝对路径与相对路径)问题、java – 从绝对路径中提取相对路径、java – 如何使用相对路径而不是绝对路径?的有价值信息。
本文目录一览:- webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?
- java web中的相对路径和绝对路径
- Java Web中解决路径(绝对路径与相对路径)问题
- java – 从绝对路径中提取相对路径
- java – 如何使用相对路径而不是绝对路径?
webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?
资源相对引用路径
问题描述
一般情况下,通过webpack+vuecli默认打包的css、js等资源,路径都是绝对的。
但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static
文件夹当成了根路径,那么要解决这种问题,就得引用相对路径。
解决办法
打开webpack.prod.conf.js
找到output
:增加 publicPath: ‘./‘
,即可,如图。
那么这样后,资源的引用路径就正确了。
当然在config文件夹下的index.js中修改 assetsPublicPath: ‘./‘
同样也可以达到资源的相对引用。
背景图片的引用问题
上面虽然解决了资源路径的引用问题,但是资源里面的背景图片,不像index.html中加载资源一样,通过./static/js/app.js
引用可以正常加载,图片资源是通过css加载的,如 background: url("../../assets/images/logo-index.png") no-repeat;
被相对打包后变成了url(static/img/logo-index.2f00bf2.png) no-repeat
所以我们要保留css引用图片的正常路径,即:
url(../../static/img/logo-index.2f00bf2.png) no-repeat
那么就需要修改build文件夹下的utils.js代码,如图所示:
添加如图所示的一行代码,这样不论是字体还是图片的引用问题都能解决。
java web中的相对路径和绝对路径
以往一直没注意javaweb中的相对路径和绝对路径问题,有时有问题了,才想起去看看是否是路径的问题,一直对路径问题都是一知半解。今天就姑且记录一下,毕竟事如春梦了无痕嘛,倘不记之笔墨,未免有辜彼苍之厚。
对于一个URL
地址,我们在编码的时候不会去这样写http://localhost/TestProject/registerUserServlet
大多只会在form
表单的提交路径中写上registerUserServlet
或者/TestProject/registerUserServlet
如此这般。
那其实这两种写法效果是一样的,只是前者叫做相对路径
或者叫做绝对路径
。
- 相对路径:以
./
开头,可以省略 - 绝对路径:以
/
开头
我们先来看相对路径,只要搞清楚当前资源与目标资源之间的相对关系,相对路径是非常容易的。
我们通过举例来说明。
我们建立一个javaweb
l类型的项目
在web
文件夹下我们新建一个location.html
文件
<body>
<h1>相对路径</h1>
<h1>找到当前资源和目标资源之间的相对位置关系</h1>
<P>
当前资源:location.html
http://localhost/day15/location.html
</P>
<P>
目标资源:
http://localhost/day15/responseDemo
</P>
<a href="./responseDemo">
responseDemo2
</a>
<a href="responseDemo">
responseDemo2
</a>
在src/com/helius/servelt
文件夹下新建一个responseDemo
的servlet类,来处理location.html
中的响应。
那此时采用上图中的两种写法都是可以的,因为相对路径中的./
可以省略。
**分析:**当我们打开浏览器,准备访问这个html文件,我们访问的路径是什么呢?
显然是 http://localhost/day15/location.html
day15
我们称为虚拟目录
,虚拟目录可以在idea
中的启动的tomcat
中配置。
也就是apache-tomcat-7.0.94\conf\server.xml
中配置的Context
标签
<Context path="/day15" docBase="c:\work_folder" />
另外这个文件是在web
目录下的,也就是项目根目录
所以得出它的访问路径 http://localhost/day15/location.html
再来看responseDemo
这个从哪里来的呢,当然是我们在web.xml中配置的
<servlet>
<servlet-name>ResponseDemo</servlet-name>
<servlet-class>ResponseDemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResponseDemo</servlet-name>
<url-pattern>/responseDemo</url-pattern>
</servlet-mapping>
注:Servlet3.0
可以直接通过注解进行配置
所以当我们请求这个类的路径就是http://localhost/day15/responseDemo
将两个路径比较一下,使用相对路径可以通过href="responseDemo"
进行访问。
再来看绝对路径
绝对路径要分两种情况了,需要判断定义的路径是给谁用的?判断请求从哪里发出?
- 给客户端使用:需要加虚拟目录
<a>
标签,<form>
标签、重定向
- 给服务端使用:不需要加虚拟目录
- 转发
再来看用绝对路径怎么改写上个例子
<h1>绝对路径</h1>
<a href="/day15/responseDemo">
responseDemo2
</a>
绝对路径以/
开头,显然,这个超链接肯定是通过用户点击,也即是客户端使用,请求也由客户端发出,所以需要加上虚拟目录day15
同理,我们可以思考,哪些是客户端发出的请求呢?
比如使用
- form表单进行提交
- 点击超连接
- 重定向:切记重定向是客户端行为,
哪些是服务端行为呢?
比较常见的就是转发操作
Tips:如果动态获取虚拟目录
request.getContextPath()
好吧,这次记录的比较简洁,希望这次不会再忘记了。
Java Web中解决路径(绝对路径与相对路径)问题
这篇文章主要介绍了Java Web中解决路径问题的相关资料,java 文件路径有绝对路径与相对路径,这里提供了几种方法解决所有路径问题,需要的朋友可以参考下
Java Web中解决路径问题:
Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
在开发Web方面的应用时, 经常需要获取 服务器中当前Webroot的物理路径。
如果是Servlet , Action , Controller, 或则Filter , Listener , 拦截器等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。
如果在类中取不到ServletContext时, 有两种方式可以做到:
1. 利用Java的类加载机制 调用 XXX.class.getClassLoader().getResource(""); 方法来获取到Classpath , 然后处理获得Webroot目录,这种方式只能是该class在Webroot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中, 则该方法失效。这时就应该用下面一种方式。
2. spring框架的思路, 在WEB-INF/web.xml中 , 创建一个webAppRootKey的param, 指定一个值(默认为webapp.root)作为键值, 然后通过Listener , 或者Filter , 或者Servlet 执行String webAppRootKey = getServletContext().getRealPath("/"); 并将webAppRootKey对应的webapp.root 分别作为Key , Value写到System Properties系统属性中。之后在程序中通过System.getProperty("webapp.root")来获得Webroot的物理路 径。
根据第二种的思路,我们还可以再扩展一下。不过对于在部署在一台服务器中的应用来说,若还不是你所需请再往下看。
下面是一些得到classpath和当前类的绝对路径的一些方法。你可使用其中的一些方法来得到你需要的资源的绝对路径:
1.
DebitNoteAction.class.getResource("")
得到的是当前类FileTest.class文件的URI目录。不包括自己!
如:
file:/D:/eclipse/springTest/Webroot/WEB-INF/classes/
atacarnet/src/com/evi/modules/atacarnet/action/
2.
DebitNoteAction.class.getResource("/")
得到的是当前的classpath的绝对URI路径。
如:
file:/D:/eclipse/springTest/Webroot/WEB-INF/classes/
3.
Thread.currentThread().getContextClassLoader().getResource("")
得到的也是当前Classpath的绝对URI路径
如:
file:/D:/eclipse/springTest/Webroot/WEB-INF/classes/
4.
DebitNoteAction.class.getClassLoader().getResource("")
或
ClassLoader.getSystemResource("")
得到的也是当前Classpath的绝对URI路径。
如:
file:/D:/eclipse/springTest/Webroot/WEB-INF/classes/
5. 取得服务器相对路径
System.getProperty("user.dir")
例如:E:/apache-tomcat-5.5.16/apache-tomcat-5.5.16/bin
我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法
6. 取得项目中的绝对路径
一般用
request.getRealPath("/")
或
request.getRealPath("/config/")
但现在不提倡使用request.getRealPath("/")了,大家可试用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径
要取得src的文件非常容易,因为src是默认的相对目录,比如你说要取得src下com目录的test.java文件,你只需要这样就够了
File f = new File(com/test.java);
但如果我要取得不在src目录或者Webroot目录下的文件呢,而是要从src或者Webroot同级的目录中取呢,比如说doc吧
我的硬方法是这样实现的:
String path = this.getServletContext().getRealPath("/"); Properties p = new Properties(); p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("//Webroot ") + 1)) + "doc/db.properties"))); System.out.println(p.getProperty("driverName"));
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
java – 从绝对路径中提取相对路径
/这/是/的/绝对/路径/到/的/位置/的/我的/文件
我需要的是从上面给出的路径中提取/ of / my / file,因为那是我的相对路径.
我想这样做的方式如下:
String absolutePath = "/this/is/an/absolute/path/to/the/location/of/my/file"; String[] tokenizedpaths = absolutePath.split("/"); int strLength = tokenizedpaths.length; String myRelativePathStructure = (new StringBuffer()).append(tokenizedpaths[strLength-3]).append("/").append(tokenizedpaths[strLength-2]).append("/").append(tokenizedpaths[strLength-1]).toString();
这可能会满足我的直接需求,但有人可以提出一种更好的方法从java中提供的路径中提取子路径吗?
谢谢
解决方法
URI base = URI.create("/this/is/an/absolute/path/to/the/location"); URI absolute =URI.create("/this/is/an/absolute/path/to/the/location/of/my/file"); URI relative = base.relativize(absolute);
这将导致/ my / file.
java – 如何使用相对路径而不是绝对路径?
我正在读写文件,所以路径对我很重要.我希望所有文件都是从相对路径写入和读取的(即在我的类和java文件的其余部分的文件夹中).
我写这样的文件:
FileWriter fw = new FileWriter(outfile,true); fw.write(data); fw.close();
outfile就像’out.txt'(即我们希望输出进入的文件的名称).
问题是,文件是在/ home / me /中创建的,而不是我的其他文件的路径.
难道我做错了什么?或者我怎样才能将文件存储在相关目录中?
解决方法
FileWriter fw = new FileWriter("./" + outfile,true);
要么
FileWriter fw = new FileWriter("~/" + outfile,true);
我会试试.
关于webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于java web中的相对路径和绝对路径、Java Web中解决路径(绝对路径与相对路径)问题、java – 从绝对路径中提取相对路径、java – 如何使用相对路径而不是绝对路径?等相关内容,可以在本站寻找。
本文标签: