我们用于spring web应用程序angularJS和Jade。这些文件位于static-resource文件夹中。当用户想要访问页面时,Jade呈现该文件并返回html页面。加载页面时需要其他资源,如css和js-files。我有问题,Spring试图映射这些资源请求,当然也找不到它的任何映射。
所以我尝试安装一个过滤器,它应该将这些请求直接传递给资源文件夹,而不需要任何请求映射或处理或其他内容。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
String uri = ((HttpServletRequest) request).getRequestURI();
System.out.println("Filtering: " + uri);
try{
request.getRequestDispatcher(uri).forward(request, response);
}catch(Exception e)
{
e.printStackTrace();
}
}
似乎,过滤器以递归方式调用,因此应用程序会遇到堆栈溢出(至少我可以在无限循环中看到很多异常,总是从doFilter()开始)。
那么如何将具有未知映射的请求直接传递给资源文件夹?
答案 0 :(得分:0)
您不必使用过滤器,您可以在Spring MVC servlet XML配置中配置静态文件的映射,在这种情况下,您对CSS和JS的请求可以正常工作。典型的是将静态文件放在单个文件夹下,并映射到该文件夹,例如
1)文件夹结构
| - resources
| | - css
| | ` your CSS files...
| | - js
| ` your JS files...
| - WEB-INF
2)将请求映射到静态资源的位置
<resources mapping="/resources/**" location="/resources/" />
或
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources");
}
如果你正在使用java配置
3)从JSP访问静态资源,如
<link href="<c:url value="/resources/css/[your file].css"/>" rel="stylesheet" type="text/css" />