url-parttern 配置规则

url-parttern 配置规则

​ servlet-mapping和filter-mapping的路径映射路径中,前端发起数据的请求后,传到后台,会根据匹配相应的处理方法。servlet容器接收到浏览器发起url请求后,容器会将url路径地址减去当前项目的上下文路径,然后将剩下的字符串作为路径映射。比如: 收到url路径为http://localhost:8080/demo/adduser,而当前的项目上下文路径为/demo,那么剩下的路径映射为 : /adduser,容器将 寻找与/adduser匹配的url-pattern

一. 精确匹配

  • 精确匹配要求请求url和url-pattern配置项完全一致。

  • 举个栗子,url-pattern配置为:

    
    	targetServlet
    	/user/adduser.action
    
    

    那么以下url可以匹配到该路径:

    http://localhost:8080/demo/user/adduser.action

    (注意,这里/demo是项目上下文路径,下同)

二. 路径匹配

  • 匹配以 “/” 字符开头,并以 “/*”结尾的路径

  • 举个栗子,url-pattern配置为:

    
    	targetServlet
    	/user/*
    
    

    那么以下路径均可以匹配到:

    http://localhost:8080/demo/user/adduser.action

    http://localhost:8080/demo/user/users.html

    http://localhost:8080/demo/user/update.jsp

    http://localhost:8080/demo/user/deleteuser/101

三. 后缀匹配

  • 后缀匹配以“.”结尾,匹配到所有带有后缀的url路径

  • 举个栗子,url‘配置为:

    
    	targetServlet
    	*.jsp
    	*.html
    
    

    以上的配置会匹配到所有以.jsp和.html结尾的路径:

    http://localhost:8080/demo/user/update.jsp

    http://localhost:8080/demo/user/deleteuser/index.html

四. 缺省匹配

  • 缺省形式只有一例,如下:

	targetServlet
	/

这时targetServlet会匹配除带有后缀的所有的url路径,以下路径均可以匹配到:

http://localhost:8080/demo/user/adduser

http://localhost:8080/demo/user/users/list

http://localhost:8080/demo/sys/user/update

注意,不能匹配以下路径:

http://localhost:8080/demo/user/adduser.action

http://localhost:8080/demo/user/users.html

http://localhost:8080/demo/user/update.jsp

五. 注意事项

  • 匹配顺序

    • 优先级大到小为: 精确匹配>路径匹配>后缀匹配>缺省匹配

    • 对于路径匹配,url会匹配到url-pattren的最长路径

  • 路径匹配和的后缀匹配不能同时组合设置。“*”不是通配符,不能将路径配置看作正则表达式。

    以下配置都是错误的:

    /aa/*/bb

    /aa/*.jsp

  • /* 和 / 的含义不相同

    • /* 会匹配到所有的request,仅次于精确匹配,会覆盖所有的后缀匹配(精确匹配会覆盖路径匹配)。一般用于过滤器,如果用于servelet映射,会导致前端无法访问服务器资源文件(诸于.jsp .html .js文件)。

    • / 是缺省匹配形式,优先级最低,不会覆盖其他任何urlpattern,只会覆盖servlet内置default-servlet,对任何request请求都有可能匹配到。

    • servlet有内置的“.jsp”匹配器(后缀匹配形式),后缀匹配优先级高于缺省匹配,所以 会出现以下情况:

      在使用缺省配置/ 后,会拦截http://localhost:8080/appDemo/user/addUser类似的请求,但是不会拦截到http://localhost:8080/appDemo/user/index.jsp

你可能感兴趣的:(java)