Я пытаюсь реализовать сервлет, который получает необработанные запросы, и решает их обработать или перенаправить на другой сервер. Он похож на балансировщик нагрузки, где полученный запрос отправляется в один из пунктов назначения (в моем случае 2). Один из пунктов назначения - удаленный (на другом хосте). Кроме того, запросы могут поступать в корень (http://mycompany.com/).
Поскольку я хочу получать необработанные запросы, я реализовал свой собственный сервлет (подклассификация HttpServlet
), и это отлично работает. Мой сервлет выглядит так:
public class MyProxyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
processOrForward(req, resp);
}
// also doGet(), doHead(), ...
}
Поскольку служба, которую я хочу обработать, может отправлять запросы корневому файлу, я хотел бы отобразить свой сервлет как сервлет по умолчанию, тем самым получив любой запрос, который не имеет явного отображения сервлета. Предположим, что мое имя сервлета является "myservlet" и работает вдоль другого сервлета "foo", я ожидаю, что все запросы в форме http://mycompany.com/foo/... для доставки в foo и все остальное (например,/,/bar/...,/myservlet/...) в "myservlet". Рассматривая более ранние сообщения (например, корневое сопоставление здесь и здесь или переписывание URL здесь), я думал, что понял, но это не сработает.
Вот мой 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-шаблона я попробовал
"/" and "/*" and empty (i.e., <url-pattern></url-pattern>), all behave the same -->
Requests to root (/)goes to tomcat default servlet
Requests to /myservlet/... are handled by "myservlet"
Requests to /fubar/... are always 404
Есть ли способ повернуть мой сервлет по умолчанию. I.e, любой запрос, который не привязывается к сервлету, не подходит для моего (это даже приемлемо для получения всех запросов, поскольку я могу развернуть этот сервлет в своем собственном контейнере). В случае, если это имеет значение, я использую Tomcat 7.0.30 на Ubuntu 12.10.