Бесконечный цикл с запросом, отправленным в JspServlet на WebLogic 11g - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть следующая конфигурация:

ServletA (в моем случае Apache CXFserlet - но это не важно), которая соответствует всем запросам - / *. ServletB , который выполняет отправку именованному сервлету - «jsp», если он доступен, или «JspServlet» в противном случае.

ServletA настроен так, что он пересылает ServletB все запросы JSP.Это работает отлично.

С другой стороны ServletB выполняет перенаправление на «org.apache.jasper.servlet.JSPServlet», если приложение работает на Tomcat или на «weblogic.servlet»..JSPServlet ", если я использую Oracle Weblogic.

На Tomcat все работает отлично.

В Weblogic у меня возникает следующая проблема: ServletA пересылается на ServletB пересылается на weblogic.servlet.JSPServlet.Предполагается, что JSPServlet обслуживает JSP, но это не так.Вместо этого я попадаю в бесконечный цикл ( ServletA -> ServletB -> JSPServlet -> ServletA -> ... )

Кто-нибудь имеет представление о том, что происходит внутри weblogic.servlet.JSPServlet и есть идеи, как я могу заставить Weblogic обслуживать мою JSP?Все идеи и предложения приветствуются ... Я уже потратил слишком много времени на эту проблему, но безуспешно.

ПРИМЕЧАНИЯ:

  • Протестировано на Weblogic 10.3.5;
  • Если ServletB переадресация на фиктивный сервлет, никакого цикла не происходит;
  • Пересылка выполняется с помощью RequestDispatcher, получаемого путем вызова getNamedDispatcher ("jsp") для Tomcat или getNamedDispatcher ("JspServlet")для WebLogic.

1 Ответ

1 голос
/ 25 ноября 2011

Я думаю, что это новые спецификации Servlet 2.5, которые Weblogic строго соблюдает, когда дело доходит до преобразования URL.

  • Строка пути сервлета, которая содержит только символ / (косая черта), указывает значение по умолчаниюсервлет приложения.Путь сервлета преобразуется в URI запроса минус путь контекста;в этом случае путь преобразуется в ноль.
  • Строка, начинающаяся с * (звездочка), указывает отображение расширения.

Эти изменения приводят к изменению поведения сследующие методы HttpServletRequest:

  • getPathInfo
  • getServletPath

Чтобы лучше проиллюстрировать изменение в поведении, рассмотрим запрос /abc/def.html, который разрешается в ServletA:

  • Если / отображается на ServletA, то servletPath="abc/def.html" и pathInfo=null.
  • Если /* отображается на ServletA, то servletPath="" и pathInfo="abc/def.html".

Чтобы гарантировать, что возвращаемая информация о пути не равна нулю, замените все вхождения строки отображения сервлета / (косая черта) на /*.

...