2009-09-28 5 views
3

Я хочу, чтобы один из моих сервлетов (test2) обрабатывал запрос «/» (т. Е. http://localhost/), а другой сервлет (test1) обрабатывает все остальные запросы («/ *»).Отображение сервлета web.xml для подстановочных запросов

Я создал мой web.xml ниже, но проблема заключается в том, что все запросы идут к test1.jsp (даже «/» запрос)

Может кто-нибудь подскажите, как это сделать?

<servlet> 
    <servlet-name>test1</servlet-name> 
    <jsp-file>/test1.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>test1</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>test2</servlet-name> 
    <jsp-file>/test2.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>test2</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

---- EDIT -----

я понял, что мой вопрос был немного неясно и неполно. Вот пример того, что именно я хочу сделать ..

  1. http://mytestsite.com/ -> Карты для http://mytestsite.com/index.html
  2. http://mytestsite.com/servlet1 -> работает com.mytestsite.servlet1
  3. http://mytestsite.com/ * -> Карты для http://mytestsite.com/catchall.jsp (я хочу все другие запросы, которые не отображены в web.xml для сопоставления catchall.jsp)

поэтому мой web.xml выглядит следующим образом:

<servlet> 
    <servlet-name>servlet1</servlet-name> 
    <servlet-class>com.mytestsite.servlet1</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>servlet1</servlet-name> 
    <url-pattern>/servlet1</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>catchall</servlet-name> 
    <jsp-file>/catchall.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>catchall</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

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

поэтому я заметил странную проблему. когда я запрашиваю http://mytestsite.com/, он переходит к catchall.jsp перед перенаправлением на index.html. однако это происходит так быстро, что я бы даже не заметил, что он попал в catchall.jsp (но я поставил System.out.println в этом файле, и он определенно ударил его).

ответ

0

Действительно не уверен в этом, но, возможно, заказ, который вы объявляете \ на карте сервлетов, определяет приоритет. Попробуйте сначала объявить \ map test2 и посмотреть.

С наилучшими пожеланиями

0

Старайтесь не картографирование/запроса на что-либо (избавиться от test2 сервлета), и вместо этого использовать приветственный файл:

<welcome-file-list> 
    <welcome-file> 
    test2.jsp 
    </welcome-file> 
</welcome-file-list> 
1

Я думаю, ваша цель немного сбивает с толком и ломкий. Однако, чтобы ответить на ваш вопрос, попробуйте запись приветственного файла для запроса http://your-domain.com/.

<welcome-file-list> 
    <welcome-file>/test2.jsp</welcome-file> 
</welcome-file-list> 

Это является наиболее распространенным, чтобы затем test2.jsp выполнить переадресацию или вперед к какому-либо другому «контроллеру» в приложении. Таким образом, ваш MVC всегда срабатывает даже по запросам http://your-domain.com/.

Если вы согласны со мной, то ваш файл приветствия должен быть index.jsp (чтобы следовать общим соглашениям). Код в index.jsp - это однострочный переадресация на «приветственный» сервлет.

+0

спасибо, что нашли время, чтобы рассмотреть вопрос, который у меня есть. Я редактировал мой вопрос выше. надеюсь, это очистит вещи ... – jmoney

1

Используйте фильтр пересылки вместо сервлета. Этот метод очень просто перехватить «/».

filter --> /* 

servlet1 --> /_some_hidden_path_1_ 
servlet2 --> /_some_hidden_path_2_ 
Смежные вопросы