Spring MVC: использование подстановочных знаков в - PullRequest
3 голосов
/ 09 февраля 2012

Я внедряю систему очистки кэша для приложения Spring MVC.

Чтобы эта система работала, я должен убрать "код очистки кэша" из заданного URL. Допустим, мой сгенерированный код очистки кэша - «123», и у меня есть URL-адрес .css: / public-123 / css / style.css . В этом примере я хочу, чтобы / public / css / style.css был успешно вызван ( -123 должен быть удален).

Это работает в моем файле контекста "mvc-config.xml":

<mvc:resources mapping="/public-123/**" location="/public/" />

Но я бы также хотел, чтобы любой код очистки кэша работал, даже если он не является текущим. Например, я бы также хотел, чтобы / public-456 / css / style.css достиг файла style.css.

Если я попытаюсь добавить еще один шаблон в сопоставление:

<mvc:resources mapping="/public-*/**" location="/public/" />

Это не работает! Я получаю 404 ....

Как я могу указать атрибут "mapping", чтобы любой код после части "public-" был хорошо управляем?

Ответы [ 3 ]

0 голосов
/ 13 марта 2013

Мне удалось заставить это работать, определив вручную ResourceHttpRequestHandler для обработки ресурсов, которые расположены в файловой системе рядом с тегом <mvc:resources />:

<bean id="assetsResourceHandler" class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler">
  <property name="locations">
    <list>
      <bean class="org.springframework.core.io.UrlResource">
        <constructor-arg value="file:#{applicationProps['assets.basedir']}"></constructor-arg>
      </bean>
    </list>
  </property>
</bean>
0 голосов
/ 09 мая 2015

Полагаю, вы делаете это для того, чтобы добиться кэш-памяти для ваших статических ресурсов.

Тем временем Spring 4.1 имеет специальные функции для этого , так что вы можете удалить многоэта пользовательская конфигурация.

Примерно так:

<mvc:resources mapping="/public/**" location="/public/"/>
  <mvc:resource-chain resource-cache="true">
    <mvc:resolvers>
      <mvc:version-resolver>
        <mvc:content-version-strategy patterns="/**"/>
      </mvc:version-resolver>
    </mvc:resolvers>
  </mvc:resource-chain>
</mvc:resources>
0 голосов
/ 09 февраля 2012

Один из способов справиться с этим - использовать Spring EL, как показано в Spring документах :

<mvc:resources mapping="/resources-#{applicationProps['application.version']}/**" location="/public-resources/"/>

Вы, вероятно, можете сохранить часть "123" в файле свойствон устанавливается только один раз.Например, через property-placeholder :

<context:property-placeholder location="classpath:myApp.properties"/>
<mvc:resources mapping="/resources-${cache.code}/**" location="/public-resources/"/>

Преимущество заключается в возможности чтения этого кода на страницах JSP (для генерации ссылок) через одно и то же значение свойств.

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