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項目的絕對路徑,而後拼接上文件資源的相對路徑也就拿到了完整的路徑。