嵌入式的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中没有什么值得真正分享的。它所做的只是创建一个新的阀门实例,让我们读取配置文件并将其作为上下文阀门添加到工厂中。而已。 –