Servlet Real Path
Servlet Real Path
我正在运行位于目录博客下的一个Web应用程序(例如www.example.com/blog)。\n我想要获取请求的真实文件系统路径。\n例如:www.example.com/blog/test-file.html ->\n /usr/share/tomcat7/webapps/blog/test-file.html\n我尝试了以下方法:\npublic String realPath(HttpServletRequest request, ServletContext servletContext){\n String requestURI = request.getRequestURI();\n String realPath = servletContext.getRealPath(requestURI);\n return realPath;\n}\n然而,这返回的是:\n/usr/share/tomcat7/webapps/blog/blog/test-file.html\n正确的做法是什么?
Servlet Real Path问题的出现原因是使用了getRequestURI()方法返回的路径作为getRealPath()方法的参数。getRequestURI()方法返回以应用程序上下文开头的路径,而getRealPath()方法将getRequestURI()方法返回的字符串追加到应用程序在文件系统上所在的文件夹的真实路径中,从而导致路径中出现了两个"blog"。解决方法是使用HttpServletRequest类的getServletPath()方法作为getRealPath()方法的参数,这样可以得到最接近想要的结果。
需要注意的是,获取的真实路径并不一定是文件系统上的实际路径,而是配置在web.xml中的url-pattern的逻辑路径。虽然指定的路径不需要在物理上存在,但是getRealPath()方法仍然会返回对应的真实路径。这一点在ServletContext类的getRealPath()方法的文档中也有明确说明。