Tomcat иногда выбирает неправильный сервлет

#java #tomcat #servlets #url-routing

#java #tomcat #сервлеты #url-маршрутизация

Вопрос:

У меня есть веб-приложение Java, которое передает страницы VXML интерпретатору VXML. В условиях постоянного трафика в тестовой лаборатории Tomcat (6.0.32), похоже, иногда выбирает неправильный сервлет для обработки следующего запроса страницы:

 http://localhost/<myapp>/Main.vxml?<some_query_params_that_get_ignored>
  

Ниже приведен полный список сервлетов, определенных в моем web.xml досье. В соответствии с этим первый сервлет всегда должен обрабатывать указанный выше URL-адрес, но в очень небольшом проценте случаев (менее 0,1% при более чем 100 тыс. запросов в течение выходных) Tomcat перенаправляет его на второй сервлет (CometControllerServlet).

 <servlet>
    <servlet-name>MainVXML</servlet-name>
    <jsp-file>/WEB-INF/jsp/vxml/Main.jsp</jsp-file>
</servlet>
<servlet-mapping>
    <servlet-name>MainVXML</servlet-name>
    <url-pattern>/Main.vxml</url-pattern>
</servlet-mapping>

<servlet>
   <servlet-name>ABPAsync</servlet-name>
   <servlet-class>com.avaya.cc.aaeplite.web.CometControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ABPAsync</servlet-name>
    <url-pattern>/async/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>ABP</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ABP</servlet-name>
    <url-pattern>/app/*</url-pattern>
</servlet-mapping>
  

Следующие события в выводе трассировки из самого последнего запуска трафика указывают на время их … несколько разбросаны, поэтому трудно что-либо прочитать.

 27 16:29:54.880 ERROR <http-6080-exec-2    > [ite.web.CometControllerServlet]  perform() Invalid Request Type: Main.vxml
27 17:36:40.773 ERROR <http-6080-exec-2    > [ite.web.CometControllerServlet]  perform() Invalid Request Type: Main.vxml
27 19:08:18.705 ERROR <http-6080-exec-4    > [ite.web.CometControllerServlet]  perform() Invalid Request Type: Main.vxml
27 19:19:58.799 ERROR <http-6080-exec-5    > [ite.web.CometControllerServlet]  perform() Invalid Request Type: Main.vxml
27 19:49:14.688 ERROR <http-6080-exec-1    > [ite.web.CometControllerServlet]  perform() Invalid Request Type: Main.vxml
27 19:49:34.721 ERROR <http-6080-exec-3    > [ite.web.CometControllerServlet]  perform() Invalid Request Type: Main.vxml
28 07:15:30.835 ERROR <http-6080-exec-7    > [ite.web.CometControllerServlet]  perform() Invalid Request Type: Main.vxml
  

Оцените любые мысли, которые могут возникнуть у людей о том, почему это происходит.

Комментарии:

1. не могли бы вы ввести фильтр для регистрации URL-адресов, фактически запрошенных в этих запросах?

2. Возможно ли, что относительный URL-адрес в сгенерированном VXML пытается получить доступ /async/Main.vxml ?

3. rsp — я проверил из журналов интерпретатора VXML, что это не так. Gandalf — интерпретатор VXML в любом случае регистрирует эту информацию для меня. Хотя хороший вопрос. Я смотрю, не вызывает ли что-то там у меня проблем. Я забыл при публикации, что URL-адрес запроса также включает часть запроса, которую я игнорирую в настоящее время. Я думаю, что приведенный выше шаблон url должен безопасно обрабатывать это?

4. Гэндальф — я подтвердил, что при возникновении ошибки в URL-адресах запросов нет ничего особенного. Единственное различие в каждом запросе — это строка идентификатора сеанса в конце URL-адреса, которая содержит только шестнадцатеричные символы, поэтому ничего, что могло бы сбить Tomcat с толку.

5. Какой интерпретатор VXML вы используете? Можете ли вы воспроизвести проблему, используя скрипт JMeter для генерации нагрузки?