2012-12-26 66 views
2

如何通過Web容器處理http請求,比如Jboss,JBoss中假設有很多war,Jboss如何知道請求應該傳遞給其中的一個?我想如果我使用struts2。 reqeust如何最終傳遞給struts2的Action?有人能幫我弄清楚嗎?謝謝。如何使用struts2處理Jboss的http請求

更新

說你無論是在A.War和B.War象下面這樣相同的servlet映射。但他們不同的實現類的HttpServlet

<servlet-mapping> 
     <servlet-name>DeployServlet</servlet-name> 
     <url-pattern>/deploy/*</url-pattern> 
    </servlet-mapping> 

如果該URL爲/deploy/test發生什麼事到JBoss的http請求處理訂單?

更新

讓我們做一個summany,當Web容器接收HTTP請求到一定的種源(* HTML *的.jsp等),Web容器會選擇戰爭應用程序來處理這請求基於上下文xml(如server.xmltomcat中)。那麼,這場戰爭的應用程序會選擇在web.xml處理首先請求定義一個servlet ...

好,我的問題: Filter執行HTTP請求比Servlet更早?

謝謝。

+0

我們使用它來告訴容器關於struts2過濾器調度程序,並指定何時通過映射調用它,看看web.xml,瞭解服務器如何知道您需要了解服務器上下文以及它如何deply應用程序 –

+0

@UmeshAwasthi幫助查看更新的內容。謝謝。 –

回答

2

首先由http服務器接收http請求。通常Servlet容器(如tomcat)和應用服務器(如JBoss)都有內置的Web服務器。 因此Web服務器或者也被稱爲http服務器獲取請求並決定它是否可以處理它。

Web服務器可以處理靜態內容請求,如html,圖像等。如果請求是針對動態內容的,那麼它會將請求傳遞給Servlet容器。

Servlet容器是Java EE服務器(如Tomcat和JBoss AS)的一部分。 Servlet容器具有部署解析器(.xml文件),通過它可以瞭解所有已部署的應用程序。當容器開始這些配置文件被加載(並被轉換成對象)。因此,使用部署描述符映射決定請求是否有效,如果是,那麼請求將發送到適當的資源(如servlet)。

有關詳細信息,您可以閱讀Servlet的生命週期以及Contaner如何工作。

2

servlet映射將相對於應用程序上下文。如果你部署2場戰爭,他們將有2個不同的上下文。如果他們不這樣做,你會得到一個部署錯誤。你可以設置一個戰爭作爲上下文根,那麼可以說你有2場戰爭warA.war和warB.war 部署到服務器http://my_server.com

訪問在任何戰爭中的資源可以使用:

http://my_server.com/warA/somePage

http://my_server.com/warB/somePage

使用您所描述的映射是這樣http://my_server.com/warA/deploy/

如果設置任何戰爭作爲上下文根,你可以訪問的資源作爲http://my_server.com/deploy/但服務器仍然翻譯從/部署到藁/部署

所以不會有任何混亂至於哪個servlet是檢索。

+0

您的意思是,如果存在請求,請求首先會轉到某個實現類「HttpServlet」上。謝謝 –

+0

不,請求首先轉到適當的容器(包含該servlet的war)。看一下servlet部分的生命週期[這裏](http://en.wikipedia.org/wiki/Java_Servlet),它很好地解釋了這個過程。 – gebuh

+0

謝謝。請檢閱我發佈的最新內容..謝謝。 –