5.2.1 获得HTTP请求行信息
HTTP请求消息的请求行分为三部分:请求方法(GET、POST、HEAD等)、资源路径和HTTP协议版本,如下所示:
GET /demo/servlet/TestServlet?name=mike&salary=3021 HTTP/1.1
通过下面的URL可以产生如上所示的请求行消息:
http://localhost:8080/demo/servlet/TestServlet?name=mike&salary=3021
HttpServletRequest接口中定义了若干的方法来获取请求行中的各个部分的信息,如下所示:
1. getMethod方法
该方法返回HTTP请求消息的请求方法(如GET、POST、HEAD等),也是请求行的第一部分。
2. getRequestURI方法
该方法返回请求行中的资源名部分,也就是位于URL的端口号和请求参数之间的部分,例如,对于如下的URL:
http://localhost:8080/demo/servlet/TestServlet?name=mike&salary=3021
getRequestURI方法返回上面URL中的“/demo/servlet/TestServlet”部分。
3. getQueryString方法
该方法返回请求行中的参数部分,也就是资源路径中问号(?)后面的内容。而且返回的结果不会被解码,也就是说,将保持原样返回。例如:对于如下的URL:
http://localhost:8080/demo/servlet/TestServlet?name=mike&salary=3021
getQueryString方法返回上面URL中的“name=mike&salary=3021”。如果在资源路径没有请求参数部分,getQueryString方法返回null。
4. getProtocol方法
该方法返回请求行中的协议名和HTTP版本,即请求行的第三部分,一般是HTTP/1.0或HTTP/1.1。如果在Web应用程序中需要单独对不同的HTTP版本进行处理,可以使用该方法来判断当前请求的HTTP版本。
5. getContextPath方法
该方法返回请求URL中的Web应用程序的路径,也就是说,返回URL中端口号和Web资源路径之间的部分。这个路径以斜杠(/)开头,表示当前Web站点的根目录,路径的结尾不含斜杠(/)。如果请求URL属于Web站点的根目录,则该方法应返回空字符串("")。例如,对于如下的URL:
http://localhost:8080/demo/servlet/TestServlet?name=mike&salary=3021
对于上面的URL,“/servlet/TestServlet”是在web.xml中定义的Servlet映射URL(也可以称为Web资源路径),而getContextPath方法则返回端口号(8080)和Web资源路径(/servlet/TestServlet)之间的部分,也就是URL中的“/demo”。
6. getPathInfo方法
该方法返回额外的路径部分。额外路径位于Web资源路径和参数之间,以“/”开头。如TestServlet在web.xml中的映射URL是“/TestServlet/*”,那么就可以用“/TestServlet/a”、“/TestServlet/b”访问TestServlet,其中“/a”、“/b”就是getPathInfo方法返回的额外路径。如果URL中没有额外路径,getPathInfo方法返回null。
7. getPathTranslated方法
该方法返回URL中额外信息所对应的服务端的本地路径。如“/request/abc.jsp”中的“/abc.jsp”是额外路径信息,则getPathTranslated方法返回“/abc.jsp”所对应的服务端的本地路径。
8. getServletPath方法
该方法返回Servlet在web.xml中定义的<url-pattern>元素的值,也就是Servlet的访问路径。
9. getParameterNames方法
该方法返回一个Enumeration对象,在这个对象中封装了URL的所有的请求参数名。
10. getParameter方法
该方法返回某一个请求参数的值,如获得name请求参数值的代码如下:
String name = getParameter("name");