Him*_*agi 5 java version-control spring jsp spring-mvc
我的 spring 应用程序中有这样的静态资源结构:
\src
\main
\webapp
\resouces
\css\..
\js\..
Run Code Online (Sandbox Code Playgroud)
并像这样配置了 VersionResourceResolver :
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/")
.setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS)).resourceChain(true)
.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));
}
Run Code Online (Sandbox Code Playgroud)
我在我的 jsp 中使用 jstl 包含了资源:
<script type="text/javascript" src="<c:url value="/resources/js/my.js"/>"></script>
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序时,我看不到任何类型的版本控制。我错过了什么?
我也试过:
但没有运气
更新
我包括这样的资源:
<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>
Run Code Online (Sandbox Code Playgroud)
这就是正在生成的内容:
<link rel="stylesheet" href="/app/resources/css/mycss.css?v=2">
<script type="text/javascript" src="/app/resources/js/myjs.js?v=1"></script>
Run Code Online (Sandbox Code Playgroud)
索引页使用:
<welcome-file-list>
<welcome-file>/WEB-INF/views/index.jsp</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)
控制器:用于家庭等...
@RequestMapping(value = "/home", method = RequestMethod.GET)
public ModelAndView home(HttpServletRequest request, ModelMap model) {
...
}
Run Code Online (Sandbox Code Playgroud)
可能ResourceUrlProvider is null适合你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);
}
Run Code Online (Sandbox Code Playgroud)
要修复此问题,请ResourceUrlEncodingFilter在web.xml或 中注册WebApplicationInitializer,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
其中spring-dispatcher为DispatcherServlet:
<servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)
并确保您的内容my jsp是通过 呈现的spring-dispatcher,例如:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
我在 GitHub 上创建了一个示例应用程序 - spring-resource-versioning,它可以回答您的进一步问题。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
1867 次 |
| 最近记录: |