Resurse și etichete Spring 3 MVC (Programare, Spring, Spring Mvc, Resurse)

Nanocom a intrebat.

Am unele probleme cu tag-ul (Spring 3.0.5).Vreau să adaug imagini la aplicația mea web, dar nu funcționează.

Iată o parte din configurația mea de beans:

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

Încercarea de a adăuga o imagine într-un fișier jsp:

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

În primul rând, nu prea știu unde să stochez resursele (src/main/resources/public-resources? src/main/webapp/WEB-INF/public-resources?).În al doilea rând, această configurație nu funcționează, nu pot vedea imaginea. Ce s-a întâmplat?

Mulțumesc!

EDIT: soluția dată aici: Spring Tomcat și resurse statice și mvc:resources nu funcționează nici ea…Adăugată fără succes.

EDIT 2: Am încercat să elimin tag-ul mvc:resource și să las doar mvc:default-servlet-handler> unul, mi-a dat buclă infinită și stackoverflow… o_O (Servirea conținutului static cu Spring 3)

10 răspunsuri
Nanocom

Am găsit eroarea:

Final xxx-servlet.xml config:

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

Imagine în src/webapp/resurse/logo.png

Funcționează!

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

Puneți resursele sub: src/main/webapp/images/logo.png și apoi accesează-le prin /resources/images/logo.png.

În war acestea vor fi apoi localizate la images/logo.png. Astfel, prima locație (/) formează mvc:resources le va prelua.

A doua locație (classpath:/WEB-INF/public-resources/) în mvc:resources (se pare că ați folosit un șablon bazat pe roo) poate fi pentru a expune resursele (de exemplu, fișierele js) sub formă de jars, dacă acestea sunt localizate în directorul WEB-INF/public-resources din jar.

Comentarii

  • M-ar fi ajutat, chiar dacă este de fapt src/main/webapp/resurse/images/logo.png –  > Por Nanocom.
  • @Nanocom: Am introdus folderul images pentru a fi mai clar. Dar calea „resources” din url este „consumată” de mvc-tag–mapping, deci nu mai trebuie să fie în calea folderului! Cu excepția cazului în care o faci așa cum ai descris-o în propriul răspuns. –  > Por Ralph.
Weslor

Recomandări pentru resurse pentru a gestiona cererile HTTP GET pentru /resurse/** prin oferirea de resurse statice în directorul ${webappRoot}/resources este de a adăuga pur și simplu următoarea linie în fișierul de configurare:

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

A funcționat pentru mine.

Surse (cartea Spring in Action și http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)

Xelian

Așa cum a spus și @Nancom

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

Deci, pentru claritate permite imaginea noastră este în

resources/images/logo.png"

locația al fișierului mvc:resources definește locația directorului de bază al resurselor statice pe care doriți să le serviți. Acesta poate fi calea imaginilor care sunt disponibile în cadrul aplicației src/main/webapp/resources/images/ director; vă puteți întreba de ce am dat doar /resurse/ ca valoare a locației în loc de src/main/webapp/resources/images/. Acest lucru se datorează faptului că noi considerăm că resources ca fiind directorul de bază pentru toate resursele, putem avea mai multe subdirectoare sub resources pentru a plasa imaginile și alte fișiere de resurse statice.

Al doilea atribut, mapping, , indică doar calea de acces care trebuie să fie asociată cu acest fișier resources director. În cazul nostru, am atribuit /resource/** ca valoare de cartografiere. Astfel, dacă orice pagină web request începe cu /resource calea de solicitare, atunci aceasta va fi asociată la resources iar directorul /** indică căutarea recursivă a oricăror fișiere resursă de sub directorul de bază. resources de bază.

Astfel, pentru un URL de tipulhttp://localhost:8080/webstore/resource/images/logo.png. Deci, în timp ce servește această cerere web, Spring MVC va lua în considerare /resource/images/logo.png ca fiind calea cererii. Astfel, va încerca să mapeze /resource cu directorul de bază specificat de către location atribuit, resources. Din acest director, va încerca să caute calea rămasă din URL, care este /images/logo.png. Deoarece avem atributul images sub directorul resources Spring poate localiza cu ușurință fișierul imagine din directorul images director.

Deci,

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

ne oferă pentru anumite [cereri] -> [maparea resurselor]:

http://localhost:8080/webstore/resource/images/logo.png -> caută în resources/images/logo.png

http://localhost:8080/webstore/resource/images/small/picture.png -> caută în resources/images/small/picture.png

http://localhost:8080/webstore/resource/css/main.css -> căutări în resources/css/main.css

http://localhost:8080/webstore/resource/pdf/index.pdf -> căutări în resources/pdf/index.pdf

Comentarii

  • Mă faci să-mi pierd timpul gândindu-mă timp de o oră de ce răspunsul tău nu funcționează…, sa mapping="/resources/**"' nu mapping="/resource/**" –  > Por Plain_Dude_Sleeping_Alone.
  • Nu sunt de acord cu tine. În aceste situații căutați în guthub: github.com/… –  > Por Xelian.
  • Adică ai declarat-o ca fiind location="/resources/" apoi mapping="/resource/**"/. Lipsește s Haha. –  > Por Plain_Dude_Sleeping_Alone.
user2077326

Ordinea diferită face să funcționeze 🙂

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

angel.lopezrial

Funcționează pentru mine:

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

Shailesh Sonare

Puteți păstra directorul rsouces în DirectoryNetBeans: Pagini webEclipse: webapps

Fișier: 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>

Fișier: web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"  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>

În fișierul JSP

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

Kyle

De asemenea, am întâlnit această problemă înainte. Situația mea a fost Nu am pus toate cele 62 de jar-uri spring framework în fișierul lib (spring-framework-4.1.2.RELEASE edition), a funcționat. Și apoi am schimbat și 3.0.xsd în 2.5 sau 3.1 pentru test, totul a funcționat. Desigur, există și alți factori care să vă afecteze rezultatul.

omaryahir

Răspunsul lui @Nanocom funcționează pentru mine. S-ar putea ca liniile să fie la sfârșit, sau ar putea fi pentru că trebuie să fie după unele dintre cele bean clasă, astfel:

<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" />

Itumeleng

Acest lucru a funcționat pentru mine

În JSP, pentru a vizualiza imaginea

<img src="${pageContext.request.contextPath}/resources/images/slide-are.jpg">

În dispatcher-servlet.xml

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