javascript
ant指定servlet版本_Spring工具 - AntPathMatcherUrlPathHelper(针对URL进行处理)
Spring工具篇(1)- AntPathMatcher&&UrlPathHelper(针对URL进行处理)
JAVA && Spring && SpringBoot2.x — 学习目录
源码版本:SpringBoot2.1.3 内含 Spring-5.1.5
源码位置:org.springframework.web.cors.UrlBasedCorsConfigurationSource#getCorsConfiguration
public class UrlBasedCorsConfigurationSource implements CorsConfigurationSource {
//使用LinkedHashMap,保证url的顺序
private final MapcorsConfigurations = new LinkedHashMap<>();
private PathMatcher pathMatcher = new AntPathMatcher();
private UrlPathHelper urlPathHelper = new UrlPathHelper();
//方法
@Override
@Nullable
public CorsConfiguration getCorsConfiguration(HttpServletRequest request) {
//获取URL的请求路径
String lookupPath = this.urlPathHelper.getLookupPathForRequest(request);
for (Map.Entryentry : this.corsConfigurations.entrySet()) {
//进行Ant表达式匹配
if (this.pathMatcher.match(entry.getKey(), lookupPath)) {
return entry.getValue();
}
}
return null;
}
}
这个类的是CorsFilter的配置类,我们可以为每一个URL单独的提供CORS的配置。当请求时,根据Ant表达式选择最符合的配置。需要解决的问题:
如何获取Path路径;
如何使用Ant表达式进行匹配;
在Spring中提供了UrlPathHelper和AntPathMatcher工具类对URL进行匹配以及处理。
1. UrlPathHelper类
源码位置:org.springframework.web.util.UrlPathHelper
UrlPathHelper API官方文档
该类位于Spring web包下,若是基于Spring web开发的应用,可以使用该帮助类里面的方法。
该类是一个帮助类,用于UrlPath的获取。实际上,我们获取请求中的URL是通过Request对象的getContextPath、getServletPath、getRequestURI方法。
在SpringBoot2.x环境下:
修改web application的上下文路径。
server:
# 端口号
port: 8082
servlet:
# 应用上下文路径
context-path: /a
修改dispatchServlet(servlet-path)的映射路径
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
return new ServletRegistrationBean(dispatcherServlet,"/api/*");
}
若请求路径:http://localhost:8082/a/api/test/testool
方法
作用
结果
request.getContextPath()
web application路径
/a
getServletPath()
servlet的mapping路径
/api
getRequestURI()
url去除协议域名端口号后的路径
/a/api/testool
在UrlPathHelper中同时也含有获取request路径的方法:
方法名
作用
结果
getContextPath
获取web application路径
/a
getPathWithinApplication
获取web application内的路径
/api/testool
getServletPath
获取servlet-mapping路径
/api
getPathWithinServletMapping
获取Servlet-mapping映射内的路径
/testool
getLookupPathForRequest
根据alwaysUseFullPath属性,获取getPathWithinApplication或者getPathWithinServletMapping路径
1.alwaysUseFullPath=true则/api/testool;2. 否则/testool
getRequestUri
获取请求的uri地址
/a/api/testool
getOriginatingRequestUri
获取转发请求的源地址,若无转发地址,即为本身
/a/api/testool
注:若是servlet-mapping=/,则为默认的Servlet容器,此时的ServletPath为uri - contextPath。
一般而言,是调用getLookupPathForRequest方法,获取用户上送地址。
2. AntPathMatcher类
2.1 match方法(url匹配)
我们在UrlPathHelper可以获取到请求地址,而后我们可以对URLs字符串进行匹配。
SpringMVC的路径匹配规则使用Ant规则,其基本规则如下:
? 匹配一个字符;
* 匹配0个或多个字符;
** 匹配0个多多个目录;
使用方法:
@RequestMapping("antPath")
public void getPath(HttpServletRequest request){
UrlPathHelper urlPathHelper = new UrlPathHelper();
String path = urlPathHelper.getLookupPathForRequest(request);
System.out.println("path路径:"+path);
AntPathMatcher matcher=new AntPathMatcher();
boolean match = matcher.match("/**", path);
System.out.println("是否匹配:"+match);
}
2.2 combine(url的合并)
[科目版嗯]用于含有Ant路径的合并。
1. 规则如下表所示:
模式1
模式2
结果
null
null
null
/hotels
null
/hotels
null
/hotels
/hotels
/hotels
/bookings
/hotels/bookings
/hotels
bookings
/hotels/bookings
/hotels/*
/bookings
/hotels/bookings
/hotels/**
/bookings
/hotels/**/bookings
/hotels
{hotel}
/hotels/{hotel}
/hotels/*
{hotel}
/hotels/{hotel}
/hotels/**
{hotel}
/hotels/**/{hotel}
/*.html
/hotels.html
/hotels.html
/*.html
/hotels
/hotels.html
/*.html
/*.txt
IllegalArgumentException
2. 使用方式:
/* @param pattern1 the first pattern 模式1
* @param pattern2 the second pattern 模式2
* @return the combination of the two patterns 返回结果
* @throws IllegalArgumentException if the two patterns cannot be combined 两个模式无法合并
*/
@Override
public String combine(String pattern1, String pattern2) {
}
总结
以上是生活随笔为你收集整理的ant指定servlet版本_Spring工具 - AntPathMatcherUrlPathHelper(针对URL进行处理)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: mysql 选择字符集 拉丁字符集_my
- 下一篇: springboot jar服务器运行后