java - ServeletContext.getRealPath(“”) 为什么返回应用的根目录绝对地址?
高洛峰
高洛峰 2017-04-18 10:14:00
0
1
425

getRealPath

       java.lang.String getRealPath(java.lang.String path)

Gets the real path corresponding to the given virtual path.
For example, if path is equal to /index.html, this method will return the absolute file path on the server's filesystem to which a request of the form http://<host>:<port&... would be mapped, where <contextPath> corresponds to the context path of this ServletContext.

上面是API的解释,我疑惑的是这个virtual path。
一般的用法是serveletContext.getRealPath(“/”),“/”可以理解为,应用的根目录,那么“” 呢?
希望有大神能,详细的解释这个virtual path的概念。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(1)
大家讲道理

=====回答你這個問題突然遇到segmentfault網站掛了答案又重新寫一遍====

javax.servlet.ServletContext

是一個介面。具體實作由servlet容器來實現,例如tomcat。在這個介面中定義了一個方法叫getRealPath,對應的實作也是有各個servlet容器來實現的。我沒有查看tomcat的源碼,只看了spring的mock實作。

@Override
public String getRealPath(String path) {
    Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
    try {
        return resource.getFile().getAbsolutePath();
    }
    catch (IOException ex) {
        logger.warn("Couldn't determine real path of resource " + resource, ex);
        return null;
    }
}

protected String getResourceLocation(String path) {
    if (!path.startsWith("/")) {
        path = "/" + path;
    }
    return this.resourceBasePath + path;
}

在這個實作中可以看到傳入「」和傳入「/」效果是一樣,程式碼都有了就不用在多解釋了吧。其他容器的實作估計也差不多。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板