Как определить URL-адрес не найден сервлет сопоставления в web.xml? - PullRequest
2 голосов
/ 12 июня 2010

У меня есть веб-приложение, я хочу определить файл index.jsp, который будет отображаться, когда введенный URL-адрес будет выглядеть так:

www.mysite.com
www.mysite.com/
www.mysite.com/index.jsp

но если введен любой другой URL, например:

wwww.mysite.com/g

Я хочу, чтобы конкретный сервлет обработал запрос. В моем файле web.xml я делаю это:

<servlet>
    <servlet-name>ServletCore</servlet-name>
    <servlet-class>com.me.test.ServletCore</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServletCore</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

, поэтому сервлет ServletCore может получить любой URL, но, как и ожидалось, он захватывает даже:

www.mysite.com/index.jsp

тип URL. Как я могу определить это таким образом, чтобы работать так, как я хочу?

Спасибо

Ответы [ 3 ]

4 голосов
/ 12 июня 2010

url-pattern из /* прослушивает каждый URL запроса. Вместо этого введите <error-page> запись в web.xml, которая прослушивает HTTP-код состояния 404 (не найден).

<error-page>
    <error-code>404</error-code>
    <location>/error</location>
</error-page>

И затем, очевидно, отобразите сервлет на url-pattern из /error или что угодно, если <location> соответствует этому.

0 голосов
/ 12 июня 2010

Просто убедитесь, что ваше веб-приложение работает как ROOT, указав каталог приложения как webapps / ROOT или используйте ROOT.war.

Затем добавьте это в ваш web.xml,

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
0 голосов
/ 12 июня 2010

Проблема в том, что сервлет займет все корневое пространство имен.Чтобы остановить это, переместите его в подпапку, затем вы можете получить то, что хотите, например:

<servlet-mapping>
    <servlet-name>ServletCore</servlet-name>
    <url-pattern>/core/*</url-pattern>
</servlet-mapping>

Затем вы можете объединить два пространства имен (корень и ядро ​​/ подкаталог), используя правила переписывания apache,Или с помощью перенаправления filter , который отправляет запрос на соответствующий URL, используя таблицу сопоставления.Это отобразит

  index.jsp -> index.jsp
  everything else -> core/$1

Так что запросы к index.jsp будут идти туда, а все остальные запросы - к сервлету.

...