spring的请求路径问题

写请求路径时,把controller的请求代码和html的请求路径一样,结果发现进入了死循环。

@RequestMapping("/system/enforcement/mytask")
    public String mytaskList(){
        return "system/enforcement/mytask";
    }

当时请求路径为localhost:8380/EMGD/system/enforcement/mytaskList.html

发现一直会进入Controller的代码,静态资源也配置了

 <mvc:resources location="/" mapping="/favicon.ico"/>
    <mvc:resources location="/public/" mapping="/public/**" />
    <mvc:resources location="/system/" mapping="/system/**"/>

发现没有效果。

打断点发现客户端发送一个请求会进入DispatcherServlet类

	try {
				processedRequest = checkMultipart(request);
				multipartRequestParsed = (processedRequest != request);

				// Determine handler for the current request.
               //获得对应的处理器链链 和 handle
				mappedHandler = getHandler(processedRequest);
				if (mappedHandler == null || mappedHandler.getHandler() == null) {
					noHandlerFound(processedRequest, response);
					return;
				}

//根据handlerMappings 来获取合适的处理器链 第一个匹配的hanldemethod为org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@40fd25bb

protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
		for (HandlerMapping hm : this.handlerMappings) {
			if (logger.isTraceEnabled()) {
				logger.trace(
						"Testing handler map [" + hm + "] in DispatcherServlet with name '" + getServletName() + "'");
			}
			HandlerExecutionChain handler = hm.getHandler(request);
			if (handler != null) {
				return handler;
			}
		}
		return null;
	}
//如果找不到一样的路径 就会依次循环 所有请求路径最好和controller的路径一直
这里看到匹配规则 xxx.* 和 当前路径匹配 
因为的请求路径system/enforcement/mytaskList.html 和 system/enforcement/mytaskList 一致
所有 第二次 又会调到controller的方法里面 就会造成死循环
private String getMatchingPattern(String pattern, String lookupPath) {
		if (pattern.equals(lookupPath)) {
			return pattern;
		}
		if (this.useSuffixPatternMatch) {
			if (!this.fileExtensions.isEmpty() && lookupPath.indexOf('.') != -1) {
				for (String extension : this.fileExtensions) {
					if (this.pathMatcher.match(pattern + extension, lookupPath)) {
						return pattern + extension;
					}
				}
			}
			else {
				boolean hasSuffix = pattern.indexOf('.') != -1;
				if (!hasSuffix && this.pathMatcher.match(pattern + ".*", lookupPath)) {
					return pattern + ".*";
				}
			}
		}
		if (this.pathMatcher.match(pattern, lookupPath)) {
			return pattern;
		}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值