(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