Я выполняю рефакторинг простого старого приложения на основе сервлетов в свежий SpringBoot, потому что я влюблен в экосистему Spring.
В этом унаследованном приложении есть некоторая бизнес-логика, основанная на HttpServletRequest.getServletPath()
.( Да, это не красиво, но я не могу изменить это, потому что это внешняя библиотека ).
Поэтому мне нужно обработать все запросы http и ответ на службу .
Первый способ, с ServletRegistrationBean
, сопоставленным с "/ byservlet / *"
@Bean
public ServletRegistrationBean<Servlet> servletRegistrationBean(Servlet myServlet) {
return new ServletRegistrationBean<Servlet>(myServlet, "/byservlet/*");
}
Второй способ, с оболочкой RestControler
, сопоставленной с "byrequestmapping / *"
Я предпочитаю использовать всю весеннюю экосистему
@RestController
public class USWServiceControler {
private HttpServlet servlet;
public USWServiceControler(Httpservlet) {
this.servlet = servlet;
}
@RequestMapping("byrequestmapping/*"})
public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
servlet.service(request, response);
}
Разница в стоимости для getServletPath
С запросом типа http://localhost:8080/byservlet/foo Я получаю
SERVLET_PATH : /byservlet
PATH_INFO : /foo
С запросом типа
С запросом типа http://localhost:8080/byservlet/foo Я получаю
SERVLET_PATH : /byrequestmapping/foo
PATH_INFO : null
Почему и Как получить servletPath как старый файлсервлет?
Вот на вопросы:)
Спасибо