Настройка DispatcherServlet для URL-адресов в стиле REST - PullRequest
0 голосов
/ 05 февраля 2012

Я пытаюсь изучить основы Spring MVC и у меня возникают проблемы с тем, как URL-адреса разрешаются для контроллеров.Я работаю с этим уроком в качестве трамплина.Я могу заставить его работать нормально под tomcat, и URL /context/welcome.htm преобразуется в аннотированный контроллер:

@Controller
@RequestMapping("/welcome")
public class HelloWorldController

Файл web.xml настроен с использованием

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

Я хотел бы иметь возможность набрать / context / welcome и разрешить HelloWorldController, но это не работает.Я попытался установить *, но это приводит к невозможности загрузки сервлета.Если бы кто-то мог объяснить, почему этот шаблон URL недействителен, и как настроить этот контроллер для работы со всеми запросами, такими как / welcome и / welcome, а не только с теми, которые заканчиваются на * .htm, это было бы очень полезно.В ASP.NET MVC была предоставлена ​​страница маршрутизации для устранения таких проблем с отображением контроллера.Каков наилучший способ сделать это с помощью Spring?

Ответы [ 3 ]

5 голосов
/ 06 февраля 2012

Попробуйте это:

<servlet-mapping>
   <servlet-name>mvc-dispatcher</servlet-name>
   <url-pattern>/*</url-pattern>
</servlet-mapping>

Шаблон / * пропустит все через ваш сервлет.

Шаблон / делает ваш сервлет сервлетом по умолчанию для приложения, то есть он будет подбирать каждый шаблон, который не имеет другого точного соответствия.

1 голос
/ 25 февраля 2012

С вашим существующим кодом вы можете решить, изменив отображение запроса на RequestMapping ("/ welcome.htm"), так как вы внесли .htm в свое отображение сервлета.Мы хотим, чтобы URL наших приложений был таким.Другие предложения о создании / также будут работать, разница в том, что / * позволяет разрешить любой шаблон URL, который вы нажали, но ограничения * .htm из других шаблонов разрешаются.

Я не думаю, что js или css будутиз-за этого возникают проблемы, потому что js и css не зависят от сервлета весеннего диспетчера.js и css могут быть встроены без использования сервлета.рассмотрим автономный html, имеющий js и css, все, что ему нужно, это контекст сервера, а не сервлет

0 голосов
/ 06 февраля 2012

Попробуйте использовать / *

Ваш другой шаблон был недействительным, поскольку он не отвечал требованиям, указанным в спецификации сервета: https://jira.sakaiproject.org/secure/attachment/16135/servlet-2_4-fr-spec.pdf

Одна из проблем, с которой вы можете столкнуться, заключается в том, что запросы на js-файлы и css-файлы направляются через диспетчер. Вам нужно будет настроить spring, чтобы игнорировать запросы на эти файлы.

...