在 Web 中,我们通常需要获取 URL 相对于 Webapp 的路径,主要是下面的几个方法:

request.getServletPath()

request.getPathInfo()

request.getContextPath()

request.getRequestURI()

其中 request.getRequestURI() 的返回值包含了 request.getContextPath(),所以是相对于网站的根目录的。

下面我们分析 request.getServletPath() 和 request.getPathInfo()

1. 如果我们的 servlet-mapping 如下配置:

jetbrick-template

*.jetx

那么访问: /context/templates/index.jetx

request.getServletPath() == "/templates/index.jetx"

request.getPathInfo() ==

2. 如果我们的 servlet-mapping 如下配置:

jetbrick-template

/*

那么访问: /context/templates/index.jetx

request.getServletPath() == ""

request.getPathInfo() == "/templates/index.jetx"

3. 如果我们的 servlet-mapping 如下配置:

jetbrick-template

/template/*

那么访问: /context/templates/index.jetx

request.getServletPath() == "/templates"

request.getPathInfo() == "/index.jetx"

总结 :

所以,我们要获取相对于 request.getContextPath() 的路径,我们可以使用如下的代码:

String uri = request.getServletPath();

String pathInfo = request.getPathInfo();

if (pathInfo != null && pathInfo.length() > 0) {

uri = uri + pathInfo;

}

或者:

String uri = request.getRequestURI();

String contextPath = request.getContextPath();

if (contextPath != null && contextPath.length() > 0) {

uri = uri.substring(contextPath.length());

}

===============================

2013-02-08 补上一个 Tomcat 自身的实现:

catalina.jar,  DefaultServlet.java

protected String getRelativePath(HttpServletRequest request)

{

if (request.getAttribute("javax.servlet.include.request_uri") != null)

{

String result = (String)request.getAttribute("javax.servlet.include.path_info");

if (result == null) {

result = (String)request.getAttribute("javax.servlet.include.servlet_path");

} else {

result = (String)request.getAttribute("javax.servlet.include.servlet_path") + result;

}

if ((result == null) || (result.equals(""))) {

result = "/";

}

return result;

}

String result = request.getPathInfo();

if (result == null) {

result = request.getServletPath();

} else {

result = request.getServletPath() + result;

}

if ((result == null) || (result.equals(""))) {

result = "/";

}

return result;

}

java getpathinfo_request.getServletPath()和request.getPathInfo()用法相关推荐

  1. request.getServletPath()和request.getPathInfo()用法

    为什么80%的码农都做不了架构师?>>>    在 Web 中,我们通常需要获取 URL 相对于 Webapp 的路径,主要是下面的几个方法: request.getServletP ...

  2. 关于request.getServletPath(),request.getContextPath()的总结

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

  3. Java的几种常见接口用法

    2019独角兽企业重金招聘Python工程师标准>>> Java的几种常见接口用法 今天在看阎宏的< Java与模式>,里面对 java的 几种 接口的常用方法的总结: ...

  4. java实现stack search_Java Stack search()用法及代码示例

    Java中的java.util.Stack.search(Object element)方法用于搜索堆栈中的元素并获取其与顶部的距离.此方法从1开始而不是从0开始计数位置.位于堆栈顶部的元素被视为在位 ...

  5. Java正则表达式--Matcher.group函数的用法

    https://www.cnblogs.com/jiafuwei/p/6080984.html Java正则表达式--Matcher.group函数的用法 原来,group是针对()来说的,group ...

  6. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  7. java和python可以在一个项目中同时使用么-java调用python的几种用法(看这篇就够了)...

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  8. Java中PreparedStatement和Statement的用法区别

    Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈   1. PreparedStatement接口继承Sta ...

  9. java dictionary 实例化_Java Dictionary put()用法及代码示例

    字典的put()方法用于在字典中插入映射.这意味着可以将特定键及其值映射到特定字典中. 用法: DICTIONARY.put(key, value) 参数:该方法有两个参数,都属于Dictionary ...

最新文章

  1. golang实现给图片加水印
  2. Amazon AWS云计算服务平台概述
  3. LNMP架构之PHP——MemCache对PHP页面的缓存加速优化
  4. python系统-基于Python搭建Django后台管理系统
  5. Python调用PyAutoGUI模块
  6. 2017年度最值得读的AI论文 | NLP篇 · 评选结果公布
  7. Redis系列五、redis的五种数据结构和相关指令之Set
  8. java中算两个时间内的秒数_java – Joda Time – 计算两个日期之间的秒数会引发异常....
  9. python issuperset_Superset的各种疑难解答
  10. Delphi 3D Glscene安装
  11. arm汇编—str,mov等指令
  12. 什么软件可以压缩图片大小?这几个软件值得收藏
  13. 百度、阿里、美团、头条…论剑AI,这里有开发者想知道的未来
  14. 三维旋转矩阵_三维重建中的旋转(Rotation)
  15. 计算机组成部件及其作用,计算机硬件组成成分各自的功能 计算机硬件有哪几部分组成?请分别说明各部分的作用?...
  16. Filed II 自定义二维曲面超声换能器阵列
  17. PRBS码是什么?PRBS生成原理介绍(转)
  18. win10下注册MSCOMM32控件
  19. 第三方、第四方扫二维码的支付平台有哪些?
  20. 红米note4android,红米Note4处理器是什么型号?红米Note4处理器的具体参数和性能

热门文章

  1. java5分钟项目讲解_5分钟快速创建spring boot项目的完整步骤
  2. flutter 刷脸_支付宝刷脸认证 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. dubbo内置哪几种服务容器_Dubbo服务提供者几种启动方式
  4. python 发送邮件不显示附件_求助:写python脚本发 带有附件的邮件, 收到邮件后,发现附件直接显示在屏幕上了,而不是以附件形式...
  5. java对象克隆的例子_Java对象克隆
  6. 学习JDK源码(一):String
  7. Spring 7大功能模块的作用[转]
  8. Initializing Java Tooling 30% 停住不动了
  9. 通讯簿电话号码同步相关问题
  10. java 蓝桥杯算法训练 纪念品分组(题解)