一、什麼是相對路徑?
首先在介紹如何使用maven設置相對路徑之前,我們需要先清楚什麼是相對路徑。相對路徑是相對於當前文件路徑的表示,即在不同的目錄下我們可以使用相對路徑來訪問同一份文件。
比如我們有一個項目結構如下:
| |--- src/ | |--- main/ | | |--- java/ | | |--- resources/ | | | |--- properties/ | | | | |--- db.properties | | |--- webapp/ | | |--- WEB-INF/ | | |--- jsp/ | | |--- login.jsp | | |--- index.jsp
我們在login.jsp中想要引用db.properties文件,如果我們使用絕對路徑,就需要寫成:
<%@ page import="java.util.Properties" %> <%@ page import="java.io.FileInputStream" %> <% String path = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/properties/db.properties"); Properties props = new Properties(); FileInputStream in = new FileInputStream(path); props.load(in); String url = props.getProperty("url"); String username = props.getProperty("username"); String password = props.getProperty("password"); in.close(); %>
但是如果我們使用相對路徑,就可以寫成:
<%@ page import="java.util.Properties" %> <%@ page import="java.io.FileInputStream" %> <% String path = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/properties/db.properties"); Properties props = new Properties(); FileInputStream in = new FileInputStream(path); props.load(in); String url = props.getProperty("url"); String username = props.getProperty("username"); String password = props.getProperty("password"); in.close(); %>
二、如何使用maven設置相對路徑?
Maven是Java開發中使用最廣泛的自動化構建工具之一。在使用Maven構建項目時,我們可以使用${project.basedir}來表示項目的根目錄,這樣就可以避免手動指定絕對路徑的麻煩。以下是一些示例。
三、使用相對路徑指定src文件夾下文件的位置
在Maven項目開發中,除了在webapp目錄下的文件,我們還可能會在src/main/java、src/main/resources或者src/test/java中需要調用其他資源文件,這時使用相對路徑就很方便。
1.設置log4j.properties位置
假如我們的log4j.properties文件在src/main/resources目錄下,它的內容如下:
# 日誌輸出級別 log4j.rootLogger=INFO, stdout # 控制台輸出 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n
在pom.xml文件中,我們可以添加以下配置:
<project> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>log4j.properties</include> </includes> <targetPath>../classes</targetPath> </resource> </resources> </build> </project>
使用Maven命令來構建項目:mvn clean package,在target目錄下會生成一個classes文件夾。其中log4j.properties文件就會出現在classes下了。
2.使用相對路徑設置dubbo.properties位置
同樣道理,我們還可以使用相對路徑來設置dubbo.properties文件的位置。
<project> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>dubbo.properties</include> </includes> <targetPath>../classes</targetPath> </resource> </resources> </build> </project>
這樣一來,在src/main/resources目錄下創建dubbo.properties文件就可以被正常引用了。
四、使用相對路徑指定webapp下文件的位置
1.使用相對路徑指定jsp文件的位置
在web應用中,最常用的就是jsp文件了。假如我們的index.jsp和login.jsp都在webapp/jsp目錄下,而我們的css文件都在webapp/css文件夾下。
| |--- src/ | |--- main/ | |--- webapp/ | | |--- css/ | | | |--- style.css | | |--- jsp/ | | |--- login.jsp | | |--- index.jsp
在index.jsp中想要使用css文件,我們可以這樣寫:
<link rel="stylesheet" type="text/css" href="../css/style.css">
這裡的../表示返回上一級目錄,也就是從webapp/jsp返回到webapp下。
另外,在我們的login.jsp中想要引用某些js庫的話,可以這樣寫:
<script src="../js/jquery.min.js"></script>
2.使用相對路徑指定web.xml文件的位置
我們知道,web.xml是web應用的配置文件,我們可以配置攔截器、servlet、監聽器等等。在web.xml中,我們有時需要引用其他文件,這時候使用相對路徑就可以避免絕對路徑的麻煩。
例如,我們要在web.xml中引用spring配置文件,可以這樣寫:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:../spring/applicationContext.xml classpath:../spring/spring-mybatis.xml </param-value> </context-param>
總結
相對路徑在項目中應用廣泛,而maven的出現為我們的開發過程提供了便利。在使用Maven構建項目時,我們可以使用${project.basedir}來避免手動指定絕對路徑的麻煩,使用相對路徑既方便又實用。
原創文章,作者:ZYZY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/148836.html