SpringMVC中/和/*和/**的区别,两分钟搞清楚怎么用

SpringMVC中/和/*和/**的区别,两分钟搞清楚怎么用

进入正题之前,先弄清楚一个事情,tomcat中默认配置了两个servlet:defaultServelet和jspServlet,拦截路径配置如下:

 DefaultServlet: 该servlet优先级最低,当没有任何一个Servlet处理一个请求时,那么DefaultServlet就会处理该请求,并返回状态码404。

JspServlet: 主要是处理jsp页面的,将动态页面转换为静态页面(jsp技术已经不主流了)。

进入正题,说说/、/*和/**的区别

/ :拦截所有请求 包括静态资源和动态请求 但是不拦截jsp 
/*:拦截所有请求所有的文件夹,但是不包括子文件夹 包括静态资源和动态请求 也拦截jsp
/**:的意思是所有文件夹及里面的子文件夹

接下来,重点说说请求的拦截流程。这里假设拦截模式为/*。Controller代码如下:

@Controller
public class MyController {

    @RequestMapping(method = RequestMethod.GET,path = "/haha.jsp")
    public String test01(){
        System.out.println(1234);
        return "index";
    }

}

之前笔者一直不明白,提交一个.jsp请求之后,服务端应该返回一index页面才对,毕竟servlet拦截了这个请求。后来查了资料才知道,当返回/WEB-INF/pages/index.jsp,dispatherServlet会接着拦截这个请求,发现没有处理这个请求的方法,那么就会把这个请求交给defaultServlet,就会返回404状态码。

@Controller
public class MyController {

    @RequestMapping(method = RequestMethod.GET,path = "/haha.jsp")
    public String test01(){
        System.out.println(1234);
        return "index";
    }
    @ResponseBody
    @RequestMapping(method = RequestMethod.GET,path = "/WEB-INF/pages/index.jsp")
    public String test02(){
        System.out.println(456);
        return "hahah";
    }

}

验证,添加了上述的代码块,同样发送请求/haha.jsp,这时候控制台会输出1234 456,并返回hahah内容的页面。

 

原文地址:https://www.cnblogs.com/amazing-eight/p/13225321.html