2011-07-12 36 views
1

我正在嘗試動態創建RSS源,並將其存儲在服務器上,以便訪問創建的RSS源時,我只需從瀏覽器中輸入URL即可。是否有可能這樣做?我可以使用FileOutputStream將文件保存在服務器上嗎?

我可以創建RSS源,但是當我嘗試使用FileOutputStream("WebContent/filename.xml")將它保存在服務器上時,它給我FileNotFoundException。我的方法是否正確,還是有任何其他方式將文件存儲在服務器上並使用簡單的URL訪問它?

我正在使用spring schedulers來每分鐘運行我的應用程序來動態地創建RSS feed。

回答

3

一般來說,你不會「生成&店」這樣的東西。你動態地緩存它們(http緩存(用於客戶端)和內部緩存(這樣你不會多次獲取))。 Spring 3.1緩存抽象可以輕鬆實現。

爲了將文件存儲到服務器,您需要知道webapp的根目錄是什麼。你可以通過request.getServletContext().getRealPath("/")得到它。請注意,這些文件將在取消部署後消失,因此您可能會考慮將它們存儲在絕對的應用外位置。另外請注意,你不能將它們寫入未爆炸的戰爭檔案中。另一件事 - 默認情況下沒有WebContent - 它直接是項目,但它不對應於Web應用程序可分發的目錄。

+0

感謝您的答覆Bozho。這是事情,當我只是給文件名如[FileOutputStream(「filename.xml」)]它不會引發任何異常。在這種情況下,文件是否存儲在某個地方? – Ritesh

+0

是的,在默認的用戶目錄下。如果該文件是臨時文件,則可以使用'File.createTempFile(..)' – Bozho

+0

實際上我正在使用XMLEventWriter使用XMLOutputFactory寫入文件。所以我想我不能使用File.createTempFile。我可以在存儲在默認用戶目錄中時使用URL訪問該文件嗎? – Ritesh

2

我的建議是使用HTTP守護進程(可能是Apache)在服務器上公開一個目錄,然後讓應用程序寫在那裏。據我所知,你不能在你的WAR/EAR中寫入文件。

0

賈斯汀說的是對的,但我會進一步說,你是否真的需要將它存儲在磁盤上?

如果它不是一個大文件,(我的賭注不會),那麼只需要將url指向一個servlet,它從緩存內存中返回它,然後讓該servlet每分鐘重建一次。

1

您正在混淆您用來存儲項目源文件的目錄以及在服務器上部署應用程序的目錄。

首先定義如何以及在哪裏部署應用程序(如果它是一個戰爭文件,甚至沒有根目錄),然後相應地設計您的應用程序。

如果你想保持可移植性,你應該定義一個配置參數(在你的web.xml中)定義存儲外部文件的位置,並讓servlet從這個目錄讀取文件並將它們的內容寫入響應輸出流。

但是,您也可以將服務器配置爲從特定目錄提供靜態文件並將XML文件寫入此目錄。閱讀您的服務器的文檔,以瞭解是否以及如何做到這一點。

0

這是我在Servlet方法doGet(...)中的解決方案。它不會將RSS保存在文件系統中,它會在每次(有請求時)時創建。我把它寫成HTTP響應。

response.setContentType("application/rss+xml"); 
response.setHeader("Cache-Control", "no-cache"); // HTTP 1.1 
response.setHeader("Pragma", "no-cache"); // HTTP 1.0 
response.setDateHeader("Expires", 0); // prevents caching at the proxy server 

PrintWriter out = response.getWriter(); 
out.print("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); 
[...] 
out.print("</xml>"); 
out.flush(); 
out.close(); 
// set header information 

當它需要把它寫在文件系統中,這裏是一個解決方案,我用它來在一個servlet方法其再次保存的圖像在服務器上,:

String absoluteFilesystemPath = getServletContext().getRealPath("/"); 
System.out.println(absoluteFilesystemPath); 
File f = new File(absoluteFilesystemPath+"file.xml") 
相關問題