Spring MVC에서 정적 컨텐츠를 처리하는 방법은 무엇입니까?


200

Spring MVC 3을 사용하여 webapp을 개발 중이며 DispatcherServlet'/'에 대한 모든 요청을 잡습니다 (web.xml).

  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

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

이제 이것은 광고 된대로 작동하지만 정적 콘텐츠를 어떻게 처리 할 수 ​​있습니까? 이전에는 RESTful URL을 사용하기 전에 모든 * .html을 잡아서로 보냈지 DispatcherServlet만 이제는 다른 볼 게임입니다.

/ styles /, / js /, / images / 등을 포함하는 / static / 폴더가 있고에서 / static / *을 제외하고 싶습니다 DispatcherServlet.

이제이 작업을 수행하면 정적 리소스가 작동 할 수 있습니다.

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

그러나 방문 페이지가 www.domain.com/app/이 아닌 멋진 URL (Spring MVC 3을 사용하는 시점)을 원합니다.

또한 Tomcat 또는 다른 서블릿 컨테이너에 연결된 솔루션을 원하지 않습니다. 이는 상대적으로 트래픽이 적기 때문에 웹 서버 (아파치 httpd와 같은)가 필요하지 않습니다.

이것에 대한 깨끗한 해결책이 있습니까?



@hamo 이와 관련된 스레드 : stackoverflow.com/questions/34279705/...
smwikipedia

답변:


266

이 문제에 많은 시간을 보냈으므로 솔루션을 공유 할 것이라고 생각했습니다. 스프링 3.0.4부터는 사이트 루트에서 DispatchServlet을 계속 사용하면서 정적 자원을 제공하는 데 사용할 수 있는 구성 매개 변수 <mvc:resources/>( 참조 문서 웹 사이트 에 대한 추가 정보 )가 있습니다.

이를 사용하려면 다음과 같은 디렉토리 구조를 사용하십시오.

src/
 springmvc/
  web/
   MyController.java
WebContent/
  resources/
   img/
    image.jpg
  WEB-INF/
    jsp/
      index.jsp
    web.xml
    springmvc-servlet.xml

파일 내용은 다음과 같아야합니다.

src / springmvc / web / HelloWorldController.java :

package springmvc.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController {

 @RequestMapping(value="/")
 public String index() {
  return "index";
 }
}

WebContent / WEB-INF / web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 <servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
</web-app>

WebContent / WEB-INF / springmvc-servlet.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:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- not strictly necessary for this example, but still useful, see http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-controller for more information -->
 <context:component-scan base-package="springmvc.web" />

    <!-- the mvc resources tag does the magic -->
 <mvc:resources mapping="/resources/**" location="/resources/" />

    <!-- also add the following beans to get rid of some exceptions -->
 <bean      class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
 <bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
 </bean>

    <!-- JSTL resolver -->
 <bean id="viewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
 </bean>

</beans>

WebContent / jsp / index.jsp :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Page with image</h1>
<!-- use c:url to get the correct absolute path -->
<img src="<c:url value="/resources/img/image.jpg" />" />

도움이 되었기를 바랍니다 :-)


12
이 예제는 Spring 사용자 안내서에 있어야합니다.이 주제에서 본 것이 가장 좋습니다. 고마워 조리스!
Paul

이것은 분명히 나를 위해 속임수를 썼습니다. 단지 rozky의 조언은 내가 시작한 일이지만 어떤 이유로 든 내 홈페이지 이외의 모든 페이지가 리소스 URL을 페이지에 상대적으로 렌더링 한 것입니다.이 조언에 따라 상대적으로 렌더링합니다 대신 내 앱의 컨텍스트 루트에 완벽하게 작동합니다! 감사!
Bane

감사! <mvc : resources mapping = "/ resources / **"location = "/, classpath : / META-INF / web-resources /"/> 행을 <mvc : resources 매핑으로 변경할 때까지 머리카락을 뽑았습니다. = "/ resources / **"location = "/ resources /"/>
Mark D

2
@Bane이 지적했듯이 <c : url value = ... />는이 솔루션의 핵심 부분입니다. 왜 그런지 말해 줄래? 감사!
Mark

4
<mvc : resources mapping = "/ **"location = "/ resources /"/>를 사용할 수도 있으며 루트에 매핑됩니다. (즉, 루트는 리소스와 jsp를 모두 포함합니다). 이렇게하면 어디에서나 c : url을 사용할 수 있습니다.
efaj

46

이 문제는 <mvc:resources mapping="..." location="..."/> 스프링 디스패처 구성 파일에서 구성 요소를 사용할 수있는 스프링 3.0.4.RELEASE에서 해결되었습니다 .

스프링 문서 확인


5
실제로 "잘못"되지는 않았지만 Spring의 자체 문서 (답변으로 언급 한)에 무언가 빠진 것으로 보이 므로이 대답은 너무 짧습니다. Joris의 답변에서 더 완전한 답변을 확인하십시오 ... 길이가 아니라 당신의 대답이나 Spring의 dox가 언급하지 않은 <c : url ...>의 사용에 대해 언급하고 있다는 사실은 솔루션의 중요한 부분입니다.
Bane

38

Spring 3.0.x에서 servlet-config.xml (web.xml에 contextConfigLocation으로 구성된 파일)에 다음을 추가하십시오 .mvc 네임 스페이스도 추가해야하지만 어떻게 해야할지 모르는 경우 Google에 추가해야합니다. !;)

그것은 나를 위해 작동

<mvc:default-servlet-handler/>

문안 인사

아 유브 말리크


이 줄을 추가하면 다음과 같은 결과를 얻습니다. org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException : 클래스 경로 리소스 [META-INF / spring / application-context.xml]에서 XML 문서의 31 행이 잘못되었습니다. 중첩 예외는 org.xml.sax.SAXParseException입니다. 라인 번호 : 31; columnNumber : 35; cvc-complex-type.2.4.c : 일치하는 와일드 카드는 엄격하지만 'mvc : default-servlet-handler'요소에 대한 선언을 찾을 수 없습니다.
Alex Worden

다른 뷰 리졸버도있는 경우 핸들러의 순서를 다루어야합니다.
피닉스

20

문제를 올바르게 이해하면 문제에 대한 해결책을 찾은 것 같습니다.

CSS 출력, 자바 스크립트 또는 jquery 파일이없는 원시 출력이 표시되는 것과 동일한 문제가있었습니다.

방금 "기본"서블릿에 매핑을 추가했습니다. web.xml 파일에 다음이 추가되었습니다.

 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.css</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
 </servlet-mapping>

DispatcherRequest 객체에서 javascript 및 css 파일 요청을 필터링해야합니다.

다시, 이것이 당신이 무엇인지 확실하지 않지만 그것은 나를 위해 일했습니다. "default"는 JBoss 내의 기본 서블릿 이름입니다. 다른 서버에 대한 내용이 확실하지 않습니다.


1
나는 실제로 jboss / tomcat에 연결되는 기본 서블릿을 사용하고 싶지 않다
hamo

@hamo 왜 문제입니까? (이것은 논란의 여지가 아닌 진정한 질문입니다). 어쨌든 스프링을 실행하려면 서버 (jboss / tomcat / jetty)를 실행해야합니까?
Manav

3
그리고 <url-pattern>같은 태그 안에 모든 태그 를 추가 할 수 있습니다<servlet-mapping>
Milanka

16

훌륭한 솔루션 을 가진 또 다른 스택 오버플로 게시물이 있습니다 .

Tomcat과 관련이없는 것처럼 보이며 간단하고 훌륭합니다. spring mvc 3.1을 사용 하여이 게시물에서 몇 가지 솔루션을 시도했지만 동적 콘텐츠를 제공하는 데 문제가있었습니다.

간단히 말하면 다음과 같이 서블릿 매핑을 추가한다고합니다.

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>

11

tuckey의 urlrewritefilter를 사용하여 그 방법을 찾았습니다. 더 좋은 답변이 있으면 언제든지 주시기 바랍니다!

web.xml에서 :

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/app/*</url-pattern>
  </servlet-mapping>

urlrewrite.xml에서 :

<urlrewrite default-match-type="wildcard">
<rule>
    <from>/</from>
    <to>/app/</to>
</rule>
<rule match-type="regex">
    <from>^([^\.]+)$</from>
    <to>/app/$1</to>
</rule>
<outbound-rule>
    <from>/app/**</from>
    <to>/$1</to>
</outbound-rule>    

이것은 '.' 그 안에 (예 : style.css와 같은) 다시 작성되지 않습니다.


5
더 나은 대답은 <mvc:resources/>@Joris가 보여주는 Spring 3 입니다.
Paul

11

방금 Spring MVC 3.0 에서이 문제를 해결하고 처음에는 UrlRewriteFilter 옵션을 사용했습니다. 그러나 나는이 솔루션이 "정확하지 않다"는 점에 만족하지 않았다 (단 하나는 아니다- "hack"이라는 단어가 몇 번 나타나는 스프링 포럼에 대한 링크를 참조하라).

따라서 위의 "알 수 없음 (Google)"과 유사한 솔루션을 찾았지만 / static /에서 제공되는 모든 정적 콘텐츠 (Spring Roo 버전의 Pet Store 앱에서 가져온)에 대한 아이디어를 빌 렸습니다. "기본"서블릿은 작동하지 않지만 Spring Webflow ResourceServlet은 작동했습니다 (Spring Roo 생성 앱에서 가져 왔습니다).

Web.xml :

<servlet>
    <servlet-name>mainDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

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

<servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

JSP에 대한 유일한 변경 사항은 CSS, JS 및 이미지의 URL에 / static / 경로를 추가하는 것입니다. 예 : "$ {pageContext.request.contextPath} /static/css/screen.css"

Maven 사용자의 경우 "org.springframework.js.resource.ResourceServlet"의 종속성 :

<dependency>
    <groupId>org.springframework.webflow</groupId>
    <artifactId>org.springframework.js</artifactId>
    <version>2.0.8.RELEASE</version>
</dependency>

나쁜 해결책 닉도는 아닙니다-감사합니다! 나는 여전히 웹 스프링과 다른 의존성을 추가하지 않고 코어 스프링 mvc에 리소스 서블릿이 없거나 왜 다른 솔루션을 가지고 있는지에 대해 "알지 못한다". Urlrewrite는 저에게 잘 작동하므로 당분간 그 점을 고수하겠습니다! 건배, 하모
hamo

2
Spring Pet Clinic 앱의 표준 (Roo 이외의) 버전을 되돌아 보면 "default"에 대한 서블릿 정의가 추가 주석으로 주석 처리 된 것을 발견했습니다. 즉시 암시 적 정의 ". 기본값의 명시적인 패키지 선언은 org.apache.catalina.servlets.DefaultServlet입니다. 따라서 이것은 "즉시"자원 서블릿 (?) 일 수 있습니다. 나는 개발 작업에 Jetty를 사용하고 Jetty는 (Glassfish와 같은) 암시 적 기본 서블릿을 제공하지 않는 것 같습니다.
nickdos

8

이 문제에 대한 나의 경험은 다음과 같습니다. 대부분의 Spring 관련 웹 페이지 및 서적은 가장 적절한 구문은 다음과 같습니다.

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

위의 구문은 정적 리소스 (CSS, JavaScript, 이미지)를 응용 프로그램 루트 (예 : / webapp / resources /)의 "resources"폴더에 배치 할 수 있음을 제안합니다.

그러나 내 경험 (Eclipse 및 Tomcat 플러그인을 사용하고 있음)에서 WEB_INF (또는 META-INF) 안에 resources 폴더를 배치하는 것이 유일한 방법입니다 . 따라서 권장하는 구문은 다음과 같습니다.

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

JSP (또는 이와 유사한)에서 다음과 같이 자원을 참조하십시오.

<script type="text/javascript"
        src="resources/my-javascript.js">
</script>

말할 것도없이, 스프링 디스패처 서블릿 (프론트 컨트롤러)이 모든 것을 동적으로, 즉 동적으로 가로 채기를 원했기 때문에 전체 질문 만 발생했습니다. 그래서 web.xml에 다음이 있습니다.

<servlet>
    <servlet-name>front-controller</servlet-name>
    <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    <!-- spring automatically discovers /WEB-INF/<servlet-name>-servlet.xml -->
</servlet>

<servlet-mapping>
    <servlet-name>front-controller</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

마지막으로 현재 모범 사례를 사용하고 있으므로 프론트 컨트롤러 서블릿 xml에 다음이 있습니다 (위 참조).

<mvc:annotation-driven/>

그리고 실제 컨트롤러 구현에는 다음과 같이 모든 들어오는 요청을 처리하는 기본 방법이 있습니다.

@RequestMapping("/")

이게 도움이 되길 바란다.


그것이 나를 위해 일한 유일한 솔루션이었습니다. 내가 주목 한 한 가지 흥미로운 점은 webapp를 시작한 후 추가 된 새로운 리소스를 다시 시작할 때까지 찾을 수 없다는 것입니다. 사용자 관점에서는 이해가되지 않지만 대부분 큰 문제는 아닙니다.
Rafael Steil

당신은 톰캣 관점 :) 멋진과 이야기
omkar는 sirra을

이 페이지에서 각 답변을 시도했습니다. 고맙게도 내가 이것에 도착했을 때 나는 더 이상 시도하지 않아도됩니다.
TimeTrax

6

나는 같은 문제를 겪었고 Joris의 대답이 매우 도움이된다는 것을 알았습니다. 하지만 추가적으로 추가해야합니다

<mvc:annotation-driven /> 

서블릿 구성 파일에. 해당 자원이 없으면 맵핑이 작동하지 않고 모든 핸들러가 작동을 중지합니다. 이것이 누군가를 도울 수 있기를 바랍니다.


2

URLRewrite는 호출하려는 경우 일종의 "해킹"입니다. 결론은 바퀴를 다시 발명한다는 것입니다. 기존 솔루션이 이미 존재합니다. 기억해야 할 또 다른 사항은 Http Server = 정적 콘텐츠 및 앱 서버 = 동적 콘텐츠입니다 (이것이 설계된 방식입니다). 각 서버에 적절한 책임을 위임함으로써 효율성을 극대화 할 수 있습니다. 그러나 오늘날 이것은 아마도 성능이 중요한 환경에서만 문제가되고 Tomcat과 같은 것이 대부분 두 역할 모두에서 잘 작동 할 것입니다. 그러나 여전히 명심해야 할 것이 있습니다.


2

나는 이것을 이렇게 해결했다.

<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>

이것은 Tomcat과 물론 Jboss에서 작동합니다. 그러나 결국 나는 Spring이 제공 하는 솔루션 (rozky가 언급 한대로) 을 사용하기로 결정했습니다 .


2

spring mvc 3.0.x에 기반을 둔 urlrewrite와 주석이라는 두 가지 방법을 모두 사용했으며 주석 기반 접근 방식이 가장 적합하다는 것을 알았습니다.

<annotation-driven />

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

urlrewrite의 경우 많은 규칙을 정의해야하며, 이미 종속성을 제공 한 UrlRewriteFilter에 대한 클래스를 찾을 수없는 예외가 발생합니다. 전이 의존성의 존재로 인해 발생한다는 것을 알았습니다. 따라서 다시 한 단계가 증가하고 pom.xml에서 해당 의존성을 제외해야합니다.

<exclusion></exclusion> tags.

따라서 주석 기반 접근 방식이 좋습니다.


2

Spring 3부터 모든 리소스를 다른 방식으로 매핑해야합니다. 자원의 위치를 ​​지정하려면 태그를 사용해야합니다.

예 :

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

이 방법으로 디스패처 서블릿이 디렉토리 자원을 조사하여 정적 컨텐츠를 찾도록 지시합니다.


1

이 문제를 해결하는 방법은 모든 작업을 "web"또는 "service"와 같은 특정 접두사로 배치하고 해당 접두사가있는 모든 URL이 DispatcherServlet에 의해 차단되도록 구성하는 것입니다.


1

문제를 해결하기 위해 스프링 기본 규칙 (/ **) 전에 tuckey의 urlrewritefilter (urlrewrite.xml)에 세 가지 규칙을 추가하기 만하면됩니다.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
    <urlrewrite default-match-type="wildcard">
     <rule>
      <from>/</from>
      <to>/app/welcome</to>
     </rule>
     <rule>
      <from>/scripts/**</from>
      <to>/scripts/$1</to>
     </rule>
     <rule>
      <from>/styles/**</from>
      <to>/styles/$1</to>
     </rule>
     <rule>
      <from>/images/**</from>
      <to>/images/$1</to>
     </rule>
     <rule>
      <from>/**</from>
      <to>/app/$1</to>
     </rule>
     <outbound-rule>
      <from>/app/**</from>
      <to>/$1</to>
     </outbound-rule> 
    </urlrewrite>

1

정적 내용을 사용하는 구성이 몇 가지 있지만 내 솔루션은 Tomcat 내에 대량 웹 응용 프로그램 폴더를 만드는 것입니다. 이 "대량 웹앱"은 앱을 제공하지 않고 모든 정적 콘텐츠 만 제공합니다. 정적 스프링 컨텐츠를 실제 스프링 웹 애플리케이션에 제공하기위한 간편한 솔루션입니다.

예를 들어, Tomcat에 두 개의 webapp 폴더를 사용하고 있습니다.

  1. springapp : imgs, js 또는 css와 같은 정적 내용이없는 스프링 웹 응용 프로그램 만 실행 중입니다. (봄 앱 전용)
  2. resources : JSP, 서블릿 또는 Java 웹 애플리케이션이없는 정적 컨텐츠 만 제공합니다. (정적 컨텐츠 전용)

자바 스크립트를 사용하려면 자바 스크립트 파일의 URI를 추가하면됩니다.

예> /resources/path/to/js/myjavascript.js

정적 이미지의 경우 동일한 방법을 사용하고 있습니다.

예> /resources/path/to/img/myimg.jpg

마지막으로 " 보안 제한을 두었습니다 Tomcat에 "를 실제 디렉토리에 대한 액세스를 차단합니다. 사람들이 정적 컨텐츠 경로에 액세스하려고 할 때 페이지에 "403 금지 된 오류"가 발생하도록 "아무도"사용자 롤을 제한 조건에 두었습니다.

지금까지 그것은 매우 잘 작동합니다. 또한 Amazon, Twitter 및 Facebook과 같은 인기있는 많은 웹 사이트에서 정적 콘텐츠를 제공하기 위해 다른 URI를 사용하고 있음을 알았습니다. 이것을 찾으려면 정적 콘텐츠를 마우스 오른쪽 버튼으로 클릭하고 URI를 확인하십시오.


1

이것은 내 경우에 진짜 일을했다

web.xml에서 :

...
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/images/*</url-pattern>
    <url-pattern>/css/*</url-pattern>
    <url-pattern>/javascripts/*</url-pattern>
</servlet-mapping>


<servlet-mapping>
    <servlet-name>spring-mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

...


1

자바 기반 스프링 구성의 경우 다음을 사용할 수 있습니다

정적 자원을 제공하기위한 자원 핸들러 등록을 저장하는 ResourceHandlerRegistry 사용 .

추가 정보 @ WebMvcConfigurerAdapter@EnableWebMvc 를 통해 활성화 된 Spring MVC에 대한 Java 기반 구성을 사용자 정의하기위한 콜백 메소드를 정의합니다.

@EnableWebMvc
@Configurable
@ComponentScan("package.to.scan")
public class WebConfigurer extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static_resource_path/*.jpg").addResourceLocations("server_destination_path");

    }

0

여기에 설명 된 것과 동일한 의사 결정 과정을 겪은 후 ResourceServlet 제안을 따르기로 결정했습니다.

maven 빌드 프로세스에서 webflow를 사용하는 방법에 대한 자세한 정보는 다음을 참조 하십시오. http://static.springsource.org/spring-webflow/docs/2.0.x/reference/html/ch01s05.html

표준 Maven 중앙 저장소를 사용하는 경우 아티팩트는 위의 스프링 소스 번들과 반대입니다.

<dependency>
    <groupId>org.springframework.webflow</groupId>
    <artifactId>spring-js</artifactId>
    <version>2.0.9.RELEASE</version>
</dependency> 

0

이것은 적어도 세 가지 방법으로 달성 될 수 있습니다.

솔루션 :

  • html을 리소스 파일로 노출
  • * .html 요청도 처리하도록 JspServlet에 지시
  • 자신의 서블릿을 작성하십시오 (또는 기존의 다른 서블릿 요청에 * .html로 전달).

완전한 코드 예제를 얻으려면 다른 게시물에서 내 대답을 참조하십시오 : Spring MVC에서 HTML 파일에 요청을 매핑하는 방법은 무엇입니까?


0

URLPattern에 문제가 있습니다

서블릿 매핑의 URL 패턴을 "/"에서 "/ *"로 변경


0
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<mvc:default-servlet-handler/>
</beans>

주석 기반 구성을 사용하려면 아래 코드를 사용하십시오.

@Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

0

다음 경로에 css, js와 같은 정적 컨텐츠를 배치하십시오.

resources 
        ->static
               ->css
               ->js
(or) 
resources 
        ->public
               ->css
               ->js
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.