2015-03-09 3 views
0

Im развертывание веб-приложения для tomcat 8 (переименование в ROOT.war), поскольку шаблон url был установлен в/Я думал, что все запросы будут направлены на сервлет. Но это не так, в конце концов я понял, что, если я начинаю URL с? таких какПочему сервлет не вызывается для всех запросов

http://localhost:8080/?search=fred 

не будет работать, но без? он будет работать

http://localhost:8080/search=fred 

Почему это?

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> 
<display-name>Widget</display-name> 
<servlet> 
<servlet-name>WidgetServlet</servlet-name> 
<servlet-class>com.jthink.WidgetServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>WidgetServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
</web-app> 
+0

'?' В сегменте пути не допускается, поэтому он не работает. Я обновил свой ответ несколькими подробностями, посмотрю, помогает ли это – Arkantos

+0

. Я считаю, что мой анализ неверен. Попробуйте примерное веб-приложение в моем локальном каталоге с localhost: 8080/MavenWeb /? Src = fld, мой сервлет смог перехватить его без каких-либо проблем. – Arkantos

ответ

1

Если вы хотите, чтобы ваш сервлет обслуживать все URL, то url-pattern должно быть, как это

<url-pattern>/*</url-pattern>

Как следует из названия, это должно быть RegEx шаблон. Когда вы говорите / - это означает, что нужно искать однократное появление / в URL. Но когда у вас есть несколько косую черту в URL, что-то вроде

http://stackoverflow.com/questions/28945202/

, то он должен быть /* что означает, что вы просите его искать ноль или более вхождений слэш.

Надеюсь, что это ясно:

+0

У вас все еще есть проблемы, измененные на/*, но затем каждый URL-адрес (например, ссылки ches stylesheets и изображения) на возвращаемую страницу также обрабатывался сервлетом. Поэтому я тогда переосмыслил это так, что сервлет обрабатывает только действие/действие, но все же я хотел, чтобы он обрабатывал такие вещи, как/action/id1,/action/id2, и что повторно делал шаблон/действие/*, и теперь я снова получаю проблему с ссылкой на таблицу стилей –

+0

У вас есть «действие» в URL-адресах статических файлов? – Arkantos

+0

Можете ли вы разместить образец URL-адреса для статического файла? – Arkantos

0

Отображается сервлет. Вам нужно добавить подстановочный знак.

<servlet-mapping> 
    <servlet-name>WidgetServlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
+0

спасибо, что это работает, но я не понимаю, почему без звездочки первый url работает, а второй не –

Смежные вопросы