2011-10-22 57 views
3

讀取靜態文件,我想告訴我的Java Servlet忽略對靜態文件調用,例如,如果該文件存在 - 剛剛返回實際的文件,而無需實際加載的servlet。從servlet目錄的

在我的例子,我有在NetBeans一個MyServlet,而「網頁」目錄下我放在image.jpg文件。

接下來,我生成.war文件並把它放在下的Tomcat/web應用

當我試圖使爲localhost的請求:8080/MyServlet/image.jpg的 - 未加載的文件中,servlet是改爲執行。

我想要的是,如果該文件存在 - 它會返回它,否則將運行Servlet。

有沒有一個快速的方法來實現它?

+0

混淆了servlet和Web應用程序。通常,靜態內容由標準(依賴於容器的)servlet提供,並且不進行任何修改。你的servlet映射是怎樣的(我想這就像'/ *')? – home

+0

/ galchen

回答

0

對你最有可能只需要使用http://localhost:8080/image.jpg(即沒有在URL中MyServlet部分)的靜態文件

+0

文件找不到錯誤 – galchen

+0

你確定你已經把那image.jpg的web.xml中表示是Web根文件夾中? –

1

通常你會通過你的servlet映射或把你靜態資源遠離你的servlet映射處理這。否則,如果請求映射到您的servlet,您需要(a)檢查servlet中的文件,並重定向到實際的文件名或自己將圖像流回流,或者(b)編寫一個過濾器對於您的web應用程序的結構足夠了解,以查看請求是否應該由您的servlet或容器來處理。

如果您的描述用例它會更容易更有幫助。

+0

我的servlet-mapping將url-pattern設置爲/,現在好像流式傳輸文件就是解決方案 – galchen

2

映射你的servlet到//*不是標準方式用於實現servlet。一般來說,您可以將全局(控制器)servlet映射到像/myServlet/*這樣的路徑。 Tomcat的默認servlet已經可用於提供靜態內容。它的配置爲<tomcat>/conf/web.xml。從聯文檔中提取出來:

<!-- The default servlet for all web applications, that serves static  --> 
    <!-- resources. It processes all requests that are not mapped to other --> 
    <!-- servlets with servlet mappings (defined either here or in your own --> 

如果您按照您的應用上述方法的URL可能看起來像這樣:

靜態資源:http://myserver/myWAR/images/image.gif

你的servlet的網址:http://myserver/myWAR/myServlet/*(*:=通配符)

當然,像卸載靜態內容到外部Web服務器更復雜的選項。您也可以重寫標準配置,但在大多數情況下,這不是必需的(至少在我的經驗中)。