Вы можете просто сопоставить сервлет с более чем одним шаблоном URL:
<servlet-mapping>
<servlet-name>fooServlet</servlet-name>
<url-pattern>/xxx/*</url-pattern>
<url-pattern>/yyy/*</url-pattern>
</servlet-mapping>
Или когда вы уже используете Servlet 3.0:
@WebServlet(urlPatterns={"/xxx/*", "/yyy/*"})
public class FooServlet extends HttpServlet {
// ...
}
При необходимости вы можете использовать /yyy/xxx/*
вместо /yyy/*
.
Или, если вы собираетесь отсоединить отображение сервлета, вы также можете создать Filter
, который перенаправляет запросы на /yyy/xxx/*
на /xxx/*
. Примерно так (основные проверки опущены):
@WebFilter("/yyy/xxx/*")
public class FooFilter implements Filter {
// ...
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
String oldURI = req.getRequestURI().substring(req.getContextPath().length() + 1);
String newURI = oldURI.substring(oldURI.indexOf("/"));
req.getRequestDispatcher(newURI).forward(request, response);
}
// ...
}
Если вы намерены изменить URL-адрес в адресной строке браузера с /yyy/xxx/*
на /xxx/*
, тогда вам нужно использовать HttpServletResponse#sendRedirect()
вместо RequestDispatcher#forward()
:
// ...
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect(newURI);