【转】request.getServletPath()和request.getPathInfo()用法

转自:https://my.oschina.net/sub/blog/182408

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

request.getServletPath()
request.getPathInfo()
request.getContextPath()
request.getRequestURI()

getContextPath获取的是项目的相对路径,例如项目名称为palace,则为/palace

getRequestURI获取的是调用接口的地址,例如/palace/root.getInfo.do

getServletPath为获取的配置到web.xml中的匹配的??

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

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

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

<servlet-mapping>
  <servlet-name>jetbrick-template</servlet-name>
  <url-pattern>*.jetx</url-pattern>
</servlet-mapping>

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

request.getServletPath() == "/templates/index.jetx"
request.getPathInfo() == <null>

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

<servlet-mapping>
  <servlet-name>jetbrick-template</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

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

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

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

<servlet-mapping>
  <servlet-name>jetbrick-template</servlet-name>
  <url-pattern>/template/*</url-pattern>
</servlet-mapping>

那么访问: /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());
}

 

待看:http://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern

时间: 2024-10-03 22:47:43

【转】request.getServletPath()和request.getPathInfo()用法的相关文章

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

最近对于request中的几种“路径”有点混淆,查找网上资源都没有很好的总结,希望此文章能够帮助我理解一下这几种“路径”. +++++++++++++++++++++++++++++++++++++++++++++++++ 本文章主要讨论以下几种request获取路径的方法: request.getServletPath() request.getPathInfo() request.getContextPath() request.getRequestURI() request.getRequ

request.getRequestURI() 、request.getRequestURL()

摘要 request.getRequestURI() .request.getRequestURL() .request.getContextPath().request.getServletPath()区别 request.getRequestURI() .request.getRequestURL() .request.getContextPath().request.getServletPath()区别 request.getRequestURI() /jqueryWeb/resource

request.getRequestURL()和request.getRequestURI()的区别

request.getRequestURL() 返回全路径 request.getRequestURI() 返回除去host(域名或者ip)部分的路径 request.getContextPath() 返回工程名部分,如果工程映射为/,此处返回则为空 request.getServletPath() 返回除去host和工程名部分的路径 例如: request.getRequestURL() http://localhost:8080/jqueryLearn/resources/request.j

Request、Request.Form、Request.QueryString 用法的区别

Request.Form:获取以POST方式提交的数据. Request.QueryString:获取地址栏参数(以GET方式提交的数据). Request:包含以上两种方式(优先获取GET方式提交的数据),它会在QueryString.Form.ServerVariable中都搜寻一遍. 有时候会得到不同的结果.如果仅仅需要Form中的数据,但是使用了Request而不是Request.Form,那么程序将在QueryString.ServerVariable中也搜寻一遍.如果其中有同名的项,

request.getAttribute()与request.setAttribute()

request.getAttribute("nameOfObj")可得到JSP页面一表单中控件的Value.其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value. 而不同页面间传值使用request.setAttribute(position, nameOfObj)时,只会从a.jsp到b.jsp一次传递,之后这个request就会失去它的作用范围,再传就要再设一个 request.setAt

ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath

1.Request.ApplicationPath->当前应用的目录 2.Request.FilePath->对应于iis的虚拟目录   如 URL http://mockte.com/1/index.html/pathinfo   FilePath = /1/index.html 3.Request.Path->当前请求的虚拟路径   Path 是 FilePath 和 PathInfo 尾部的串联.例如 URL http://mockte.com/1/index.html/pathi

asp.net中Request.QueryString与Request.Param的区别分析

看起来Request.Params更好一些,但是既然Param包括了所有,为什么还要有QueryString呢?? request.params其实是一个集合,它依次包括request.querystring.request.form.request.cookies和request.servervariables. 如果要在两个页面传递数据的话,只能用request.querystring.request.form.request.cookies Request.Params 是在 QueryS

Request.params,Request.form,Request.querystring区别(转)

自己总结:---大致意思是: 1.传参的方式分为:get方式传参,post方式传参,request.cookies和request.servervariables 2.这几种获取参数方式获取的都是一个集合 1)Request.QueryString[id] 只获取get方式传递的参数 2)Request.Form["id"] 只获取post方式传递的参数 3)Request.Params["id"] 获取以上四种传参方式的参数,依次在 QueryString.For

request.getParameterValues与request.getParameter的区别

一. 简单的对比 request.getParameter用的比较多,相对熟悉 request.getParameterValues(String   name)是获得如checkbox类(名字相同,但值有多个)的数据.   接收数组变量 ,如checkobx类型     request.getParameter(String   name)是获得相应名的数据,如果有重复的名,则返回第一个的值 . 接收一般变量 ,如text类型 例: 1. 三个名字相同的text标签 <input type=&qu