Guice 3.0 request.getRequestDispatcher (..). Вперед предваряющий путь сервлета guice - PullRequest
0 голосов
/ 02 февраля 2012

Мы используем JBoss 5.1 с Guice 3.0 и нам нужно перенаправить наш сервлет Guice на внешний сервлет, используя следующую технику:

@Inject HttpServletRequest request;
@Inject HttpServletResponse response;

@GET
@Produces("application/octet-stream") 
@Path("/get/1234")
public void fwd() throws ServletException, IOException {
    String newURL = "/ExternalServlet?action=1234";
    RequestDispatcher dispatcher = request.getRequestDispatcher(newURL);        
    dispatcher.forward(request, response);
}

На нескольких наших серверах разработки это перенаправляет на правильный URL (например, localhost / ourApp / ExternalServlet), но на нашем промежуточном сервере он предшествует / get / 1234, поэтому URL пересылается на localhost / ourApp / get / 1234 / ExternalServletПеренаправление работает.

Есть идеи, почему форвард предпочитает сервлет Guice?Спасибо.

1 Ответ

0 голосов
/ 21 февраля 2012

Я не уверен в точной причине этого, но вы должны быть в состоянии обойти это, используя HttpServletRequestWrapper.Вы, вероятно, можете переопределить то, что getServletPath () или getContextPath () возвращают, чтобы получить желаемый эффект.

Другой вариант - попробовать удаленную отладку вашего промежуточного сервера и перейти к коду диспетчера, чтобы точно узнать, куда он идетнеправильно.

...