@RequestMapping приветственный файл - PullRequest
0 голосов
/ 13 апреля 2011

Моя цель - отобразить / {любой путь} и * .html на сервлет без сопоставления / *.Например:

map:
/foo
/foobar/
/bar.html
/foo/bar.html

don't map:
/foo.js
/bar.pdf

Для этого у меня есть файл сервлета и приветствия, сопоставленный так:

web.xml:

<servlet-mapping>
 <servlet-name>someServlet</servlet-name>
 <url-pattern>*.html</url-pattern>
</servlet-mapping>

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

и вконтроллер, у меня есть

@RequestMapping(value="/index.html", method=RequestMethod.GET)
public ModelAndView showPage(HttpServletRequest request){
  ...
}

это не будет работать - сервлет не будет запущен на /test.Однако я обнаружил, что если я создаю пустой файл в /test/index.html, то он работает - я полагаю, что сервлет по умолчанию как-то помогает, находя index.html.

К сожалению, я не могу полагаться на статические файлы.Есть ли способ заставить это отображение работать без взлома пустого файла и без отображения / * на сервлет?

1 Ответ

2 голосов
/ 13 апреля 2011

Ответ зависит от того, хотите ли вы обработать Spring:

  • Только URL, заканчивающиеся на .html или без расширения, или
  • Все URL-адреса, кроме тех, которые заканчиваются на .js и .pdf и т. Д.

Оба эти правила будут соответствовать списку, который вы дали в своем вопросе. Однако второе легче реализовать. Если у вас есть известный список расширений, которые вы не хотите, чтобы Spring обрабатывал, просто сопоставьте эти файлы в файле web.xml с обработчиком по умолчанию, например так:

<servlet-mapping>
    <servlet-name>someServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>

Однако это работает, только если вы знаете все расширения, которые не должны обрабатываться Spring, потому что вы должны перечислить каждое расширение в web.xml.

Если вы действительно хотите отклонить любое расширение , отличное от .html, вам нужно как-то переопределить поведение Spring по умолчанию. Я не буду вдаваться в это здесь, потому что я думаю, что выше, лучший вариант. Но в этом вопросе объясняются два возможных способа: spring mvc, как обойти DispatcherServlet для * .html файлов?

...