HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
request常用方法:
一获取客户机环境信息常见方法:
1.getRequestURL方法返回客户端发出请求时的完整URL。
2.getRequestURI方法返回请求行中的资源名部分。
3.getQueryString方法返回请求行的参数部分。
4.getRemoteAddr方法返回发出请求的客户机的IP地址。
5.getRemoteHost方法返回发出请求的客户机的完整主机名。
6.getRemotePort方法返回客户机所使用的网络端口号。
7.getLocalAddr方法返回WEB服务器的IP地址。
8.getLocalName方法返回WEB服务器的主机名。
9.getMethod得到客户机请求方式。
1 package com.yyz.request; 2 3 import java.io.IOException; 4 import java.io.OutputStream; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 public class RequestDemo extends HttpServlet { 12 13 public void doGet(HttpServletRequest request, HttpServletResponse response) 14 throws ServletException, IOException { 15 /** 16 * URL是URI的子集。 17 * URI用来标识一个资源。 18 * URL用来标识互联网上的一个资源。 19 */ 20 System.out.println(request.getRequestURL());//得到请求URL地址 21 System.out.println(request.getRequestURI());//得到请求的资源 22 System.out.println(request.getQueryString()); 23 System.out.println(request.getRemoteAddr());//得到来访者IP 24 System.out.println(request.getRemoteHost()); 25 //由于没有在dns上注册所以打印结果还是127.0.0.1,如果是百度访问这个程序,则打印www.baidu.com 26 System.out.println(request.getRemotePort());//得到请求的资源 27 System.out.println(request.getMethod());//得到请求的资源 28 } 29 30 public void doPost(HttpServletRequest request, HttpServletResponse response) 31 throws ServletException, IOException { 32 doGet(request,response); 33 } 34 35 }
在浏览器地址栏输入:http://localhost:8080/test/servlet/RequestDemo后后台输出入下图:
二获得客户机请求头:
1.getHeader(String name)方法
2.getHeaders(String name)方法
3.getHeaderNames()方法
1 package com.yyz.request; 2 3 import java.io.IOException; 4 import java.util.Enumeration; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 //获取请求头 11 public class RequestDemo extends HttpServlet { 12 13 public void doGet(HttpServletRequest request, HttpServletResponse response) 14 throws ServletException, IOException { 15 String head = request.getHeader("Accept-Encoding"); 16 //有些浏览器不支持压缩数据 17 if(head.contains("gzip")){ 18 //输出压缩数据 19 }else{ 20 //输出不压缩数据 21 } 22 //获取指定名称的头的所有值 23 Enumeration e = request.getHeaders("Accept-Encoding"); 24 while(e.hasMoreElements()){ 25 String value = (String ) e.nextElement(); 26 System.out.println(value); 27 } 28 System.out.println("------------------------"); 29 //获取所有的头和值 30 e = request.getHeaderNames(); 31 while(e.hasMoreElements()){ 32 String name = (String)e.nextElement(); 33 String value = request.getHeader(name); 34 System.out.println(name+"="+value); 35 } 36 } 37 38 public void doPost(HttpServletRequest request, HttpServletResponse response) 39 throws ServletException, IOException { 40 doGet(request,response); 41 } 42 43 }
在浏览器访问该程序,后台输出如下:
三获得客户机请求参数(客户端提交的数据):
1.getParameter(name)方法
2.getParameterValues(String name)方法
3.getParameterNames方法
4.getParameterMap方法,做框架时大量使用
1 package com.yyz.request; 2 3 import java.io.IOException; 4 import java.util.Enumeration; 5 import java.util.Map; 6 import java.util.Map.Entry; 7 8 import javax.servlet.ServletException; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 //获取请求数据 13 public class RequestDemo extends HttpServlet { 14 15 public void doGet(HttpServletRequest request, HttpServletResponse response) 16 throws ServletException, IOException { 17 //http://localhost:8080/test/servlet/RequestDemo?name=yyz 18 String value = request.getParameter("name"); 19 System.out .println(value); 20 //http://localhost:8080/test/servlet/RequestDemo?like=sing&like=dance 21 String likes[] = request.getParameterValues("like"); 22 if(likes!=null){ 23 for(String like : likes){ 24 System.out.println(like); 25 } 26 } 27 //下面是这种遍历的专业写法,获取数组数据的方式(可避免空指针异常) 28 for(int i=0;likes!=null&&i<likes.length;i++){ 29 System.out.println(likes[i]); 30 } 31 //获取所有名称,并根据名称获取值 32 Enumeration e = request.getParameterNames(); 33 while(e.hasMoreElements()){ 34 String name = (String) e.nextElement(); 35 value = request.getParameter(name); 36 System.out.println(name+"="+value); 37 } 38 System.out.println("----------------------"); 39 //得到request对象中用来封装数据的Map集合 40 Map<String,String[]> map = request.getParameterMap(); 41 for(Entry<String, String[]> me : map.entrySet()){ 42 String name = me.getKey(); 43 String [] v = me.getValue(); 44 System.out.println(name+"="+v[0]); 45 } 46 47 } 48 49 public void doPost(HttpServletRequest request, HttpServletResponse response) 50 throws ServletException, IOException { 51 doGet(request,response); 52 } 53 54 }