HttpServletRequest 的几种获取路径的方法如下:
request.getServletPath()
request.getPathInfo()
request.getContextPath()
request.getRequestURI()
request.getRequestURL()
request.getServletContext().getRealPath()
- getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括。
- getPageInfo():与getServletPath()获取的路径互补,能够得到的是“url-pattern”中 模糊匹配(不确定) 的路径部分
- getContextPath():获取项目的根路径
- getRequestURI():获取根路径到地址结尾
- getRequestURL():获取请求的地址链接(浏览器中输入的地址)
- getServletContext().getRealPath(“/”):获取“/”在机器中的实际地址
- getScheme():获取的是使用的协议(http 或https)
- getProtocol():获取的是协议的名称(HTTP/1.11)
- getServerName():获取的是域名(xxx.com)
- getLocalName():获取到的是IP
这两种方法的效果是一样的都是用于得到项目的绝对路径,只是前面那种方法不推荐使用了,替代方法就是后面这个方法。
request.getRealPath("/")- request.getServletContext().getRealPath("/")
web.xml 配置一个Servlet 处理所有的请求
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.bug.test.TestServletPath</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<!-- 注意此处 路径的写法-->
<url-pattern>/*</url-pattern>
</servlet-mapping>
com.bug.test.TestServletPath 处理类
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) {
System.out.println("servletPath:\t\t\t" + request.getServletPath());
System.out.println("contextPath:\t\t\t" + request.getContextPath());
System.out.println("contextPath2:\t\t\t" + request.getServletContext().getContextPath());
System.out.println("pageInfo:\t\t\t" + request.getPathInfo());
System.out.println("uri:\t\t\t" + request.getRequestURI());
System.out.println("url:\t\t\t" + request.getRequestURL());
System.out.println("realPath:\t\t\t" + request.getServletContext().getRealPath("/"));
}
注:PathDemo 是我的项目名
当我的请求路径是 http://localhost:8080/PathDemo/
servletPath:
contextPath: /PathDemo
contextPath2: /PathDemo
pageInfo: /
uri: /PathDemo/
url: http://localhost:8080/PathDemo/
realPath: F:\Procedure\JAVA\Frame\SpringMVC\otherDemo\PathDemo\target\PathDemo-1.0-SNAPSHOT\
当我的请求路径是 http://localhost:8080/PathDemo/aaa/bbb
servletPath:
contextPath: /PathDemo
contextPath2: /PathDemo
pageInfo: /aaa/bbb
uri: /PathDemo/aaa/bbb
url: http://localhost:8080/PathDemo/aaa/bbb
realPath: F:\Procedure\JAVA\Frame\SpringMVC\otherDemo\PathDemo\target\PathDemo-1.0-SNAPSHOT\
当我们修改web.xml为如下时(注意url-pattern的改变):
web.xml
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.bug.test.TestServletPath</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<!-- 注意此处 路径的写法-->
<url-pattern>/abc/def/*</url-pattern>
</servlet-mapping>
当我的请求路径是 http://localhost:8080/PathDemo/abc/def/ghi/test.html (url-pattern=/abc/def/*)
servletPath: /abc/def
contextPath: /PathDemo
contextPath2: /PathDemo
pageInfo: /ghi/test.html
uri: /PathDemo/abc/def/ghi/test.html
url: http://localhost:8080/PathDemo/abc/def/ghi/test.html
realPath: F:\Procedure\JAVA\Frame\SpringMVC\otherDemo\PathDemo\target\PathDemo-1.0-SNAPSHOT\
总结:
通过观察打印结果,我们可以总结:
- getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括。
- getPageInfo():与getServletPath()获取的路径互补,能够得到的是“url-pattern”中*d的路径部分
- getContextPath():获取项目的根路径
- getRequestURI:获取根路径到地址结尾
- getRequestURL:获取请求的地址链接(浏览器中输入的地址)
- getServletContext().getRealPath(“/”):获取“/”在机器中的实际地址
- getScheme():获取的是使用的协议(http 或https)
- getProtocol():获取的是协议的名称(HTTP/1.11)
- getServerName():获取的是域名(xxx.com)
- getLocalName:获取到的是IP