GVKun编程网logo

webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?

12

对于想了解webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?的读者,本文将是一篇不可错过的文章,并且为您提供关于javaweb中的相对路径和绝对路径、J

对于想了解webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?的读者,本文将是一篇不可错过的文章,并且为您提供关于java web中的相对路径和绝对路径、Java Web中解决路径(绝对路径与相对路径)问题、java – 从绝对路径中提取相对路径、java – 如何使用相对路径而不是绝对路径?的有价值信息。

本文目录一览:

webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?

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中的相对路径和绝对路径

java web中的相对路径和绝对路径

以往一直没注意javaweb中的相对路径和绝对路径问题,有时有问题了,才想起去看看是否是路径的问题,一直对路径问题都是一知半解。今天就姑且记录一下,毕竟事如春梦了无痕嘛,倘不记之笔墨,未免有辜彼苍之厚。

对于一个URL地址,我们在编码的时候不会去这样写http://localhost/TestProject/registerUserServlet

大多只会在form表单的提交路径中写上registerUserServlet或者/TestProject/registerUserServlet

如此这般。

那其实这两种写法效果是一样的,只是前者叫做相对路径或者叫做绝对路径

  • 相对路径:以./开头,可以省略
  • 绝对路径:以/开头

我们先来看相对路径,只要搞清楚当前资源与目标资源之间的相对关系,相对路径是非常容易的。

我们通过举例来说明。

我们建立一个javawebl类型的项目

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

同理,我们可以思考,哪些是客户端发出的请求呢?

比如使用

  1. form表单进行提交
  2. 点击超连接
  3. 重定向:切记重定向是客户端行为,

哪些是服务端行为呢?

比较常见的就是转发操作

Tips:如果动态获取虚拟目录

request.getContextPath()

好吧,这次记录的比较简洁,希望这次不会再忘记了。

Java Web中解决路径(绝对路径与相对路径)问题

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 – 从绝对路径中提取相对路径

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 class:

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 – 如何使用相对路径而不是绝对路径?

所以我对 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 – 如何使用相对路径而不是绝对路径?等相关内容,可以在本站寻找。

本文标签: