1. 程式人生 > >JavaWeb(EE)相對路徑_絕對路徑詳解與得到相關路徑

JavaWeb(EE)相對路徑_絕對路徑詳解與得到相關路徑

原博文地址:http://blog.csdn.net/bohemia/article/details/704427/

1.基本概念的理解

  絕對路徑:絕對路徑就是你的主頁上的檔案或目錄在硬碟上真正的路徑,(URL和物理路徑)例如:C:/xyz/test.txt 代表了test.txt檔案的絕對路徑。http://www.sun.com/index.htm也代表了一個URL絕對路徑。

  相對路徑:相對與某個基準目錄的路徑。包含Web的相對路徑(HTML中的相對目錄),例如:在Servlet中,"/"代表Web應用的跟目錄。和物理路徑的相對錶示。例如:"./" 代表當前目錄,"../"代表上級目錄。這種類似的表示,也是屬於相對路徑。

另外關於URI,URL,URN等內容,請參考RFC相關文件標準。

RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, (http://www.ietf.org/rfc/rfc2396.txt)


2.關於JSP/Servlet中的相對路徑和絕對路徑。

2.1伺服器端的地址

   伺服器端的相對地址指的是相對於你的web應用的地址,這個地址是在伺服器端解析的(不同於html和javascript中的相對地址,他們是由客戶端瀏覽器解析的)也就是說這時候在jsp和servlet中的相對地址應該是相對於你的web應用,即相對於http://192.168.0.1/webapp/

的。

  其用到的地方有: 
 forward:servlet中的request.getRequestDispatcher(address);這個address是在伺服器端解析的,所以,你要forward到a.jsp應該這麼寫:request.getRequestDispatcher(“/user/a.jsp”)這個/相對於當前的web應用webapp,
其絕對地址就是:http://192.168.0.1/webapp/user/a.jsp。 
sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>

2.2、客戶端的地址 
       所有的html頁面中的相對地址都是相對於伺服器根目錄(

http://192.168.0.1/)的,
而不是(跟目錄下的該Web應用的目錄)http://192.168.0.1/webapp/的。 
Html中的form表單的action屬性的地址應該是相對於伺服器根目錄(http://192.168.0.1/)的,
所以,如果提交到a.jsp為:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()%>"/user/a.jsp;
  提交到servlet為actiom="/webapp/handleservlet"  
    Javascript也是在客戶端解析的,所以其相對路徑和form表單一樣。 
 

  因此,一般情況下,在JSP/HTML頁面等引用的CSS,Javascript.Action等屬性前面最好都加上
<%=request.getContextPath()%>,以確保所引用的檔案都屬於Web應用中的目錄。
另外,應該儘量避免使用類似".","./","../../"等類似的相對該檔案位置的相對路徑,這樣當檔案移動時,很容易出問題。


3. JSP/Servlet中獲得當前應用的相對路徑和絕對路徑
3.1 JSP中獲得當前應用的相對路徑和絕對路徑
 根目錄所對應的絕對路徑:request.getRequestURI()
 檔案的絕對路徑     :application.getRealPath(request.getRequestURI());
 當前web應用的絕對路徑 :application.getRealPath("/");
 取得請求檔案的上層目錄:new File(application.getRealPath(request.getRequestURI())).getParent()

3.2 Servlet中獲得當前應用的相對路徑和絕對路徑
 根目錄所對應的絕對路徑:request.getServletPath();
 檔案的絕對路徑    :request.getSession().getServletContext().getRealPath(request.getRequestURI())   
 當前web應用的絕對路徑 :servletConfig.getServletContext().getRealPath("/");
       ServletContext物件獲得幾種方式:
       javax.servlet.http.HttpSession.getServletContext() 
       javax.servlet.jsp.PageContext.getServletContext() 
       javax.servlet.ServletConfig.getServletContext() 
       

4.java 的Class中獲得相對路徑,絕對路徑的方法
4.1單獨的Java類中獲得絕對路徑
  根據java.io.File的Doc文擋,可知:
 預設情況下new File("/")代表的目錄為:System.getProperty("user.dir")。
 程式獲得執行類的當前路徑 ,例如:

package org.cheng.file;
import java.io.File;
public class FileTest {
    public static void main(String[] args) throws Exception {      
  System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));    
  System.out.println(FileTest.class.getClassLoader().getResource(""));       
  System.out.println(ClassLoader.getSystemResource(""));        
  System.out.println(FileTest.class.getResource(""));        
  System.out.println(FileTest.class.getResource("/")); //Class檔案所在路徑  
  System.out.println(new File("/").getAbsolutePath());        
  System.out.println(System.getProperty("user.dir"));    
 }

4.2伺服器中的Java類獲得當前路徑(來自網路)
(1).Weblogic

WebApplication的系統檔案根目錄是你的weblogic安裝所在根目錄。
例如:如果你的weblogic安裝在c:/bea/weblogic700.....
那麼,你的檔案根路徑就是c:/.
所以,有兩種方式能夠讓你訪問你的伺服器端的檔案:
a.使用絕對路徑:
比如將你的引數檔案放在c:/yourconfig/yourconf.properties,
直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相對路徑:
相對路徑的根目錄就是你的webapplication的根路徑,即WEB-INF的上一級目錄,將你的引數檔案放在yourwebapp/yourconfig/yourconf.properties,

這樣使用:
new FileInputStream("./yourconfig/yourconf.properties");
這兩種方式均可,自己選擇。

(2).Tomcat

在類中輸出System.getProperty("user.dir");顯示的是%Tomcat_Home%/bin

(3).Resin

不是你的JSP放的相對路徑,是JSP引擎執行這個JSP編譯成SERVLET的路徑為根.比如用新建檔案法測試File f = new File("a.htm");
這個a.htm在resin的安裝目錄下

(4).如何讀相對路徑哪?

在Java檔案中getResource或getResourceAsStream均可

例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",這裡的/代表web釋出根路徑下WEB-INF/classes.

預設使用該方法的路徑是:WEB-INF/classes。已經在Tomcat中測試。

總結:
 通過上面內容的使用,可以解決在Web應用伺服器端,移動檔案,查詢檔案,複製
 刪除檔案等操作,同時對伺服器的相對地址,絕對地址概念更加清晰。
建議參考URI,的RFC標準文擋。同時對Java.io.File. Java.net.URI.等內容瞭解透徹
對其他方面的理解可以更加深入和透徹。
===========================================================================


相關推薦

JavaWeb(EE)相對路徑_絕對路徑得到相關路徑

原博文地址:http://blog.csdn.net/bohemia/article/details/704427/1.基本概念的理解  絕對路徑:絕對路徑就是你的主頁上的檔案或目錄在硬碟上真正的路徑,(URL和物理路徑)例如:C:/xyz/test.txt 代表了test.

2018年10月5日python相對引入和絕對引入

|-direct        |-plane               |-__init__.py

最短路徑問題---Dijkstra演算法

前言  Nobody can go back and start a new beginning,but anyone can start today and make a new ending.  Name:Willam  Time:2017/3/8 1、最短路徑問題介紹

最短路徑問題---Floyd演算法

前言 Genius only means hard-working all one’s life. Name:Willam Time:2017/3/8 1、最短路徑問題介紹 問題解釋: 從圖中的某個頂點出發到達另外一個頂點的所經過的邊的權重和最

Webpack2的那些路徑

Webpack2 中有很多涉及路徑引數配置,若不知其所以然,很容易混淆出錯。本文儘可能的彙集了 Webpack2 中設計路徑的配置,力爭深入淺出。 context context 是 webpack 編譯時的基礎目錄,入口起點(entry)會相對於此目錄查詢。 若不

雲端計算期末報告無圖 kmeans和最短路徑演算法hadoop實現

《雲端計算應用開發實驗》大作業報告 一.實驗環境與實驗工具 ubuntu 16.04真機 + hadoop2.6 + 本地偽分佈   二.實驗原理 以下內容為科普性內容,不過裡面還是有一些關鍵的解釋在配環境的時候用得上 Hadoop是一個

Android 獲取本地儲存路徑的各種方法

Android 中獲取本地儲存路徑,有四個方法, getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()。 接下來介紹下每個方法的特點以及路徑地址 getCacheDir(

圖論演算法----最短路徑Bellman-Ford演算法

一、題目描述 最短路徑問題 題目描述 平面上有n個點(n<=100),每個點的座標均在-10000~10000之間。其中的一些點之間有連線。若有連線,則表示可從一個點到達另一個點,即兩點間有

最短路徑問題---SPFA演算法

前言 部落格編寫人:Willam 部落格編寫時間:2017/3/12 博主郵箱:[email protected](有志同道合之人,可以加qq交流交流程式設計心得) 1、最短路徑問題介紹 問題解釋: 從圖中的某個頂點出發到達另外一個頂點的所經過

[從今天開始修煉資料結構]圖的最短路徑 —— 迪傑斯特拉演算法和弗洛伊德演算法的Java實現

在網圖和非網圖中,最短路徑的含義不同。非網圖中邊上沒有權值,所謂的最短路徑,其實就是兩頂點之間經過的邊數最少的路徑;而對於網圖來說,最短路徑,是指兩頂點之間經過的邊上權值之和最少的路徑,我們稱路徑上第一個頂點是源點,最後一個頂點是終點。 我們講解兩種求最短路徑的演算法。第一種,從某個源點到其餘各頂點的最短路徑

Java_51_組合_內部類_字串(String類)_equals和==的區別

組合 使用組合,可以獲得更多的靈活性,你甚至可以在執行的時候才決定哪幾個類組合在一起。 使用繼承,他是一種高度耦合,派生類和基類被緊緊的綁在一起,靈活性大大降低,而且,濫用繼承,也會使繼承樹變得又大又複雜,很難理解和維護。 如果是is-a關係,用繼承。【是一個[物件]】 如果是h

資料庫mysql-5.7.17的極速賽_車平臺出_售安裝

資料庫極速賽_車平臺出_售的安裝詳解 Q1157880099 1、安裝前的準備工作 1.1、系統基本資訊 為給安裝過程減少麻煩,我這裡已經提前關閉了防火牆和selinux。我這裡是純淨的系統,沒有安裝過MySQL和mariadb,如果機器上有安裝過MySQL

JavaWeb之Request物件和Response物件

一:概述 Web伺服器收到客戶端的http請求,會針對每一次請求,分別建立一個用於代表請求的request物件、和代表響應的response物件一、Response物件     1.Resonse的繼承結構:             ServletResponse--Ht

攝像機投射投影模型_綜述及

1.寫在前面的話 攝像機通過成像透鏡將三維場景投影到攝像機二維像平面上,這個投影可以用成像變換進行表示,也就是我們平常說的攝像機投影模型。攝像機成像模型有不同的描述方式。這裡僅僅總結了機器視覺中常

網路程式設計_傳輸層

tcp協議 又稱之為 流式協議 需要管道 建立通道(單向流通) 網路程式設計 先建立管道 建連線,只需要三次握手 syn=1 seq=x ack=1+x syn=1 seq=y ac

Python基本語法_異常處理

目錄 異常 異常即非正常狀態,在Python中使用異常物件來表示異常。若程式在編譯或執行過程中發生錯誤,程式的執行過程就會發生改變,丟擲異常物件,程式流進入異常處理。如果異常物件沒有被處理或捕捉,程式就會執行回溯(Traceback)來終止程式。

Python基本語法_基本資料型別_數值型

目錄 軟體環境 系統 CentOS 7 軟體 Python 2.7.5 IPython 5.0.0 Python變數呼叫的過程 In [44]: anInt = 1 In [45]: anInt Out[45]: 1 通過

Linux命令_ zcat 命令 -》不解壓檔案直接檢視檔案內容

zcat命令用於不真正解壓縮檔案,就能顯示壓縮包中檔案的內容的場合。 語法: zcat(選項) 壓縮檔名 -S:指定gzip格式的壓縮包的字尾。當字尾不是標準壓縮包字尾時使用此選項;  -c:將檔案內容寫到標註輸出;  -d:執行解壓縮操作;  -l:顯示壓縮包中檔案

Visual Studio整合Qt環境搭建_測試

1.利器≠戾氣 接了兩個專案,而這兩個專案說起來也很有意思。 一個是監護儀軟體開發,要求利用MFC進行開發,因為在此之前接近兩年時間一直進行MFC開發;來到清華後,碰到了好多的計算機程式設計大牛

PIC微控制器入門_中斷系統

1.中斷的基本概念 當微控制器正在執行程式時,出現了某些特殊狀況,例如定時時間到、有鍵盤訊號輸入等,此時CPU須要暫時停止當前的程式,而轉去執行處理這些事件的程式,待執行完這些特定的程式之後,再返回