HttpServletRequest 的几种获取路径的方法

 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\

总结:

通过观察打印结果,我们可以总结: 

  1. getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括。 
  2. getPageInfo():与getServletPath()获取的路径互补,能够得到的是“url-pattern”中*d的路径部分 
  3. getContextPath():获取项目的根路径 
  4. getRequestURI:获取根路径到地址结尾 
  5. getRequestURL:获取请求的地址链接(浏览器中输入的地址) 
  6. getServletContext().getRealPath(“/”):获取“/”在机器中的实际地址 
  7. getScheme():获取的是使用的协议(http 或https) 
  8. getProtocol():获取的是协议的名称(HTTP/1.11) 
  9. getServerName():获取的是域名(xxx.com) 
  10. getLocalName:获取到的是IP 

https://blog.csdn.net/qq_27770257/article/details/79438987

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值