tomcat相對路徑

String tomcat_path = System.getProperty( "user.dir" ).replace( "\\" "/" ) + "/../webapps/項目名稱" ; //這個方法能夠取得tomcat下你的項目的絕對路徑
 
File file =  new   File(tomcat_path+ "你的文件名" );



// FrontEnd Plus GUI for JAD // DeCompiled : PropertyManager.class package tools; import java.io.*; import java.util.*; public class PropertyManager { private static PropertyManager manager = null; private static Object managerLock = new Object(); private static String propsName = "/elearning.properties"; private Properties properties; private Object propertiesLock; private String resourceURI; public PropertyManager() { properties = null; propertiesLock = new Object(); } public static String getProperty(String s) { if (manager == null) synchronized (managerLock) { if (manager == null) manager = new PropertyManager(propsName); } return manager.getProp(s); } public static void setProperty(String s, String s1) { if (manager == null) synchronized (managerLock) { if (manager == null) manager = new PropertyManager(propsName); } manager.setProp(s, s1); } public static void deleteProperty(String s) { if (manager == null) synchronized (managerLock) { if (manager == null) manager = new PropertyManager(propsName); } manager.deleteProp(s); } public static Enumeration propertyNames() { if (manager == null) synchronized (managerLock) { if (manager == null) manager = new PropertyManager(propsName); } return manager.propNames(); } public static boolean propertyFileIsReadable() { if (manager == null) synchronized (managerLock) { if (manager == null) manager = new PropertyManager(propsName); } return manager.propFileIsReadable(); } public static boolean propertyFileIsWritable() { if (manager == null) synchronized (managerLock) { if (manager == null) manager = new PropertyManager(propsName); } return manager.propFileIsWritable(); } public static boolean propertyFileExists() { if (manager == null) synchronized (managerLock) { if (manager == null) manager = new PropertyManager(propsName); } return manager.propFileExists(); } private PropertyManager(String s) { properties = null; propertiesLock = new Object(); resourceURI = s; } protected String getProp(String s) { if (properties == null) synchronized (propertiesLock) { if (properties == null) loadProps(); } String s1 = properties.getProperty(s); if (s1 == null) return null; else return s1.trim(); } protected void setProp(String s, String s1) { synchronized (propertiesLock) { if (properties == null) loadProps(); properties.setProperty(s, s1); saveProps(); } } protected void deleteProp(String s) { synchronized (propertiesLock) { if (properties == null) loadProps(); properties.remove(s); saveProps(); } } protected Enumeration propNames() { if (properties == null) synchronized (propertiesLock) { if (properties == null) loadProps(); } return properties.propertyNames(); } private void loadProps() { properties = new Properties(); InputStream inputstream = null; try { inputstream = getClass().getResourceAsStream(resourceURI); properties.load(inputstream); } catch (Exception exception) { exception.printStackTrace(); } finally { try { inputstream.close(); } catch (Exception exception2) { } } } private void saveProps() { String s = properties.getProperty("path").trim(); FileOutputStream fileoutputstream = null; try { fileoutputstream = new FileOutputStream(s); properties.store(fileoutputstream, "elearning.properties -- " + new Date()); } catch (Exception exception) { exception.printStackTrace(); } finally { try { fileoutputstream.close(); } catch (Exception exception2) { } } } public boolean propFileIsReadable() { try { InputStream inputstream = getClass().getResourceAsStream( resourceURI); return true; } catch (Exception exception) { return false; } } public boolean propFileExists() { /*  * String s = getProp("path"); if (s == null) return false; File file =  * new File(s); return file.isFile();  */ return true; } public boolean propFileIsWritable() { String s = getProp("path"); File file = new File(s); if (file.isFile()) return file.canWrite(); else return false; } public static void main(String[] args) { System.out.println(PropertyManager.getProperty("DEFAULTALIAS_2")); } }








第一步:css

Eclipse新建一個Dynamic Web Project,設想是以Mayaa+Html的方式來處理Web的表示層,方便進行頁面設計。html

目錄結構以下:java

WebContentweb

      +cssapache

      +imgapi

      -WEB-INF瀏覽器

         -index.htmltomcat

         -index.mayaaapp

 

第二步:webapp

用Dreamweaver進行html頁面的設計,相關的圖片和css文件都是相對路徑(如:../css/style.css),頁面設計完成之後,能正常在瀏覽器裏顯示,也能在Eclipse正常預覽。

 

第三步:

回到Eclipse作一些動態處理,而後Run on server,啓動Tomcat,運行Web。

 

此時,問題出現了,經過Tomcat運行的index.html沒法找到css和image資源,最初覺得是mayaa的問題,結果發現,把瀏覽器中顯示不正確的頁面保存覆蓋index.html後,頁面能正常顯示了,以此得知,仍是相對路徑的設置問題。

有個想法閃過,既然網站根目錄是WebContent,那麼何不試試把路徑改爲css/style.css呢,果真,這樣就能正常顯示了。

可是在Eclipse和Dreamweaven中都不能可視化編寫了,只能再手動把路徑改過來。

雖然有點麻煩,暫時就先這樣處理了。

 

 

//得到上下文
DirContext dirContext = DirContextURLStreamHandler.get();
//查詢templates這個目錄資源
Object obj = dirContext.lookup("/templates");
FileDirContext fdc;
String webrootPath;
// 判斷取出來的對象是否是FileDirContext
// 也就是判斷這個資源名對應的資源是否是目錄資源
if (obj instanceof FileDirContext) {
    fdc = (FileDirContext) obj;
    // 獲取web項目根目錄的絕對路徑
    webrootPath = fdc.getDocBase();
}

String templatesPath = webrootPath + "/tempaltes";
上面的代碼先得到目錄上下文,而後得到目錄資源。這裏判斷了一下得到Object是否是FileDirContext,在jndi中,全部的目錄資源都被 抽象成FileDirContext這個對象。若是是文件就會被抽象成FileDirContext.FileResource這個對象。
  若是不是目錄資源,好比是一個文件資源,那返回的ProxyDirContext這個對象,得到文件資源的方法在後面講。
  可是,看apache的api,會發現你是沒有辦法拿到FileResource這個對象,由於目前的api沒有暴露出來。雖然在debug的時候會發 現,FileDirContext裏面已經有屬性(具體那個屬性忘了)保存着我想要的東西了,可是就是沒有辦法經過api來獲得這個東西。着實鬱悶了一 把。
  我嘗試了各類方法,看了幾遍api,都沒有找到可以從FileDirContext裏面直接獲取我想要的屬性的方法(也就是templates目錄的絕對 路徑)。最後發現FileDirContext有個getDocBase()方法,可以拿到web項目的根目錄的絕對路徑。
  後來我想了一下,其實拿到這個根目錄的絕對路徑基本也就足夠了,由於咱們在web項目中指定資源的相對路徑時,一般都是從webroot開始的。估計也是由於這個,你們在制定相對路徑時都從webroot開始制定。
  拿到webroot以後,就能夠拼接上個人模板目錄的相對路徑,而後得到模板目錄的絕對路徑了。爲了方便,能夠把這個相對路徑作成Bean的一個屬性,而後在Spring的配置文件中設定。若是想更方便,那就用maven。在一個外部文件中設定這個值。
  下面來講說獲取文件資源,獲取文件資源的思路基本相同,只不過換了另一個類而已。若是是文件資源能夠用下面的代碼:

//得到上下文DirContext dirContext = DirContextURLStreamHandler.get();//查詢templates這個目錄資源Object obj = dirContext.lookup("/templates/test.vm");FileDirContext fdc;String webrootPath;// 判斷取出來的對象是否是FileDirContext// 也就是判斷這個資源名對應的資源是否是目錄資源if (obj instanceof ProxyDirContext) {    fdc = (FileDirContext) obj;    // 獲取web項目根目錄的絕對路徑    webrootPath = fdc.getDocBase();}String templatesPath = webrootPath + "/tempaltes/test.vm";區別就在紅色標註的9,15兩行代碼,lookup返回的類不同了,變成ProxyDirContext了。ProxyDirContext中也有一個getDocBase方法,經過它拿到web項目的絕對路徑,而後拼接上文件資源的相對路徑也就拿到了完整的路徑。

相關文章
相關標籤/搜索