嵌入式的Tomcat我在一個簡單的Java應用程序中使用Spring 1.4啓動。作爲一個實驗,我決定編寫自己的servletContainer()bean,將Tomcat的RewriteValve注入到容器中。此閥門作爲全局上下文閥門添加,並應適用於所有請求。
我正在使用Tomcat 8.5.x.
因爲Valve期望配置在WEB-INF文件夾中可用,所以我設法覆蓋它的startInternal()方法,讓它讀取類路徑位置下的rewrite.config文件,該位置是containers/tomcat/rewrite.config。
該閥門讀取配置良好。該rewrite.config文件只是規定了以下規則:
^/app2.+ /app
含義,重寫URL爲/應用程序時,請求URL與/ APP 2開始。
請注意,應用程序本身部署在/ app下,而不是ROOT下。這是通過server.context-path屬性來處理的。
由於應用程序是在/應用程序部署什麼行不通
,閥門從來沒有真正/ APP 2請求被提交時調用。例如:
如果我刪除了上下文路徑和部署下根/應用程序,這是我可以觀察到:
什麼工作
使用外部Tomcat容器,如果我手動配置相同規則的閥門,並部署在/應用程序的應用程序,我可以觀察到:
- http://localhost:8080/app2正確激活閥。 url被改寫爲http://localhost:8080/app
我會做什麼錯?
我認爲,作爲本地主機不輸出的快照會更合適對其他機器可見 – emotionlessbananas
使用嵌入式tomcat和部署到獨立的tomcat是有區別的。嵌入式tomcat只監聽上下文路徑上的url(所以基本上整個服務器的根目錄已被更改!)而獨立的tomcat(沒有修改)偵聽'/'並根據url發送到正確的應用程序。因此,這裏描述的結果基本上或多或少都如我所預期的那樣。你自己的'servletContainer',它基本上是渲染默認的很沒用,添加你的代碼以獲得更多幫助。 –
你所描述的是有道理的。我的servletContainer中沒有什麼值得真正分享的。它所做的只是創建一個新的閥門實例,讓我們讀取配置文件並將其作爲上下文閥門添加到工廠中。而已。 –