關於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
