个人通过调查发现在课程所属项目的测试中发生该问题的原因是因为项目使用的tomcat版本的问题,Tomcat7中没有验证,以下仅以tomcat8为例说明:
找到getRealPath("upload"),通过intellij所提示的sourcecode找到的实现细节为spring-test的包中的实现,代码中其中已经避免了参数为"upload"会发生的错误,其代码如下:
protected String getResourceLocation(String path) {
if (!path.startsWith("/")) {
path = "/" + path;
}
return this.resourceBasePath + path;
}
但是实际上,这里生效的代码并非此处所显示的代码,而是tomecat中org.apache.catalina.core包中的ApllicationContext的getRealPath方法。
这个方法在tomecat8.0.29以前是存在Bug的,尽在代码注释中写明了情况,其写到
// The WebResources API expects all paths to start with /. This is a
// special case for consistency with earlier Tomcat versions.
但是却没有通过代码来解决一下,而是在参数不为空或者不以"/"开头返回null而不是自己加上"/".
该bug在这里可以看到https://bz.apache.org/bugzilla/show_bug.cgi?id=58228
随后在2015/3/11号的一次提交中被修复,该修复代码在15年8月发布的8.0.29版本中被发布,具体可参见
我这里想问的是:我怎么才能在tomcat中用spring的该实现??