RealPath
String realPath=request.getServletContext().getRealPath();
String realPath=request.getServletContext().getRealPath("XXX");
1)取得服务应用的绝对路径(本地路径)。
2)取得服务应用的绝对路径,再和参数进行拼接。(在应用绝对路径下创建一个目录,目录名为传入的参数)
ServletPath
String servletPath=request.getServletPath();
即获得Servlet处理请求的路径信息;
举例1 :http://localhost:8080/news/main/list
获得的值为:/main/list;
举例2 :http://localhost:8080/news/main/*
获得的值为:/main;
举例3:
返回结果值:/download;
因此,使用getServletPath()在有些情况下是获取不到完整路径信息的;
ContextPath
String contextPath=request.getContextPath();
举例1 : http://localhost:8080/mid0201/download/photo/xxx.jpg
调用完方法,返回值为 /mid0201.
RequestURI
String requestUri =request.getRequestURI();
获得请求路径
举例1:http://localhost:8080/mid0201/download/photo/xxx.jpg
调用方法后,返回值为 /mid0201/download/photo/xxx.jpg
得出结论:RequestURI=ContextPath+ServletPath;
获取真实ServletPath的方法
ServletPath=RequestURI-ContextPath;
- 先获取RequestURI;
String requestUri =request.getRequestURI();
//返回结果: /mid0201/download/photo/xxx.jpg
- 再获取ContextPath;
String contextPath=request.getContextPath();
// 返回结果: /mid0201
- 截取RequestURI;
String servletPath=requestUri.subString(contextPath.length());
//返回结果是: /download/photo/xxx.jpg
如果是网站框架,像SpringMVC,第一层拦截,其匹配路径为/*,那么使用getServletPath()是获取不到真正的请求路径的。