web-dev-qa-db-ja.com

Spring 3 MVCリソースとタグ<mvc:resources />

タグ(Spring 3.0.5)に問題があります。 Webアプリケーションに画像を追加したいのですが、機能しません。

以下は私のbean設定の一部です:

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

Jspファイルに画像を追加しようとしています:

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

まず、リソースをどこに保存すればよいかわかりません(src/main/resources/public-resources?src/main/webapp/WEB-INF/public-resources?)。第二に、この設定は機能せず、画像が表示されません。どうしましたか?

ありがとう!

編集:ここに与えられた解決策: 春のTomcatと静的リソースとmvc:resources も動作しません...成功せずに追加されました。

編集2:mvc:resourceタグを削除して、mvc:default-servlet-handler>のみを許可しようとしましたが、無限ループとstackoverflowを与えました... o_O( Spring 3で静的コンテンツを提供

22
Nanocom

エラーが見つかりました:

最終的なxxx-servlet.xml設定:

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

Src/webapp/resources/logo.pngの画像

動作します!

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

リソースをsrc/main/webapp/images/logo.pngの下に配置し、/resources/images/logo.pngを介してアクセスします。

warでは、images/logo.pngに配置されます。したがって、最初の場所(/)フォームmvc:resourcesはそれらを取得します。

classpath:/WEB-INF/public-resources/の2番目の場所(mvc:resources)(rooベースのテンプレートを使用したように見えます)は、ディレクトリ(WEB-INF/public-resources jar。

24
Ralph

$ {webappRoot}/resourcesディレクトリに静的リソースを提供することにより/ resources/**のHTTP GETリクエストを処理するためのリソースの推奨事項は、構成ファイルに次の行を追加するだけです。

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

それは私のために働いた。

ソース(Spring in Actionブックおよび http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html

5
Weslor

@Nancomによると

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

わかりやすくするために、画像を

resources/images/logo.png"

タグのlocation属性は、提供する静的リソースのベースディレクトリの場所を定義します。 src/main/webapp/resources/images/ディレクトリの下にある画像パスを使用できます。ロケーション値としてsrc/main/webapp/resources/images /の代わりに/ resources /のみを指定したのはなぜかと思うかもしれません。これは、リソースディレクトリをすべてのリソースのベースディレクトリと見なし、リソースディレクトリの下に複数のサブディレクトリを配置して、イメージやその他の静的リソースファイルを配置できるためです。

2番目の属性mappingは、このリソースディレクトリにマッピングする必要があるリクエストパスを示しています。この場合、マッピング値として/resources/**を割り当てています。したがって、Web 要求が開始/resource要求パスである場合、それはリソースディレクトリにマッピングされ、/**記号はリソースファイルの再帰的な外観を示しますベースリソースディレクトリの下。

したがって、http://localhost:8080/webstore/resource/images/logo.pngのようなURLの場合。したがって、このWebリクエストを処理する間、Spring MVCは/resource/images/logo.pngをリクエストパスと見なします。そのため、/resourceをリソースベースディレクトリであるリソースにマップしようとします。このディレクトリから、URLの残りのパス(/images/logo.png)を探します。 resourcesディレクトリの下にimagesディレクトリがあるため、Springはimagesディレクトリから簡単に画像ファイルを見つけることができます。

そう

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

与えられた[リクエスト]-> [リソースマッピング]を提供します:

http://localhost:8080/webstore/resource/images/logo.png-> resource/images/logo.pngで検索

http://localhost:8080/webstore/resource/images/small/picture.png-> resource/images/small/picture.pngで検索

http://localhost:8080/webstore/resource/css/main.css-> resource/css/main.cssで検索

http://localhost:8080/webstore/resource/pdf/index.pdf-> resource/pdf/index.pdfで検索

3
Xelian

別の順序で動作させる:)

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

わたしにはできる:

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

ディレクトリNetBeansのrsoucesディレクトリを保持できます:WebページEclipse:webapps

ファイル: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>

ファイル: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>

JSPファイル内

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

@ Nanocom の答えは私にとってはうまくいきます。行が最後にある必要があるか、次のようなbeanクラスの後でなければならない可能性があります。

<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

以前にもこの問題に遭遇しました。私の状況は62個のSpring Frameworkのjarファイルすべてをlibファイルに入れなかった(spring-framework-4.1.2.RELEASEエディション)でした。そして、テストのために3.0.xsdを2.5または3.1に変更しましたが、すべてうまくいきました。もちろん、結果に影響する他の要因もあります。

0
Kyle