Я использую Tomcat 5.5.4, и у меня работает сервлет без проблем. Однако я хотел бы настроить сопоставление для запуска сервлета только при отправке URL-адреса, содержащего определенную строку запроса.
Прямо сейчас в web.xml у меня есть:
<servlet-mapping>
<servlet-name>MyServer</servlet-name>
<url-pattern>/go/*</url-pattern>
</servlet-mapping>
Если браузер отправляет http://localhost/MyServer/go?P=123, сервлет запускается и все хорошо. Тем не менее, я хотел бы запустить этот сервлет, только если URL-адрес точно такой, как показано. К сожалению, прямо сейчас, если URL-адрес http://localhost/MyServer/go?P=AnyDarnThing, сервлет все еще запускается. Я попытался настроить следующее:
<url-pattern>/go?P=123</url-pattern>
но это приводит к тому, что запрошенный ресурс (/ MyServer / go) недоступен.
Я пробовал многочисленные варианты (цитируя строку, ...) в приведенном выше шаблоне URL, но я всегда получаю вышеуказанную ошибку. Я замечаю, что если я (в целях отладки) опускаю "?" как в
<url-pattern>/goP=123</url-pattern>
Я больше не получаю сообщение об ошибке, и сервер запускается (но, конечно, он не отвечает на «строку запроса», потому что она не сформирована должным образом.) Это наводит на мысль, что «?» вызывает проблему в отображении. Я попытался заменить его эквивалентным символом URL следующим образом:
<url-pattern>/go%3FP=123</url-pattern>
но это дает тот же результат, только что описанный выше, когда я пытался сбросить «?» в целом.
Я понимаю, что могу разрешить запуск сервлета при отправке любой строки запроса, а затем «игнорировать» запрос для всех, кроме одного, который мне небезразличен, но есть причина, по которой я предпочел бы не запускать сервлет, чтобы начать с. Итак, мой вопрос: как я могу настроить сервлет так, чтобы он запускался только при включении определенной строки запроса?
Спасибо.