перенаправление запросов на основе тела tomcat

У меня есть приложение tomcat 7, которое я могу получать запросы из внешних источников.

Большинство из них называют мою просьбу так:

http://localhost:8080/MyWeb/exRequest

и я создаю сервлет с шаблоном URL внутри приложения MyWeb.

Однако один внешний источник должен отправить запрос следующим образом:

http://localhost:8080/

и в теле:

<xml name="test" />

Поскольку я не хочу объявлять общий сервер (например, по умолчанию для tomcat), поскольку это означает, что любой запрос должен будет проходить через мой сервлет, я решил изменить index.jsp ROOT, чтобы перенаправить на мой сервлет.

Это лучший вариант?

Есть ли возможность создать сервлет по умолчанию, который будет вызываться, только если в теле есть специальный параметр?

ОТРЕДАКТИРОВАНО

Обратите внимание, что я получаю запросы к localhost: 8080, а не к localhost: 8080/MyWeb - это обычно для tomcat, а не для конкретного веб-приложения.


person Dejell    schedule 05.07.2011    source источник


Ответы (2)


Вы не можете выбрать сервлет для вызова на основе тела запроса, но вы можете установить сервлет в качестве «файла приветствия» в вашем файле web.xml.

<servlet>
  <servlet-name>index</servlet-name>
  <servlet-class>com.y.MyWelcomeServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>index</servlet-name>
  <url-pattern>/index</url-pattern>
</servlet-mapping>

<welcome-file-list>
  <welcome-file>index</welcome-file>
</welcome-file-list>

Если вы хотите сохранить «приветственную» функцию некоторого существующего index.jsp, ваш сервлет может пересылать запросы без правильного XML в теле файла index.jsp, расположенного в каталоге WEB-INF.

person erickson    schedule 05.07.2011
comment
Проблема в том, что я получаю уведомление на tomcat: localhost: 8080, а не на localhost: 8080/MyWeb, где я мог бы найти эти определения в web.xml MyWeb. - person Dejell; 06.07.2011
comment
@Odelya - Хорошо, теперь понятно. Если клиент, который делает этот запрос, настолько негибок, что не может переключиться на правильный URL-адрес, он вряд ли последует ответу о перенаправлении. Похоже, вам лучше всего переместить все веб-приложение в ROOT, а затем повторно сопоставить существующие сервлеты, чтобы включить старое имя контекста приложения в свой путь. Например, если бы сервлет был exRequest, а контекст MyWeb, он переместился бы в контекст ROOT и был бы отображен как MyWeb/exRequest. - person erickson; 06.07.2011
comment
Это именно то, что я думал сделать. переместить приложение в корень - person Dejell; 06.07.2011

Нет, но вы можете создать Filter и перенаправить/перенаправить на определенный сервлет всякий раз, когда запрос соответствует определенным условиям.

При использовании сервлета 3.0 сопоставьте его с @WebFilter, в противном случае используйте web.xml и <filter> + <filter-mapping>. Вы должны сопоставить его с выполнением перед сервлетом по умолчанию.

person Bozho    schedule 05.07.2011
comment
Нет - это вариант или лучше создать фильтр на ВСЕ запросы? Так как когда я использую изменение index.jsp ROOT, это ТОЛЬКО для запроса localhost:8080/, иначе это будет для всех запросов - person Dejell; 06.07.2011
comment
Прохождение через фильтр незначительно с точки зрения производительности. И вы можете сопоставить фильтр только с / - person Bozho; 06.07.2011
comment
Я ценю вашу помощь, но это не то, что я имел в виду. Смотрите отредактированный вопрос, чтобы объяснить больше - person Dejell; 06.07.2011
comment
редактирование не сильно меняет дело — вы можете развернуть ROOT.war со своими собственными определениями фильтров - person Bozho; 06.07.2011
comment
@Bonzho Я вообще-то думал, что лучше создать прокси в tomcat для пересылки localhost:8082/ на сервлет (внешний веднор может изменить порт - person Dejell; 06.07.2011