【发布时间】:2012-12-22 18:54:33
【问题描述】:
我正在尝试实现一个获取原始请求的 servlet,并决定要么处理它们,要么将它们转发到另一个后端服务器。它类似于负载均衡器,其中接收到的请求被转发到(在我的情况下为 2)目的地之一。其中一个目的地是远程的(在另一台主机上)。此外,请求可能会到达根 (http://mycompany.com/)。
因为我想获取原始请求,所以我实现了自己的 servlet(子类化 HttpServlet),效果很好。我的 servlet 看起来像:
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”。查看之前的帖子(例如,根映射here 和here,或url 重写here),我以为我想通了,但它不起作用。
这是我的 web.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-pattern我试过了
"/" 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。
【问题讨论】:
-
我认为我的问题与this 相同(或者这个问题的答案将解决我遇到的问题)
-
如果我理解正确,那么您说的是如何在 Tomcat 中设置后备 Web 应用程序。如果是这样,那么摆弄 web.xml (另一个 web 应用程序)将无济于事。相反,您应该查看 Tomcat 的文档如何存档,即您必须更改 Tomcat 的配置。
标签: java tomcat servlets url-pattern