請求對象:
如前幾篇博客所述,請求綁定servlet並作出相應的響應。web容器在接收到瀏覽器請求後,會將相應的請求封裝成對象(HttpServletRequest)傳遞給相應的servlet做進一步處理。
對象分析:
HeepServletRequest類提供了大量對請求信息進行操作的方法,具體內容可參考Java API。這裏僅淺析幾個方法,從而進一步理解servlet處理流程。
請求參數:
先看下幾個HttpServletRequest提供的幾個方法
名稱 | 解釋 | 返回參數 |
---|---|---|
getParameter(“name”) | 返回指定name的對應值 | String |
getParameterValues(“name”) | name存在多個對應值,返回多個值 | String[] |
getParameterNames() | 獲取全部請求參數 | Enumration |
getParameterMap() | 鍵值對方式獲取參數 | Map< String, String[]> |
name=指定參數名稱
實踐一下:
嘗試HttpServletRequest提供的不同方法,響應輸出相應的參數。以下按上述表格順序依次實踐!
5.
代碼示例:
@WebServlet("/change")
public class Demo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
PrintWriter p = response.getWriter();
//獲取指定屬性的請求參數值
//String t = request.getParameter("submit");
// String t = request.getParameter("input");//多個值只輸出第一個
// p.println(t);
//獲取相同請求屬性下的所有參數值
// String[] values = request.getParameterValues("input");
// for(String x: values)
// p.println(x + " ");
//獲取所有請求參數
// Enumeration<String> e = request.getParameterNames();
// int count = 0;
// while(e.hasMoreElements()) {
// String te = e.nextElement();
// p.println(te);
// count++;
// }
// System.out.println(count);
//鍵值對方式獲取
Map<String, String[]> m = request.getParameterMap();
String[] valueM = m.get("input");
for(String x: valueM)
p.println(x + " ");
}
}
前端代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="random" method="post">
<input type="submit" name="submit" value="submit">
<input name="output">
<input name="input">
<input name="input">
</form>
</body>
</html>
以下代碼設置請求方式,項目默認設置GET。
<form action="random" method="post">
若項目未顯示設置post請求方式,或者後端代碼無doGet()方法,則會出現以下錯誤。
標頭請求參數:
HttpServletRequest類提供了類似獲取請求參數的方式獲取標頭參數,具體可參考API文獻。
@WebServlet("/Demo")
public class Demo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter p = response.getWriter();
Collections.list(request.getHeaderNames()).forEach(name -> {
p.printf("%s: %s<br>", name, request.getHeader(name));
});
}
}
結果打印: