Можно ли настроить SpringMVC для обработки всех запросов, но исключить статические каталоги содержимого? - PullRequest
58 голосов
/ 05 августа 2009

Если я сопоставлю свое весеннее приложение для обработки всех входящих запросов ('/ *'), то запросы на статический контент вернут 404. Например, запрос на «myhost.com/css/global.css» вернет 404, даже если ресурс существует, так как Spring перехватывает запрос.

Альтернативой является сопоставление SpringMVC с подкаталогом (например, '/ home / '), но в этом случае вы должны передать этот каталог во все ссылки в приложении. Есть ли способ сопоставить SpringMVC с '/ ' и исключить набор каталогов из обработки?

Моя текущая конфигурация web.xml:

<servlet>
    <servlet-name>springApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>springApp</servlet-name>
    <url-pattern>/home/*</url-pattern>
</servlet-mapping>

В идеале я хотел бы, чтобы отображение было примерно таким:

 <servlet-mapping>
    <servlet-name>springApp</servlet-name>
    <url-pattern>/*</url-pattern>
    <exclude>/css/*,/js/*</exclude>
 </servlet-mapping>

Возможен ли этот тип вещей?

Ответы [ 13 ]

0 голосов
/ 08 июля 2012

Обычно крупные сайты предпочитают использовать другой сервер только для обработки статического контента. Запросы статического содержимого отправляются на один сервер, а динамические - на другой (в данном случае с пружиной).

Во многих случаях сервер Nginx (http://nginx.com/), недавний и очень быстрый сервер.

Но это не тривиально. Много конфигураций.

0 голосов
/ 09 апреля 2010

Чистее использовать UrlRewriteFilter для перенаправления запроса на ваш сервлет, здесь пример urlrewrite.xml

<urlrewrite>
    <rule>
        <from>^/img/(.*)$</from>
        <to>/img/$1</to>
    </rule>
    <rule>
        <from>^/js/(.*)$</from>
        <to>/js/$1</to>
    </rule>
    <rule>
        <from>^/css/(.*)$</from>
        <to>/css/$1</to>
    </rule>
    <rule>
        <from>^/(.*)$</from>
        <to>/app/$1</to>
    </rule>
    <outbound-rule>
        <from>/app/(.*)$</from>
        <to>/$1</to>
    </outbound-rule>
</urlrewrite>

ПРИМЕЧАНИЯ:

  • Важно, чтобы последний <rule> находился внизу, поэтому img, js, css будут пойманы первыми
  • <outbound-rule> является необязательным и предназначен только для создания существующего
    <c:url value="/app/some" /> рендера /some вместо /app/some
0 голосов
/ 05 августа 2009

Есть ли у вас последовательные расширения для запросов, которые вы хотите обработать диспетчером Spring (я полагаю, что в большинстве примеров Spring используется * .htm)? В этом случае вы можете сопоставить расширения, которые вы хотите обработать, которые будут обходить ваши файлы css и js.

В противном случае я бы согласился с Nalandial, что подход «Фильтр», вероятно, является лучшим решением в данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...