3_ Http請求響應實戰
阿新 • • 發佈:2021-01-20
技術標籤:Javaweb
3 Http請求
3.1 HttpServletRequest請求物件
http://127.0.0.1:8080/request?userName=jack&age=11&sport=ball&sport=sleep //客戶端請求資訊 System.out.println("應用上下文路徑getContextPath="+request.getContextPath()) ; System.out.println("客戶端發出請求時的完整URL getRequestURL="+request.getRequestURL()) ; System.out.println("請求行中的資源名部分 getRequestURI="+request.getRequestURI()) ; System.out.println("請求行中的引數部分 getQueryString="+request.getQueryString()) ; System.out.println("發出請求的客戶機的IP地址 getRemoteAddr="+request.getRemoteAddr()) ; System.out.println("客戶機發請求使用的網路埠號 getRemotePort="+request.getRemotePort()) ; //獲取請求頭 System.out.println("獲取請求頭 getHeader(Accept)="+request.getHeader("Accept")) ; //獲取請求引數 System.out.println("客戶端請求引數 getParameter="+request.getParameter("userName")); String[] sport = request.getParameterValues("sport"); System.out.println("客戶端請求引數列表,多個值 getParameterValues="+sport.toString()); Map<String,String[]> map = request.getParameterMap(); System.out.println("客戶端請求引數封裝成的map型別 getParameterMap="+map.toString());
- 四大作用域物件:PageContext->【ServletRequest】->HttpSession->ServletContext;
//ServletRequest作用域:對像生命週期存在一次請求裡面
//儲存java物件到request作用域
request.setAttribute("name","jack");
3.2 HttpServletRequest和使用者登入表單提交
使用jsp編寫form表單提交
UserServlet, doPost裡面呼叫doGet
<form action="/user/loin" method="post"> <div>使用者名稱: <input type="text" name="userName" /> </div> <div>密碼: <input type="password" name="pwd"/> </div> <div> <input type="submit" value="登入"> </div> </form> @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); String userName = req.getParameter("userName"); String pwd = req.getParameter("pwd"); if(userName.equals("xdclass") && pwd.equals("123")){ resp.getWriter().write("登入成功"); }else { resp.getWriter().write("賬號密碼錯誤"); } }
關於亂碼問題
//POST方式遇到中文亂碼,如果客戶端是以UTF-8字元編碼,需要伺服器以UTF-8的編碼接收資料, req.setCharacterEncoding("UTF-8"); //對於以get方式傳輸的中文資料亂碼需要另外一種方式,預設的還是使用ISO8859-1這個字元編碼來接收資料 //辦法:對接收到的原始資料的位元組陣列,然後通過位元組陣列以指定的編碼構建字串,解決亂碼問題 String name = request.getParameter("name");//接收資料 name =new String(name.getBytes("ISO8859-1"), "UTF-8")
3.3 HttpServletResponse響應物件講解
HttpServletResponse物件
簡介:代表伺服器的響應,封裝了向客戶端傳送資料、傳送響應頭,傳送響應狀態碼的方法
常見API
//設定有多個值的http響應頭,引數name表示響應頭名稱,引數value表示響應頭的值,
//比如:response.addHeader("name", "java");response.addHeader("name", "spring");
addHeader(String name,String value)
//設定只有一個值的http響應頭,引數name表示響應頭名稱,引數value表示響應頭的值
setHeader(String name,String value)
//設定http狀態碼
response.setStatus(200);
getOutputStream():
建立的位元組輸出流物件,可以按位元組形式輸出響應正文,直接輸出位元組陣列中的二進位制資料,更多用於下載輸出檔案流
//設定編碼格式為UTF-8
response.setCharacterEncoding("UTF-8");
//通過設定響應頭控制瀏覽器以UTF-8的編碼顯示資料,如果不加這句話,那麼瀏覽器顯示的將是亂碼
response.setHeader("Content-Type","text/html;charset=utf-8");
String data = "小滴課堂java高階工程師成長系列";
//獲取OutputStream輸出流
OutputStream outputStream = response.getOutputStream();
//將字元轉換成位元組陣列,指定以UTF-8編碼進行轉換
byte[] dataByteArr = data.getBytes("UTF-8");
//使用OutputStream流向客戶端輸出位元組陣列
outputStream.write(dataByteArr);
getWriter():
建立的字元輸出流物件,可以按字元形式輸出響應正文,只能輸出輸出字元文字內容,和上面的互斥
//設定編碼格式為UTF-8
response.setCharacterEncoding("UTF-8");
//通過設定響應頭控制瀏覽器以UTF-8的編碼顯示資料,如果不加這句話,那麼瀏覽器顯示的將是亂碼
response.setHeader("content-type", "text/html;charset=UTF-8");
String data = "小滴課堂java高階工程師成長系列";
//獲取PrintWriter輸出流
PrintWriter out = response.getWriter();
//使用PrintWriter流向客戶端輸出字元
out.write(data);