Spring Tomcat и статические ресурсы и mvc: ресурсы
Я начал делать веб-приложения с нуля. Раньше я всегда работал над приложениями, которые уже работали в течение длительного времени, поэтому мне не пришлось иметь дело с полной фазой настройки. Я использую Spring 3 и Tomcat 6, и я использую Eclipse 3.6
у меня большая проблема с обслуживанием изображений (или других вещей, отличных от ответов контроллера). На самом деле я не могу найти способ, чтобы мои фото в моем ОСП. Моя конфигурация работает с:
<servlet-mapping>
<servlet-name>springDispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
в интернете.xml и
<bean name="/accise" class="it.jsoftware.jacciseweb.controllers.MainController">
</bean>
для контекста сервлета (плюс другие, конечно).
Я прочитал много сообщений здесь и на других форумах, говорящих об этом:
<mvc:resources mapping="/resources/**" location="/resources/" />
но если я вставлю это в свой сервлет-контекст.xml, я смогу обслуживать изображения, но контроллер "accise" не будет доступен. Я злоупотребляю или неправильно понял тег ресурсов? Каков правильный путь?
обновление решение найдено!!! :)
проблема была вот мой сервлет-конфиг.xml пропустил одно объявление:
теперь это(используя аннотации на контроллере):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="it.jsoftware.jacciseweb.controllers"></context:component-scan>
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<mvc:resources mapping="/resources/**" location="/resources/" />
3 ответов
<mvc:resources>
хорошо играет с аннотированными контроллерами, но может потребовать дополнительной настройки с другими видами сопоставлений контроллеров.
Я думаю в вашем случае нужно объявить BeanNameUrlHandlerMapping
вручную (обычно он регистрируется по умолчанию, но <mvc:resources>
переопределяет параметры по умолчанию, как побочный эффект применения собственной конфигурации):
<bean class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
у меня была та же проблема. Я смог исправить это, используя полный путь, как для
в CSS
<link rel="stylesheet" type="text/css" media="screen" href="/my-web-app/resources/css/smoothness/jquery-ui-1.8.21.custom.css">
и для javascript
<script type="text/javascript" src="/my-web-app/static/js/jquery-1.4.4.min.js"></script?
Дайте мне знать, если это решит вашу проблему, прежде чем весна придумает лучший подход.
у меня тоже была такая же проблема. Я решил это, добавив макрос spring перед фактической ссылкой на ресурс, чтобы разрешить путь сервлета.
это не очень хорошо в коде, но это решение делает вас независимыми от фактического контекста, в котором ваше приложение развертывается на сервере, и ваш сервлет тоже. Обычно вы не хотите, чтобы фактический сервлет упоминался в вашем url-адресе.
например, ссылаясь на ответ ColdStoneJava, это было бы:
<script type="text/javascript" src="<@spring.url '/static/js/jquery-1.4.4.min.js'/>"></script>
вы также должны ссылаться на него абсолютным в url, поэтому косая черта '/...' очень существенный.
это не мой опыт:
<script type="text/javascript" src="<@spring.url 'static/js/jquery-1.4.4.min.js'/>"></script>
Ура.