2009-11-02 66 views
4

this question相關的是一個默認servlet的概念,該servlet將靜態內容作爲標準(甚至事實上的)跨servlet容器提供服務,還是將其用於Tomcat/Jetty的部署?默認Servlet是(事實上)標準嗎?

例如,1顯示獲取默認調度此方法:

final RequestDispatcher rd = getServletContext().getNamedDispatcher("default"); 

從快速搜索似乎這也將在碼頭工作。這種技術對於獲得默認的servlet有多寬泛?對於有默認servlet的servlet容器,它總是一個靜態內容servlet嗎?

+0

我不明白這個問題。 Servlet應該在所有實現了正確標準的servlet容器中工作。我想,所有的servlet容器都會有某種後備servlet。否則它會相當有限...... – 2009-11-02 12:48:16

回答

4

這不是一個標準,但沒有它的appservers不能提供靜態內容。這至關重要。

[編輯]我看到你編輯,以更清晰的方式闡述了你的問題:

例如,[1]顯示了這種方法 獲取默認調度:

最終RequestDispatcher的RD = getServletContext()。getNamedDispatcher(「default」);

從快速搜索看來,這個 也可以在Jetty上工作。 這種技術如何工作以獲得 默認的servlet?對於具有默認的 servlet的servlet 容器,是否始終是靜態內容 servlet?

在這種情況下,它可以一個事實上的標準,但我不會依靠多對,並肯定不是針對具體的實施細節,甚至事實上的標準代碼。問問自己:將請求分派給defaultservlet有什麼意義/價值?確切地說,沒有。

+0

「問問自己:將請求發送到defaultservlet有什麼意義/價值?完全沒有。」我現在只需要使用它,我是邪惡? – amirouche 2011-03-15 20:25:18

+1

@FMR:它歸結爲你根本不需要發送它。如果你因爲某種原因*需要*(例如因爲你的servlet的url-pattern太泛化),那麼使用'Filter'。另見[這個答案](http://stackoverflow.com/questions/870150/how-to-access-static-resources-when-using-default-servlet/3593513#3593513)。此外,由於6.0.29之前版本的Tomcat版本存在bug,通過這種方式將映射/分派到默認servlet使得整個「WEB-INF」和「META-INF」文件夾可以公開訪問。所以是的,你是邪惡的。 – BalusC 2011-03-26 02:31:47

+0

@BalsucC,您提供的鏈接完全解決了我面臨的問題。在GAE上這是透明的,靜態文件是自動提供的。 – amirouche 2011-04-10 13:11:22

0

只要servlet容器標準是Servlet API你可以看到沒有DefaultServlet這樣的東西。最廣泛使用的servlet容器有一些默認設置可用於開箱即用。但是實現某個接口或抽象類並不是「標準」的要求,因此容器可以運行。 (即使沒有任何servlet,容器也可以運行)。

2

Servlet不需要默認的servlet。但是,如果定義了名稱,則該名稱必須是「默認」。無法想象沒有默認servlet的容器​​。所以你可以認爲它是標準的。

見部分SRV.11.1,

4.如果沒有以前的三個規則導致一個servlet匹配,容器將 嘗試以服務內容適用於請求的資源。如果爲應用程序定義了一個「默認」的servlet,它將被使用。