복붙노트

[SPRING] Spring 3 MVC 리소스 및 태그 <mvc : resources />

SPRING

Spring 3 MVC 리소스 및 태그

태그에 문제가 있습니다 (Spring 3.0.5). 내 웹 응용 프로그램에 이미지를 추가하고 싶지만 작동하지 않습니다.

여기 내 콩 설정의 일부입니다 :

<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 : 리소스 중 하나가 작동하지 않습니다 ... 성공없이 추가되었습니다.

편집 2 : 나는 mvc : resource 태그를 제거하고 mvc : default-servlet-handler> 하나만 내게 무한 루프와 stackoverflow를 주었다 ... o_O (스프링 3으로 정적 컨텐츠 제공)

해결법

  1. ==============================

    1.오류 발견 :

    오류 발견 :

    최종 xxx-servlet.xml 구성 :

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

    src / webapp / resources / logo.png의 이미지

    공장!

  2. ==============================

    2.

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

    리소스를 src / main / webapp / images / logo.png 아래에두고 /resources/images/logo.png를 통해 액세스하십시오.

    전쟁에서 그들은 images / logo.png에 위치 할 것입니다. 그래서 첫 번째 위치 (/)는 mvc : resources 형식을 사용합니다.

    mvc : resources의 두 번째 위치 (classpath : / WEB-INF / public-resources /)는 리소스가있는 경우 (예 : js-files) form jars를 노출 할 수 있습니다 jar의 WEB-INF / public-resources 디렉토리.

  3. ==============================

    3.$ {webappRoot} / resources 디렉토리에 정적 자원을 제공하여 / resources / **에 대한 HTTP GET 요청을 처리하기위한 자원 권장 사항은 구성 파일에 다음 행을 추가하기 만하면됩니다.

    $ {webappRoot} / resources 디렉토리에 정적 자원을 제공하여 / resources / **에 대한 HTTP GET 요청을 처리하기위한 자원 권장 사항은 구성 파일에 다음 행을 추가하기 만하면됩니다.

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

    그것은 나를 위해 일했다.

    소스 (스프링 인 액션 도서 및 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)

  4. ==============================

    4.다른 순서가 작동하게 :)

    다른 순서가 작동하게 :)

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

    5.그것은 나를 위해 작동합니다 :

    그것은 나를 위해 작동합니다 :

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

    6.@Nancom이 말했듯이

    @Nancom이 말했듯이

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

    따라서 명확성을 위해 이미지가

    resources/images/logo.png"
    

    태그의 위치 속성은 서비스하려는 정적 자원의 기본 디렉토리 위치를 정의합니다. src / main / webapp / resources / images / 디렉토리 아래에서 사용할 수있는 이미지 경로가 될 수 있습니다. src / main / webapp / resources / images / 대신 location 값으로 왜 / resources /만을 주 었는지 궁금 할 것입니다. 이것은 자원 디렉토리를 모든 자원의 기본 디렉토리로 생각하기 때문에 자원 디렉토리 아래에 여러 개의 하위 디렉토리가있어 이미지 및 기타 정적 자원 파일을 둘 수 있습니다.

    두 번째 속성 인 매핑은이 리소스 디렉토리에 매핑되어야하는 요청 경로를 나타냅니다. 여기서는 / resources / **를 매핑 값으로 지정했습니다. 따라서 어떤 웹 요청이 / resource 요청 경로로 시작되면 resources 디렉토리에 매핑되고 / ** 기호는 기본 리소스 디렉토리 아래에있는 모든 리소스 파일에 대한 재귀 적 검색을 나타냅니다.

    그래서 URL은 http : // localhost : 8080 / webstore / resource / images / logo.png. 따라서이 웹 요청을 처리하는 동안 Spring MVC는 요청 경로로 /resource/images/logo.png를 고려할 것이다. 따라서, 자원 / 자원을 자원 기본 디렉토리 인 자원에 맵핑하려고합니다. 이 디렉토리에서 URL의 남은 경로 인 /images/logo.png를 찾습니다. resources 디렉토리 아래에 images 디렉토리가 있기 때문에 Spring은 images 디렉토리에서 이미지 파일을 쉽게 찾을 수 있습니다.

    그래서

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

    주어진 [요청] -> [자원 매핑]에 대해 우리에게 준다 :

    http : // localhost : 8080 / webstore / resource / images / logo.png -> resources / images / logo.png에서 검색합니다.

    http : // localhost : 8080 / webstore / resource / images / small / picture.png -> resources / images / small / picture.png에서 검색합니다.

    http : // localhost : 8080 / webstore / resource / css / main.css -> resource / css / main.css에서 검색합니다.

    http : // localhost : 8080 / webstore / resource / pdf / index.pdf -> resources / pdf / index.pdf에서 검색합니다.

  7. ==============================

    7.rsouces 디렉토리를 디렉토리에 보관할 수 있습니다. NetBeans : 웹 페이지 Eclipse : 웹 애플리케이션

    rsouces 디렉토리를 디렉토리에 보관할 수 있습니다. NetBeans : 웹 페이지 Eclipse : 웹 애플리케이션

    파일 : 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"/>
    
  8. ==============================

    8.전에도이 문제를 만났습니다. 내 상황은 lib 파일에 62 개의 모든 스프링 프레임 워크 항아리를 넣지 않았기 때문에 (스프링 프레임 워크-4.1.2. 릴레시 에디션) 작동했다. 그리고 3.0.xsd를 2.5 또는 3.1로 변경하여 테스트했습니다. 물론 결과에 영향을 미치는 다른 요인도 있습니다.

    전에도이 문제를 만났습니다. 내 상황은 lib 파일에 62 개의 모든 스프링 프레임 워크 항아리를 넣지 않았기 때문에 (스프링 프레임 워크-4.1.2. 릴레시 에디션) 작동했다. 그리고 3.0.xsd를 2.5 또는 3.1로 변경하여 테스트했습니다. 물론 결과에 영향을 미치는 다른 요인도 있습니다.

  9. ==============================

    9.@ Nanocom의 답변이 저에게 효과적입니다. 마지막 줄에 줄을 써야 할 수도 있고, 다음과 같이 빈 클래스를 따라야 할 수도 있습니다.

    @ Nanocom의 답변이 저에게 효과적입니다. 마지막 줄에 줄을 써야 할 수도 있고, 다음과 같이 빈 클래스를 따라야 할 수도 있습니다.

    <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" />
    
  10. from https://stackoverflow.com/questions/8195213/spring-3-mvc-resources-and-tag-mvcresources by cc-by-sa and MIT license