kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks
          http://www.ziyuan8.com/down/Article/Catalog4/12.html

          摘要
            在為服務器端組件編程時,你很可能要從相對于web根的路徑來取得某個文件的真實路徑,但此文件實際上在站點的一個虛擬路徑上。
          什么是虛擬路徑?
            在一個web服務器上,虛擬路徑將物理上分離的各文件組合在一起,放在同一個站點路徑上,在應用服務器上,每個應用定位于其自己的虛擬路徑上,實際上相互之間有著完美地分離。
          getRealPath()方法
            JSP servlet API提供了getRealPath(path)方法,返回給定虛擬路徑的真實路徑,如果轉換錯誤,則返回null。
          getRealPath語法定義:
            public java.lang.String getRealPath(java.lang.String path)
            返回一個字符串,包含一個給定虛擬路徑的真實路徑。例如,虛擬路徑 "/index.html"
          不管在服務器文件系統(tǒng)上具有怎樣的真實路徑,使用"/index.html"總可以找到它。返回的真實路徑使用了相近于servlet容器(srvlet container)所在計算機或操作系統(tǒng)的格式,包含了適當?shù)穆窂椒指舴H绻鹲ervlet容器無法轉換則這個方法將返回null。
            參數(shù):
               path -一個描述了虛擬路徑的字符串
            返回值:
               描述真實路徑的字符串或者null
          遺憾的是,getRealPath常常返回不同的東西,這取決于服務器或jsp文件調(diào)用此方法的路徑位置。
          一個example站點
          假設我們的站點組織如下:
          根路徑包含了我們的站點的根: http://address/
          a_virtual目錄包含了我們站點提供的虛擬路徑的文件,例如:
          http://addess/virtual_dir/
          我們查找file1.txt和file2.txt的真實路徑,它們一個在站點根路徑下,一個在虛擬路徑下。
          getRealPath("/file1.txt") 應該返回“C:\site\site_root\file1.txt",
          getRealPath("/virtual_dir/file2.txt")應該返回"C:\site\a_virtual\file2.txt"
          getRealPath("/file3.txt")應該返回null,因為這個文件不存在。
          但getRealPath()并不總是返回同樣的結果,這還取決與你使用的js引擎。
          JSP引擎
          Tomcat 3.1
          Tomcat返回的結果具有應用的獨立性(application dependant):
            它取決與調(diào)用getRealPath方法的那個jsp文件所在的位置。
            實際上,當page1.jsp (位于站點根處)對file1.txt和file2.txt調(diào)用txtgetRealPath(), 它返回正確的結果。(這是在tomcat 3.1, 3.0版則對file2.txt返回錯誤的路徑)
          但是當page2.jsp(位于另一個應用,在一個虛擬路徑中)調(diào)用getRealPath,它返回了錯誤的路徑:它連接了該jsp文件所在的路徑和請求的虛擬路徑。
            例如,從page2.jsp中調(diào)用getRealPath(/file1.txt)將返回 C:\site\a_virtual\file1.txt。
            這一行為其實是使不同的應用相互獨立的典型的處理方法。
          JRun 2.3.3和INPRISE APPLICATION SERVER 4.0 (IAS)
          JRun和IAS對file1.txt和file2.txt都返回正確的結果。
            然而所有這些引擎有一個共同的行為: 當getRealPath處理不存在的文件時,它們都不返回null!
          解決之道
            既然getRealPath總是返回一個路徑,我們怎么知道它是否正確呢?最簡單的方法是檢查這個返回的路徑是否存在。
            這就是isVirtual方法要做的:在對一個給定的文件調(diào)用getRealPath以后,它使用了java.io來
          存取這個文件,于是就可以知道它是否存在。
          /**
          * isVirtual
          *
          * Check if the path name is a virtual or not.
          *
          * @param pathName The name of the path to check.
          */
          private boolean isVirtual(String pathName) {
            // Check if it is a virtual path
            if (m_application.getRealPath(pathName)!=null) {
              java.io.File virtualFile = new java.io.File(m_application.getRealPath(pathName));
              if (virtualFile.exists()) {return true;}
              else {return false;}
            }
            else {return false;}
          }
          posted on 2005-04-27 16:14 笨笨 閱讀(349) 評論(0)  編輯  收藏 所屬分類: J2EEALLJ2SE
          主站蜘蛛池模板: 太湖县| 灯塔市| 息烽县| 桃园市| 南汇区| 武隆县| 攀枝花市| 洛南县| 大厂| 岳普湖县| 扎兰屯市| 那曲县| 丹寨县| 固始县| 淮北市| 时尚| 洱源县| 淅川县| 甘孜| 惠安县| 台中市| 射阳县| 钦州市| 长白| 鄂托克旗| 濉溪县| 雅安市| 洛隆县| 称多县| 隆化县| 郯城县| 临沂市| 错那县| 威信县| 新竹县| 通渭县| 通州区| 南丹县| 梁山县| 曲沃县| 庆阳市|