(13)javaWeb中HttpServletRequest详解

关于HTTP请求和响应,可以参考 HTTP协议 系列文章

导学,请求概述:

a,GET和POST请求报文格式:

b,常见的请求头

 

 

 

在servlet中,相应的doGet方法和doSet方法中的request对象是域对象。后面会详细解释域对象。这里先看看request的常用方法。

1,设置字符编码格式

request.setCharacterEncoding("UTF-8");

2,获取请求方式

request.getMethod()

3,获取请求行中 ,Http协议版本

request.getProtocol()

4,获取请求的URL和URI

request.getRequestURL()

request.getRequestURI()

5,获取请求头字段名列表

request.getHeaderNames() 这里返回的是枚举对象

6,获取请求头字段值

request.getHeader(headerName)

7,获取请求参数名列表

request.getParameterNames() 这里返回的也是枚举对象

8,获取请求参数值

request.getParameter(parameterName)),这里只能获取一个值,假如请求中有多个请求参数名相同,那么这里只获取其中一个。

9,获取某个请求参数的多个值

request.getParameterValues("userName") 这里返回一个数组String[] 假如有三个参数名都是userName,那么这里可以获取有三个元素的数组。

10,获取实体内容,这个适用于POST方法的请求

request.getInputStream()

 

详细的使用参考代码如下:

        public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");
		//获取请求方法
		System.out.println("Method:"+request.getMethod());
		//请求的URL/URI
		System.out.println("URL:"+request.getRequestURL() + " URI:"+ request.getRequestURI());
		//请求的协议版本比如http1.1
		System.out.println("httpProtocolVersion:" + request.getProtocol());
		//请求头字段名称
		@SuppressWarnings("unchecked")
		Enumeration<String> enumeration = (Enumeration<String>)request.getHeaderNames();
		while (enumeration.hasMoreElements()) {
			String headerName = enumeration.nextElement();
			System.out.println("(Header) " + headerName + " : " + request.getHeader(headerName));
		}
		//获取实体内容
		System.out.println("实体内容"+request.getInputStream());
		//请求参数
		@SuppressWarnings("unchecked")
		Enumeration<String> parameterEnumeration = request.getParameterNames();
		while (parameterEnumeration.hasMoreElements()) {
			String parameterName = parameterEnumeration.nextElement();
			System.out.println("(parameter) "+parameterName + " : " + request.getParameter(parameterName));
		}
		//获取参数名相同的多个值。
		String[] userNameStrings = request.getParameterValues("userName");
		for (int i = 0; i < userNameStrings.length; i++) {
			System.out.println("(parameter) 多个值userName : " + userNameStrings[i]);
		}
		
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("it is OK");
		out.flush();
		out.close();
	}    

访问的URL:

http://localhost:8080/Project/register?userName=zhangsan&password=123456&userName=yangzi

 console打印如下:

Method:GET
URL:http://localhost:8080/Project/register URI:/Project/register
httpProtocolVersion:HTTP/1.1
(Header) host : localhost:8080
(Header) accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
(Header) upgrade-insecure-requests : 1
(Header) cookie : JSESSIONID=43E9798D7D35D49D6DA29F1B3954A243
(Header) user-agent : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7
(Header) accept-language : zh-cn
(Header) accept-encoding : gzip, deflate
(Header) connection : keep-alive
实体内容org.apache.catalina.connector.CoyoteInputStream@6eac65f3
(parameter) userName : zhangsan
(parameter) password : 123456
(parameter) 多个值userName : zhangsan
(parameter) 多个值userName : yangzi

 

posted on 2017-12-24 21:06  洋子哥哥  阅读(4013)  评论(1编辑  收藏  举报