Spring Tomcat и статические ресурсы и mvc: ресурсы - PullRequest
9 голосов
/ 24 января 2011

Я начал делать веб-приложение с нуля.Раньше я всегда работал над приложениями, которые уже работали в течение долгого времени, поэтому мне не приходилось иметь дело с полной фазой установки.Я использую Spring 3 и Tomcat 6, и я использую Eclipse 3.6

У меня большая проблема с обслуживанием изображений (или другими вещами, отличными от ответов контроллера).На самом деле я не могу найти способ, чтобы мои изображения были в моем jsps.Моя конфигурация работает с:

 <servlet-mapping> 
     <servlet-name>springDispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
 </servlet-mapping> 

в web.xml и

<bean name="/accise" class="it.jsoftware.jacciseweb.controllers.MainController">

</bean>

для контекста сервлета (плюс, конечно, другое).

Я прочитал много сообщений здесь и на других форумах, в которых говорится об этом:

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

, но если я вставлю это в свой servlet-context.xml, я смогу обслуживать изображения,все же контроллер "accise" не будет доступен.Я неправильно использую или неправильно понял тег ресурсов?Какой правильный путь?


Обновление найдено решение !!!:)

Проблема состояла в том, что мой servlet-config.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 ]

7 голосов
/ 24 января 2011

<mvc:resources> хорошо работает с аннотированными контроллерами, но может потребовать некоторой дополнительной настройки с другими видами отображений контроллеров.

Полагаю, в вашем случае вам нужно объявить BeanNameUrlHandlerMapping вручную (обычно это регистрируется по умолчанию, но <mvc:resources> переопределяет значения по умолчанию как побочный эффект применения собственной конфигурации):

<bean class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
1 голос
/ 28 июня 2012

У меня была такая же проблема. Я смог исправить это, используя полный путь, как для

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 придумает лучший подход.

0 голосов
/ 16 ноября 2012

У меня тоже была такая же проблема.Я решил это, добавив макрос 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>

Cheers.

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