web-dev-qa-db-fra.com

Ressource MVC de printemps 3 et balise <mvc: resources />

J'ai des problèmes avec le tag (Spring 3.0.5) ..__ Je veux ajouter des images à mon application Web, mais cela ne fonctionne pas.

Voici une partie de ma config de haricots:

<mvc:annotation-driven/>
<mvc:default-servlet-handler default-servlet-name="ideafactory"/>
<mvc:resources mapping="/resources/**" location="/, classpath:/WEB-INF/public-resources/" cache-period="10000" />

Essayer d’ajouter une image dans un fichier jsp:

<img src="<c:url value="/resources/logo.png" />" alt="Idea Factory" />

Tout d'abord, je ne sais pas vraiment où stocker les ressources (src/main/ressources/public-resources? Src/main/webapp/WEB-INF/public-resources?) . Deuxièmement, cette config ne ne fonctionne pas, je ne peux pas voir l'image. Qu'est-ce qui ne va pas?

Merci!

EDIT: la solution donnée ici: Spring Tomcat et les ressources statiques et mvc: resources ne fonctionne pas non plus ... Ajouté sans succès.

EDIT 2: j'ai essayé de supprimer la balise mvc: resource et de ne laisser que le mvc: default-servlet-handler> one, m'a donné une boucle infinie et un stackoverflow ... o_O ( Servir du contenu statique avec Spring 3 )

21
Nanocom

Trouvé l'erreur:

Configuration finale de xxx-servlet.xml:

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

Image dans src/webapp/resources/logo.png

Travaux!

25
Nanocom
<mvc:resources mapping="/resources/**"
               location="/, classpath:/WEB-INF/public-resources/"
               cache-period="10000" />

Placez les ressources sous: src/main/webapp/images/logo.png, puis accédez-y via /resources/images/logo.png.

Dans la war, ils seront alors situés à images/logo.png. Ainsi, le premier emplacement (/) du formulaire mvc:resources les prendra en charge.

Le deuxième emplacement (classpath:/WEB-INF/public-resources/) dans mvc:resources (on dirait que vous avez utilisé un modèle basé sur roo) peut être d'exposer des ressources (par exemple, js-files) sous la forme de fichiers jar, s'ils se trouvent dans le répertoire WEB-INF/public-resources du jar.

24
Ralph

Les recommandations relatives aux ressources afin de gérer les requêtes HTTP GET pour/resources/** en proposant des ressources statiques dans le répertoire $ {webappRoot}/resources consistent simplement à ajouter la ligne suivante dans le fichier de configuration:

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

ça a marché pour moi.

Sources (livre Spring in Action et http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html )

5
Weslor

Comme l'a dit @Nancom

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

Donc, pour plus de clarté, laissez notre image est en

resources/images/logo.png"

L'attribut location de la balise définit l'emplacement du répertoire de base des ressources statiques à desservir. Il peut s'agir du chemin des images disponibles dans le répertoire src/main/webapp/resources/images/; vous vous demandez peut-être pourquoi nous n’avons donné que / resources/ comme valeur d’emplacement au lieu de src/main/webapp/resources/images/. Ceci est dû au fait que nous considérons le répertoire resources comme le répertoire de base de toutes les ressources. Nous pouvons avoir plusieurs sous-répertoires dans le répertoire resources pour mettre nos images et autres fichiers de ressources statiques.

Le deuxième attribut, mapping, indique simplement le chemin de la demande qui doit être mappé sur ce répertoire de ressources. Dans notre cas, nous avons attribué /resources/** comme valeur de mappage. Ainsi, si une requête web demande démarre avec le chemin de demande /resource, elle sera mappée sur le répertoire des ressources et le symbole /** indique l'aspect récursif de tous les fichiers de ressources situés sous le répertoire de ressources de base.

Donc, pour url comme http://localhost:8080/webstore/resource/images/logo.png. Ainsi, lors du traitement de cette demande Web, Spring MVC considérera /resource/images/logo.png comme chemin de demande. Donc, il va essayer de mapper /resource au répertoire de base des ressources, ressources. À partir de ce répertoire, il essaiera de rechercher le chemin d'accès restant à l'URL, à savoir /images/logo.png. Comme nous avons le répertoire images sous le répertoire resources, Spring peut facilement localiser le fichier image à partir du répertoire images.

Alors

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

nous donne pour [demandes] -> [mappage de ressources]:

http://localhost:8080/webstore/resource/images/logo.png -> recherche dans resource/images/logo.png

http://localhost:8080/webstore/resource/images/small/picture.png -> recherche dans resource/images/small/picture.png

http://localhost:8080/webstore/resource/css/main.css -> recherche dans resource/css/main.css

http://localhost:8080/webstore/resource/pdf/index.pdf -> recherche dans resource/pdf/index.pdf

3
Xelian

Ordre différent pour que ça marche :)

<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:annotation-driven />
3
user2077326

Ça marche pour moi:

<mvc:resources mapping="/static/**" location="/static/"/>
<mvc:default-servlet-handler />
<mvc:annotation-driven />
3
angel.lopezrial

Vous pouvez conserver le répertoire resous dans Directory NetBeans: pages Web Eclipse: webapps 

Fichier: dispatcher-servlet.xml

<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:p="http://www.springframework.org/schema/p"
       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-4.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <context:component-scan base-package="controller" />

    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <mvc:resources location="/resources/theme_name/" mapping="/resources/**"  cache-period="10000"/>
    <mvc:annotation-driven/>

</beans>

Fichier: web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.htm</url-pattern>
        <url-pattern>*.css</url-pattern>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>redirect.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Dans un fichier JSP

<link href="<c:url value="/resources/css/default.css"/>" rel="stylesheet" type="text/css"/>
1
Shailesh Sonare

La réponse de @Nanocom fonctionne pour moi. Il se peut que les lignes doivent être à la fin, ou parce qu’elles doivent être après une classe bean comme celle-ci:

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<bean class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler" />    

<mvc:resources mapping="/resources/**" 
               location="/resources/" 
               cache-period="10000" />
0
omaryahir

J'ai aussi rencontré ce problème avant. Ma situation était Je n'ai pas mis tous les 62 pots de cadre Spring dans le fichier lib (édition Spring-framework-4.1.2.LELEASE), cela a fonctionné. Et puis j'ai aussi changé le 3.0.xsd en 2.5 ou 3.1 pour le test, tout a fonctionné. Bien entendu, d'autres facteurs peuvent également influer sur votre résultat.

0
Kyle