将特定的 servlet 映射为 Tomcat 中的默认 servlet
我正在尝试实现一个获取原始请求的servlet,并决定要么处理它们,要么将它们转发到另一个后端服务器。它类似于负载均衡器,其中收到的请求被转发到其中一个(在我的情况下是2)目标。其中一个目标是远程的(在另一台主机上)。此外,请求可以到达根目录(http://mycompany.com/)。
由于我想获取原始请求,因此我实现了自己的servlet(子类化),这效果很好。我的服务包看起来像这样:HttpServlet
public class MyProxyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
processOrForward(req, resp);
}
// also doGet(), doHead(), ...
}
由于我要处理的服务可能会将请求发送到根目录,因此我想将我的 servlet 映射为默认的 servlet,从而接收任何没有显式 servlet 映射的请求。假设我的 servlet 的名称是 “myservlet”,并且与另一个 servlet 的 “foo” 一起运行,我希望所有请求都以 http://mycompany.com/foo/ 的形式出现...交付给 foo,以及其他所有内容(例如,/, /bar/..., /myservlet/...) 到 “myservlet”。看看早期的帖子(例如,这里和这里的根映射,或这里的url重写),我以为我想通了,但它不起作用。
这是我的网络.xml:
<web-app>
<servlet>
<servlet-name>ProxyServlet</servlet-name>
<servlet-class>com.mycompany.MyProxyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
在上面的web.xml,对于我尝试过的url模式
"/" and "/*" and empty (i.e., <url-pattern></url-pattern>), all behave the same -->
Requests to root (/)goes to tomcat's default servlet
Requests to /myservlet/... are handled by "myservlet"
Requests to /fubar/... are always 404
有没有办法将我的servlet转换为默认值。也就是说,任何没有专门映射到 servlet 的请求都会来到我的(接收所有请求甚至是可以接受的,因为我可以在自己的容器中部署这个 servlet)。如果这很重要,我在Ubuntu 12.10上使用Tomcat 7.0.30。