URL MVC Spring без расширения .something - PullRequest
4 голосов
/ 14 октября 2010

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

Я создаю сайт с помощью Spring MVC и использую конфигурацию на основе аннотаций.То, что я хотел бы сделать, это иметь URL-адреса, которые не имеют никакого расширения в конце (.html, .do и т. Д.).Таким образом, они выглядят как http://www.mysite.com/account/create, что, как я знаю, традиционно выполняется с помощью mod_rewrite на Apache или с использованием файлов без расширений.Кажется, что это можно сделать без использования механизма перезаписи (я знаю о проекте urlrewritefilter), поскольку Spring поддерживает извлечение параметров из строки запроса (см. Раздел 15.3.2.1 из документации ) ипример зоомагазина, похоже, не имеет расширений в конце своих URL.

Однако, кажется, что всякий раз, когда я пытаюсь перенаправить все запросы сервлету-диспетчеру (мои мысли о том, как отменить необходимость чего-то вроде *.htm), я сталкиваюсь с неприятностями ...в состоянии заставить его работать (используя конфигурацию XML, я недавно переключился на настройку аннотаций), используя стандартный "* .htm" для всех страниц.

Мой код контроллера выглядит как

@Controller
@RequestMapping("/home")
public class HomeController {

    ...

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView get() {

        ...

    }

И мой web.xml выглядит как

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

    <servlet-mapping>
        <servlet-name>dispatch</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

Я что-то здесь упускаю?Возможно ли это без использования механизма перезаписи?

Следует отметить, что приведенная выше конфигурация не работает.Всегда возвращается 404 ошибка ...

1 Ответ

4 голосов
/ 15 октября 2010

Использование шаблонов URL, таких как /*, - это, как правило, плохая идея, поскольку контейнер перенаправит все в DispatcherServlet, включая внутренние запросы для JSP. Поэтому, когда ваш контроллер возвращает имя JSP в ModelAndView, оно снова возвращается в DispatcherServlet, давая вам 404.

Вам либо нужно сохранить расширение файла в ваших путях, либо вам нужен какой-то префикс, чтобы позволить вам отличать запрашиваемые для DispstcherServlet от запросов на JSP.

...