Servlet的Request中和用户请求路径相关的操作有多个(网络整理)

转载声明:http://mlaaalm.iteye.com/blog/671915

Servlet的Request中和用户请求路径相关的操作有多个,下面一一列举:
1.getQueryString(),&之后GET方法的参数部分。
2.getServletPath(),web.xml中定义的Servlet访问路径。
3.getPathInfo(),Servlet访问路径之后,QueryString之前的中间部分。
4.getContextPath(),Context路径前缀(这个应该是最熟悉的啦)。
5.getRequestURI(),等于getContextPath() + getServletPath() + getPathInfo()。
6.getRequestURL(),等于getScheme() + "://" + getServerName() + ":" + getServerPort() + getRequestURI()。
7.getPathTranslated(),等于getServletContext().getRealPath("/") + getPathInfo()。

注意:
1.getServletContext().getRealPath("/") 后包含当前系统的文件夹分隔符(windows系统是"\",linux系统是"/"),而getPathInfo()以"/"开头。

Java代码  收藏代码
  1. windows 下面  
  2. E:\apache-tomcat-6.0.20\webapps\standardweb\  

 


2.getPathInfo()与getPathTranslated()在servlet的url-pattern被设置为/*或/aa/*之类的pattern时才有值,其他时候都返回null。
3.在servlet的url-pattern被设置为*.xx之类的pattern时,getServletPath()返回的是getRequestURI()去掉前面ContextPath的剩余部分。 
本篇文章来源于 Goldtimes.net 原文链接:http://www.goldtimes.net/teach/view/1124.htm


 

Java代码  收藏代码
  1.  request对象中的方法是比较实用的,大家应该对它们都有所了解。下面我们通过一个TestServlet来讲解一下常用的方法。TestServlet源代码如下:   
  2. package coresun;  
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9. public class TestServlet extends HttpServlet {  
  10.   public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {  
  11.    response.setContentType("text/html;charset=gb2312");  
  12.    PrintWriter out = response.getWriter();  
  13.    out.println("<html><head><title>使用request中的方法</title></head><body><h2>");  
  14.      
  15.    out.println("request.getRequestURL()= "+request.getRequestURL()+"<br>");  
  16.    out.println("request.getRequestURI()= "+request.getRequestURI()+"<br>");  
  17.    out.println("request.getContextPath()= "+request.getContextPath()+"<br>");  
  18.    out.println("request.getServletPath()= "+request.getServletPath()+"<br>");  
  19.    out.println("request.getQueryString()= "+request.getQueryString()+"<br>");  
  20.    out.println("request.getPathInfo()= "+request.getPathInfo()+"<br>");  
  21.    out.println("request.getPathTranslated()= "+request.getPathTranslated());  
  22.    out.println("<br>");  
  23.    out.println("request.getProtocol()= "+request.getProtocol()+"<br>");  
  24.    out.println("request.getMethod()= "+request.getMethod()+"<br>");  
  25.    out.println("request.getScheme()= "+request.getScheme()+"<br>");  
  26.    out.println("request.getRequestedSessionId()= "+request.getRequestedSessionId()+"<br>");  
  27.    out.println("request.isRequestedSessionIdFromCookie()= "+request.isRequestedSessionIdFromCookie()+"<br>");  
  28.    out.println("request.isRequestedSessionIdFromURL()= "+request.isRequestedSessionIdFromURL()+"<br>");  
  29.    out.println("request.isRequestedSessionIdValid()= "+request.isRequestedSessionIdValid()+"<br>");  
  30.      
  31.    out.println("</h2></body></html>");  
  32.  }   
  33. }  
  34.   
  35. 此Servlet在web.xml文件中的部署如下:(只有关键代码)  
  36. <servlet>  
  37.   <servlet-name>test</servlet-name>  
  38.   <servlet-class>coresun.TestServlet</servlet-class>  
  39. </servlet>  
  40. <servlet-mapping>  
  41.   <servlet-name>test</servlet-name>  
  42.   <url-pattern>*.do</url-pattern>  
  43. </servlet-mapping>  
  44. *.do表示只要是以.do结尾的地址,都可以访问此Servlet。然后在地址栏中输入如下网址:(假设服务器为本地,端口8080,Web根目录为FilterWeb)  
  45. http://localhost:8080/FilterWeb/update.do?userName=zhangsan&age=20  
  46. 页面返回的结果如下:  
  47. request.getRequestURL() = http://localhost:8080/FilterWeb/update.do  
  48. request.getRequestURI() = /FilterWeb/update.do  
  49. request.getContextPath() = /FilterWeb  
  50. request.getServletPath() = /update.do  
  51. request.getQueryString() = userName=zhangsan&age=20  
  52. request.getPathInfo() = null  
  53. request.getPathTranslated() = null  
  54. request.getProtocol() = HTTP/1.1  
  55. request.getMethod() = GET  
  56. request.getScheme() = http  
  57. request.getRequestedSessionId() = 0D5219B7FF11D47EBE95B2E6A31076B5  
  58. request.isRequestedSessionIdFromCookie() = true  
  59. request.isRequestedSessionIdFromURL() = false  
  60. request.isRequestedSessionIdValid() = true  
  61. request.getAuthType() = null  
  62. 这些方法的含义大家通过它的名字应该能够揣摩出来的。  
  63.   
  64. 下面更改servlet的url-pattern地址,如下:  
  65. <servlet>  
  66.   <servlet-name>test</servlet-name>  
  67.   <servlet-class>coresun.TestServlet</servlet-class>  
  68. </servlet>  
  69. <servlet-mapping>  
  70.   <servlet-name>test</servlet-name>  
  71.   <url-pattern>/faces/*</url-pattern>  
  72. </servlet-mapping>  
  73. 以上表示只要是以/faces/开头的地址,此Servlet都可以访问  
  74. 浏览器的地址栏中填入如下地址:  
  75. http://localhost:8080/FilterWeb/faces/update?userName=zhangsan&age=20  
  76. 页面返回的结果如下:  
  77. request.getRequestURL() = http://localhost:8080/FilterWeb/faces/update  
  78. request.getRequestURI() = /FilterWeb/faces/update  
  79. request.getContextPath() = /FilterWeb  
  80. request.getServletPath() = /faces  
  81. request.getQueryString() = userName=zhangsan&age=20  
  82. request.getPathInfo() = /update  
  83. request.getPathTranslated() = D:\FilterProject\FilterWeb\update  
  84. request.getProtocol() = HTTP/1.1  
  85. request.getMethod() = GET  
  86. request.getScheme() = http  
  87. request.getRequestedSessionId() = 0D5219B7FF11D47EBE95B2E6A31076B5  
  88. request.isRequestedSessionIdFromCookie() = true  
  89. request.isRequestedSessionIdFromURL() = false  
  90. request.isRequestedSessionIdValid() = true  
  91. request.getAuthType() = null  

 

posted @ 2014-03-26 20:20  leno.lix  阅读(793)  评论(0编辑  收藏  举报