如何在春天通过未知的uri

时间:2015-02-01 07:41:50

标签: spring spring-mvc

我们用于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()开始)。

那么如何将具有未知映射的请求直接传递给资源文件夹?

1 个答案:

答案 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" />