博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于request.getServletPath(),request.getContextPath()的总结
阅读量:4184 次
发布时间:2019-05-26

本文共 3289 字,大约阅读时间需要 10 分钟。

最近对于request中的几种“路径”有点混淆,查找网上资源都没有很好的总结,希望此文章能够帮助我理解一下这几种“路径”。 

+++++++++++++++++++++++++++++++++++++++++++++++++ 
本文章主要讨论以下几种request获取路径的方法:

  1. request.getServletPath()
  2. request.getPathInfo()
  3. request.getContextPath()
  4. request.getRequestURI()
  5. request.getRequestURL()
  6. request.getServletContext().getRealPath()

以一个简单的例子说明: 
web.xml配置(注意此处的url-pattern项)

 

aab
a.jsp
test
com.java.test.TestServlet
test
/*

TestServlet.java文件:

package com.java.test;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet{    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        this.doPost(req, resp);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        System.out.println("servletPath:"+req.getServletPath());        System.out.println("contextPath:"+req.getContextPath());        System.out.println("contextPath2:"+req.getServletContext().getContextPath());        System.out.println("pageInfo:"+req.getPathInfo());        System.out.println("uri:"+req.getRequestURI());        System.out.println("url:"+req.getRequestURL());        System.out.println("realPath:"+req.getServletContext().getRealPath("/"));    }}

此时请求http://localhost:8080/testweb (url-pattern=/*) 
打印出来的值为:

servletPath:contextPath:/testwebcontextPath2:/testwebpageInfo:nulluri:/testweburl:http://localhost:8080/testwebrealPath:G:\java\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\testweb\

请求http://localhost:8080/testweb/abc 打印的值为:

servletPath:contextPath:/testwebcontextPath2:/testwebpageInfo:/abcuri:/testweb/abcurl:http://localhost:8080/testweb/abcrealPath:G:\java\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\testweb\

当我们修改web.xml为如下时(注意url-pattern的改变):

 
aab
 
   
a.jsp
 
   
       
test
       
com.java.test.TestServlet
   
   
       
test
       
/abc/def/*
   

请求http://localhost:8080/testweb/abc/def/ghi/test.html (url-pattern=/abc/def/*) 
打印的值为:

servletPath:/abc/defcontextPath:/testwebcontextPath2:/testwebpageInfo:/ghi/test.htmluri:/testweb/abc/def/ghi/test.htmlurl:http://localhost:8080/testweb/abc/def/ghi/test.htmlrealPath:G:\java\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\testweb\

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

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 
 

你可能感兴趣的文章
laravel 课程学习系列二----------------第二章.PHP框架安装之Laravel
查看>>
laravel 课程学习系列三----------------第三章.Artisan控制台
查看>>
git版本控制管理系列-----第四章 GIT基本概念
查看>>
mysql 库级权限、表级权限授权
查看>>
TensorFlow中的单层神经网络
查看>>
在TensorFlow中编程
查看>>
用c实现一个压力测试工具
查看>>
圆周率计算公式
查看>>
排序算法之-选择排序
查看>>
排序算法之-基数排序
查看>>
scikit-learn
查看>>
原生java方法操作SQLite数据库
查看>>
sqlite 数据库驱动框架
查看>>
B树、B+树、B*树 总结
查看>>
kafka常用命令
查看>>
kafka顺序消息
查看>>
kafka 消息服务
查看>>
从零开始玩转JMX(一)——简介和Standard MBean
查看>>
究竟啥才是互联网架构中的高并发!
查看>>
数据库水平扩展与垂直扩展
查看>>