Весеннее картирование сервлета - нет CSS или JSP! - PullRequest
1 голос
/ 19 февраля 2010

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

В принципе, у меня в * 1005 было следующее отображение сервлетов*:

<servlet-mapping>
  <servlet-name>myServlet</servlet-name>
  <url-pattern>/index.html</url-pattern>
  <url-pattern>/channel1</url-pattern>
  <url-pattern>/channel2</url-pattern>
</servlet-mapping>

Это работало идеально, пока мне не нужно было отобразить следующий URL:

/channel1/{id}/{random_text}

Где {id} - это числовое значение идентификатора моих объектов, а {random_text} - простотам только для "дружеских URL".Мне удалось заставить это работать, используя @RequestMapping в моем контроллере и @PathVariable для извлечения переменных из URL.

Однако, единственный способ, которым мне удалось получить новый URL для сопоставленияуспешно добавляется

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

к моему web.xml в нижней части моих отображений сервлетов.НО, когда я делаю это, все мои другие страницы (/channel1, /channel2) отображаются без доступа к статическому контенту (css, jsp и т. Д.);Я получаю No mapping found for HTTP request with URI для статических файлов.Я пробовал различные комбинации отображений, как предложено в ссылке, которую я разместил, но ничего не получалось.Любая помощь была бы великолепна !!!

Обновление : моя RequestMapping в контроллере выглядит следующим образом (если это поможет решить проблему вообще ..):

@RequestMapping(value = { "/channel1/{id}", "/channel1/{id}/{text}" })

Ответы [ 3 ]

3 голосов
/ 19 февраля 2010

Лучшая практика работы с форматом отдыха - хранить все ваши URL, которые должны обрабатываться DispatcherServlet, в отдельном пространстве имен, таком как web, так что статические ресурсы будут обслуживаться напрямую и все вашиURL контроллера будут передаваться через диспетчер, вот пример ..

<servlet>
    <servlet-name>web</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>namespace</param-name>
        <param-value>web</param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/web-servlet.xml</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>web</servlet-name>
    <url-pattern>/web/*</url-pattern>
</servlet-mapping>
3 голосов
/ 19 февраля 2010

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

/channel1/{id}/{random_text}

Это должно быть покрыто url-pattern из /channel1/*.Обратите внимание на трейлинг /*.url-pattern из /channel1 больше не будет принимать ничего в pathinfo, он будет принимать только точный URL и необязательные параметры запроса.

0 голосов
/ 20 февраля 2010

Я понял, в чем проблема (вероятно, моя ошибка в том, что я не стал подробно останавливаться на моей настройке @RequestMapping в Controller ранее):

В моем web.xml у меня был шаблон URL:

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

Также в моем контроллере я использовал следующее отображение:

@RequestMapping(value = { "/channel1/{id}", "/channel1/{id}/{text}" })

Проблема была в том, что я дублировал часть /channel1. Я случайно (к счастью) наткнулся на этот пост, объясняющий эту проблему.

Короче говоря, когда я изменил свое отображение в контроллере на следующее, оно отлично работает:

@RequestMapping(value = { "/{id}", "/{id}/{text}" })
...