zoukankan      html  css  js  c++  java
  • SpringBoot2(八)RequestMapping注意事项

    这几天在使用SpringBoot2的时候,发现了许多奇奇怪怪的bug,一样的配置,在Spring中不会发生的问题,在SpringBoot下突然就冒出来了。

    通配符的使用:

      为了减少页面的配置,经常会使用通配符,如下列代码,作用是:Url自动匹配core文件夹下的同名文件。

      @RequestMapping(value = "core/**", method = RequestMethod.GET)
      public void core() {
      }

      但是在SpringBoot下,这是十分危险的,如果未找到页面,代码会尝试寻找跟它匹配的路径,自动地帮我们去转发页面,转发之后依旧找不到,然后继续转发,始终未找到目标页面,就产生了无限转发,最终导致内存溢出(现象如此,暂未查看源码)。

      下列日志:因为未找到 core/excel 路径,DispatcherServlet竟然自动拼接路径,然后进行页面转发 ,转发完还是找不到,然后路径就越拼接越长,最后内存溢出。

    2019-12-17 00:32:46.614 [http-nio-8081-exec-3] DEBUG org.springframework.web.servlet.DispatcherServlet - "FORWARD" dispatch for GET "/Sea/core/
    excel/core/excel/core/excel/core/excel/core/excel/core/excel/core/excel/core/excel/list?_bust=1576513963087", parameters={masked}

      简单的处理方式就是在路径结尾加上后缀

      @RequestMapping(value = "core/**/*.ftl", method = RequestMethod.GET)
      public void core() {
      }

    静态资源与模版不要取同名:

      static下的资源文件都是可以直接访问的,template下的文件,配置后方可使用,这就产生一个问题:各放1个同名文件会如何?

      比如:在static文件夹放了a.js,然后在template文件夹放了a.ftl,然后将两个路径前缀设置成一个样,使用 ‘xx/xx/a’ 路径进行访问。很明显,只有其中1个能访问,在配置了RequestMapping的情况下,未找到页面之后,直接报404错误,而不会再去查找static目录;如果没配置 RequestMapping,则直接访问static目录。

      如果希望让程序自动去识别,要么在static放置a.js,要么就在template放置a.ftl,存在哪个文件,自动获取哪个,这种设计则是不允许的。

      因此,static和template两个目录中的文件,尽可能选用完全不同的命名方式,避免出现意想不到的错误。

      而且,Servlet下需要很清楚一点,请求最后的扩展名,经常是被程序直接忽略的。比如 http://localhost/xx/1.png,最后面的 “.png”极有可能被忽略,扩展名本身可写可不写,它并不影响程序的执行,因此,如果在目录中放置了同名文件,则需要着重观察代码的执行情况。

  • 相关阅读:
    python基础之函数(基础七)
    python基础之文件操作(基础六)
    python基础之数据类型补充(基础五)
    python之深浅拷贝(基础四)
    python基础数据类型之字典(基础三)
    python基础数据类型之列表,元组(基础二)
    python基础入门二
    随笔
    oss 上传照片失败
    mysql 同表查询更新
  • 原文地址:https://www.cnblogs.com/chenss15060100790/p/12052328.html
Copyright © 2011-2022 走看看