如何在 spring 中传递未知的 uri

How to pass unknown uri's in spring

我们用于 spring 网络应用 angularJS 和 Jade。这些文件位于静态资源文件夹中。当用户想要访问页面时,Jade 呈现文件和 returns html 页面。在加载页面时需要其他资源,如 css 和 js 文件。我遇到了问题,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() 开始)。

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

您不必使用过滤器,您可以在 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" />