2017-01-26 2 views
2

私は私の春のアプリケーションでこのような静的リソースの構造を持っている:VersionResourceResolver動作していない

\src 
    \main 
     \webapp 
      \resouces 
       \css\.. 
       \js\.. 

と、このようVersionResourceResolverを設定している:

@Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/") 
       .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS)).resourceChain(true) 
       .addResolver(new VersionResourceResolver().addContentVersionStrategy("/**")); 
    } 

は私のjspでJSTLを使用してリソースが含まれていました。

<script type="text/javascript" src="<c:url value="/resources/js/my.js"/>"></script> 

しかし、アプリケーションを実行すると、kバージョン管理のインディーズ 私は何が欠けていますか?

はまた、私は試してみました:

https://stackoverflow.com/a/38407644/3603806

しかし、運

UPDATE

を私はこのようなリソースを含めています:

<link rel="stylesheet" href="<c:url value="/resources/css/mycss.css?v=2" />"> 
<script type="text/javascript" src="<c:url value="/resources/js/myjs.js?v=1"/>"></script> 

、これはWHであります

<link rel="stylesheet" href="/app/resources/css/mycss.css?v=2"> 
<script type="text/javascript" src="/app/resources/js/myjs.js?v=1"></script> 

インデックスページを使用して::

<welcome-file-list> 
     <welcome-file>/WEB-INF/views/index.jsp</welcome-file> 
    </welcome-file-list> 

コントローラー:生成なっている自宅用などを...

@RequestMapping(value = "/home", method = RequestMethod.GET) 
    public ModelAndView home(HttpServletRequest request, ModelMap model) { 
     ... 
    } 

答えて

2

はそれを修正するにはencodeURL

ResourceUrlEncodingFilter.ResourceUrlEncodingResponseWrapper
@Override 
     public String encodeURL(String url) { 
      ResourceUrlProvider resourceUrlProvider = getResourceUrlProvider(); 
      if (resourceUrlProvider == null) { 
       logger.debug("Request attribute exposing ResourceUrlProvider not found"); 
       return super.encodeURL(url); 
      } 
      initIndexLookupPath(resourceUrlProvider); 
      if (url.length() >= this.indexLookupPath) { 
       String prefix = url.substring(0, this.indexLookupPath); 
       int suffixIndex = getQueryParamsIndex(url); 
       String suffix = url.substring(suffixIndex); 
       String lookupPath = url.substring(this.indexLookupPath, suffixIndex); 
       lookupPath = resourceUrlProvider.getForLookupPath(lookupPath); 
       if (lookupPath != null) { 
        return super.encodeURL(prefix + lookupPath + suffix); 
       } 
      } 
      return super.encodeURL(url); 
     } 

であなたのためにResourceUrlProvider is nullかもしれないが、次のように、web.xmlまたはWebApplicationInitializerResourceUrlEncodingFilterを登録します。

<filter> 
     <filter-name>resourceUrlEncodingFilter</filter-name> 
     <filter-class> 
      org.springframework.web.servlet.resource.ResourceUrlEncodingFilter 
     </filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>resourceUrlEncodingFilter</filter-name> 
     <servlet-name>spring-dispatcher</servlet-name> 
    </filter-mapping> 
spring-resource-versioning、答えることができる - 私はGitHubの上で使用可能なサンプルアプリケーションを作成し

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

@Controller 
public class HomeController { 

    @RequestMapping(value = "/my-jsp", method = RequestMethod.GET) 
    public String home() { 
     return "my"; 
    } 
} 

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

そして、あなたのmy jspは、例えば、spring-dispatcherによってレンダリングされていることを確認しますようspring-dispatcherは、DispatcherServletある

あなたのさらなる質問。

希望すると助かります!

+0

ありがとうございました。私はそれを試して –

+0

いいえこれも私のために働いていません。 ( –

+0

あなたの 'jsp'ページとブラウザ上でどのようにレンダリングされているのかを教えてもらえますか? – Arpit

0

私は1時間前のように同じ問題に遭遇しました。私は、このメソッドをオーバーライドすることで、それを解決:

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 

VersionResourceResolver versionResolver = new VersionResourceResolver() 
     .addFixedVersionStrategy(version, "/**/*.js") 
     .addContentVersionStrategy(version, "/**/*.css", "/**/*.png"); //adjust those paths according to the webapp's folder names 

registry.addResourceHandler("/res/**") 
     .addResourceLocations("/resources/") 
     .setCachePeriod(CACHE_SECONDS) 
     .resourceChain(true) 
      .addResolver(versionResolver); 
} 
+0

ありがとうございます。これは私を助けません。静的リソースのバージョン管理を有効にしたい私はまだそれを取得していません。 –

+0

私はjsファイルとcssファイルにアクセスできます。 –

+0

@HimanshuTyagi新しいVersionResourceResolver().addFixedVersionStrategy(バージョン、 "/**/*.js") .addContentVersionStrategy(バージョン、 "/**/*.css"、 "/**/*.png"); –

関連する問題