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>

Ура.