前提:
1、 (应用上下文就是主机,不含项目名!)
2、没有配置视图解析器InternalResourceViewResolver(即没有prefix和suffix)
3、在【方法返回值】使用相对路径的情况下!!!
假设在webapp/x/y(这里的webapp其实就是应用上下文Application context)下有个Tom.jsp,其中有如下代码:
对应Controller的内容:
这里的"Mike.jsp"不是"/"开头,因此用的是相对路径。(如果是绝对路径怎么办?很简单,直接跳转就行!)
那么这里的"相对",是指相对谁呢?
是相对webapp/x/y吗?不是的。分析如下:
我们在浏览器中访问:http://localhost:8080/x/y/Tom.jsp
把鼠标放在超链接上,可以看到:
点击超链接,页面变成:
从上图可知,解析前的址址是【/a/b/c/d】,解析后的地址是【/a/b/c/Mike.jsp】。【解析前的地址】(请求地址,或者说是类上的RequestMapping地址+方法上的RequestMapping地址)、【方法返回值】(比如这里的"Mike.jsp")以及【解析后的地址】这三者之间的关系如下:
公式一:【解析后的地址】=【解析前的地址 去掉 最后一个"/"后面的内容("/"保留)】【方法返回值】(等号右边其实就是简单的字符串拼接)
在上面的示例中,【解析前的地址】是"/a/b/c/d",去掉最后一个"/"后面的内容("/"保留)(即d)后变成"/a/b/c/",【方法返回值】为"Mike.jsp",因此【解析后的地址】为"/a/b/c/Mike.jsp"
公式二:【解析前的地址】(或者说是请求地址)=【类上的RequestMapping地址】【方法上的RequestMapping地址】
进行如下测试:
多次验证,公式无误,值得依赖!