絕對路徑: 是從盤符開始的路徑,形如C:\windows\system32\cmd.exe
相對路徑: 1、“./” :表示檔案目前所在的目錄。 2、“../”:表示檔案的上一層目錄。 3、“/” :表示所在檔案的一級目錄。(就是在根目錄下)
相對路徑的例子:
1: C:\Program Files\other\index.htm
2: C:\Program Files\javaweb\test\01.htm
上面有兩個絕對路徑表示的檔案路徑。
問1:index.htm要想連結到01.htm這個檔案,正確的連結應該是什麼。
答1:“../javaweb/test/01.htm”問2: 01.htm 要想連結到 index.htm 這個檔案,在 01.htm 檔案裡面應該是什麼。 答2:“../../other/index.htm” Tomcat軟體和Eclipse軟體對於web項目的布局: 如圖所示為Tomcat中部署的一個名叫“zuoye”的項目
如圖所示為Eclipse中部署的一個名叫“zuoye”的項目的Navigator視圖。
總結: 1、我們在發布了的javaWeb項目的代碼中寫的相對路徑都是根據 tomcat 軟體來進行尋找的。 2、尋找". class" 檔案(位元組碼檔案) a、 java 項目就在Eclipse的工作空間中的項目的 bin為 根目錄下去找 b、 web項目就在Tomcat的webapps下的項目的WEB-INF/classes目錄下找(也可以在Navigator視圖下,項目下的Build檔案下看到,但是實際在Tomcat的webapps檔案下的對應的項目下找) 3、尋找".java"檔案 a、在項目的src為根目錄下去找(一般不會找".java"檔案,因為沒有什麼可以用的地方,除了拷貝代碼以外) 4、尋找".HTML"檔案 a、java項目就在workspace中的項目找 b、javaWeb項目就在Tomcat安裝路徑中的項目下找(但是也可以在Eclipse中項目下WebContent檔案下看到,但是實際尋找是在Tomcat中的webapps檔案下的對應的項目下找) 5、javaWeb項目中不會找".java"檔案,只會找".class"檔案 6、java項目中一般不會找".java"和".class"檔案,而是找".properties"、".txt"、".jpg"之類的檔案 javaWeb中使用URL的時候經常用到相對路徑,下面是我總結的一些關於有用到檔案路徑的地方。。 1、 HttpServletResponse 對象的重新導向:(虛擬碼如下)
response.sendRedirect("signIn.html");
response.sendRedirect("/zuoye/signIn.html");
response.sendRedirect("http://localhost:8080/zuoye/signIn.html");
response.sendRedirect("/zuoye/sign");
注釋:第一行虛擬碼:直接寫需要重新導向的檔案全名就行了
第二行虛擬碼:以“/”加項目名開頭,後接需要重新導向的檔案相對項目名的路徑
第三行虛擬碼:絕對路徑
第四行虛擬碼:以“/”加項目名開頭,後接需要重新導向的檔案相對項目名的路徑 注釋:前三行代碼是我所總結出來的表示路徑方式。。
注意:重新導向可以定位到html檔案,也可以定位到servlet檔案。
以下補充一個項目名“test_server_1”的重新導向執行個體。
(如下兩張圖所示,重新導向的路徑不是以"/"開始的,所以會出現如是錯誤。正確格式請參照上面給的執行個體。)
2、請求 轉寄:(虛擬碼如下)
request.getRequestDispatcher("sign").forward(request,response);
request.getRequestDispatcher("jsp/register.jsp").forward(request, response);
request.getRequestDispatcher("/jsp/register.jsp").forward(request,response);
注意:路徑只能如上寫相對路徑,並且這個相對路徑只除去項目名路徑(最後有執行個體說明什麼是項目名路徑)和"/",不能寫以“項目名路徑”開始的相對路徑。
下面的虛擬碼就是錯誤的。。
request.getRequestDispatcher("/zuoye/sign").forward(request,response);
3、JS代碼中實現頁面跳轉:(虛擬碼如下)
window.location.href='http://127.0.0.1:8080/zuoye/welcome.html';
response.getWriter().write("<scripttype='text/javascript'>window.location.href='/zuoye/sign.html';</script>");
注釋:第一行虛擬碼為JS檔案裡的代碼,裡面用的是絕對路徑;
第二行虛擬碼是servlet檔案裡的代碼,裡面有的是相對路徑。
4、JSP實現定時重新整理:(真實代碼如下)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
var num = 2;
function time(){
if(num ==0){
/* window.location.href="/sign_JSP_EL_JSTL/jsp/welcome.jsp"; */
<%
response.setHeader("refresh", "3;/sign_JSP_EL_JSTL/jsp/welcome.jsp");
%>
}
document.getElementsByTagName("font")[0].innerHTML= num;
num--;
}
setInterval("time()",1000);
</script>
</head>
<body>
<h2>你好,你所訪問的資源已經丟失,請訪問其他資源,<font>3</font>秒後將轉到welcome畫面。。</h2>
</body>
</html>
注意:
上面代碼中的紅色部分為常用的兩種方式,下面列出另一種方式(只需要寫出檔案名稱字,並且不能以“/”開頭)
response.setHeader("refresh","3;welcome.jsp");
下面這種方式是錯誤的:
response.setHeader("refresh", "5;${pageContext.request.contextPath}/jsp/welcome.jsp");
注釋:請求轉寄和定時重新整理,其本質實現是一樣的,只是表現不一樣,一個可以實現定時的功能而已。
5、超連結標籤:(虛擬碼如下)
<a href="/ssign/sign.html">登入</a>
<a href=" http://127.0.0.1:8080/ssign/sign.html">登入</a>
注意:調用HTML檔案的路徑可以寫絕對路徑,也可以在工作空間找其相對與項目名的相對路徑(java項目則在workspace中找,web項目在Tomcat中找) 6、表單:(虛擬碼如下)
<form action="/zuoye/register" method="get">
<form action="register" method="post">
注釋:這裡的路徑寫的是servlet檔案的路徑,也可以寫HTML檔案的路徑,可以參照上面兩行代碼進行手寫。
注意:
使用第二種方式時,當前檔案就在根目錄下(Eclipse中看到直接在WebContent檔案下)則是正確的,但是如果不在根目錄下則會報錯。。
原因是因為第二種方式會自動補全路徑,而補充的路徑為該檔案相對根目錄的路徑
例:我們這裡需要訪問的register檔案的相對路徑為"/zuoye/register",而如果我們的檔案是在WebContent/HTML下,則系統會把第二種的路徑補全為"/zuoye/HTML/register",然後你就不喜歡看到的404頁面就來了。。。
7、javaWeb項目中的web.xml設定檔:(具體配置資訊如下)
<servlet-class>com.wq.servlet.Servlet_register</servlet-class>
注意:右擊java類名 選擇“Copy Qualified Name”就能得到這個類的全限定名 (全限定名:包名+類名)
8、驅動介面路徑:(具體路徑如下)
driverClass=com.mysql.jdbc.Driver
注意:驅動介面的路徑就是jar包中的Driver介面類的路徑(mysql-connector-java-5.1.7-bin.jar) 9、串連mysql資料庫的路徑:(mysql的路徑)
url=jdbc:mysql://localhost:3306/test
url=jdbc:mysql://127.0.0.1:3306/test
注釋:localhost可以換成任何可以串連的mysql資料庫所在的電腦的IP地址。。
10、類路徑:(虛擬碼如下)
InputStream in =JDBC_Util.class.getResourceAsStream("/com/wq/config/DB.properties");
注意:
getResourceAsStream(“/..”):
“/”:表示根目錄,必須是以"/"為開頭才行。。。。。。。
java項目中的是src為根目錄
javaWeb項目中的是WEB-INF/classes為根目錄
注意:
在javaWeb項目中擷取".properties"檔案只能使用類路徑的方法,不能使用流的方式。
11、外部連結css檔案:
<link href="../css/a.css" rel="stylesheet" type="text/css"/>
12、外部連結js檔案:
<script type="text/javascript" src="../js/mydate.js"> </script>
13、圖片標籤:
<imgsrc="../img/mm.jpg" />
14、javaWeb項目中的匯入的jar包路徑:
web項目中jar包放在這個路徑下。。
“\WebContent\WEB-INF\lib ”
總結:以上總結的幾點用處,除了一些特例外不能用絕對路徑,都可以使用絕對路徑(以上有些沒有寫絕對路徑)
另外補充兩點:(JSP中獲得項目名路徑和項目全路徑的方法)
JSP運算式:
<%=request.getContextPath() %>:項目名路徑(/zuoye)
<%=request.getRealPath("/") %>:項目全路徑(C:/...../zuoye)(此處用五個點表示中間路徑)
EL運算式:
${pageContext.request.contextPath}:項目名路徑