Servlet入門(五)request和response物件
前言
本章學習servlet中的request、response物件
方法
1.概念
相信大家在之前的章節已經看到了,我用到了request物件獲取前臺傳遞過來的資料:
String username = request.getParameter("username");
String password = request.getParameter("password");
伺服器在收到瀏覽器發出的請求後,會自動建立一個request物件用來儲存本次請求的所有相關資訊~
2.常用方法
在說這個之前,還是和Java剛開始講String類的時候一樣,需要大家在網上下載相關的API,也就是JavaEE的API文件!
網址:https://www.oracle.com/technetwork/java/javaee/downloads/java-ee-sdk-downloads-3908423.html
大家把下面的這個包下載好之後,解壓縮,找到.\java_ee_sdk-8\glassfish5\docs\api\javaee-full檔案路徑,點選index.html即可。
下面我們來看一下常用的request物件的方法吧!
- String getParameter(String name) : 該方法用來獲取前臺頁面name屬性傳遞的表單值,只能獲取單個值(text、password)
- String[] getParameterValues(String name):該方法用來獲取前臺頁面name屬性傳遞的表單值,可獲取多個值(checkbox)
- void setCharacterEncoding(String env) throws UnsupportedEncodingException 設定請求編碼
- void setAttribute(String name,Object o):設定名字為name的request的引數值
- Object getAttribute(String name):返回由name指定的屬性值
--關於request物件的其他方法,我們今後用到的時候在進行總結。
接下來我們來看一下response物件的方法吧!
因為response物件的方法不是那麼常用,所以我就舉個例子
- void sendError(int sc,String msg) throws IOException:該方法用來向客戶端傳送錯誤資訊
Servlet程式碼中加入該方法後的效果是什麼呢?請看:
response.sendError(404,"This Page is Not Found");
那麼你的頁面傳送請求後會出現如下錯誤提示:
是不是感覺很熟悉啊!
其他
1.設定請求轉發
* 作用:實現多個servlet聯動操作處理請求,這樣避免程式碼冗餘,讓servlet的職責更加明確。
* 使用:
* req.getRequestDispatcher("要轉發的地址").forward(req, resp);
* 地址:相對路徑,直接書寫servlet的別名即可。
* 特點:
* 一次請求,瀏覽器位址列資訊不改變。
相信大家發現了之前寫的程式碼中出現瞭如下程式碼:
request.getRequestDispatcher("/success.jsp").forward(request, response);
這句程式碼是一個固定的格式,用來設定請求轉發。作用是servlet處理完請求之後,將跳轉到其他頁面或者servlet
2.設定重定向
Servlet處理完後跳轉頁面或者Servlet還有另外一種方法,那就是重定向
* 解決了表單重複提交的問題,以及當前servlet無法處理的請求的問題。
* 使用:
* resp.sendRedirect(String uri);
* 示例:
* resp.sendRedirect("/login.jsp");
* 特點:
* 兩次請求,兩個request物件。
* 瀏覽器位址列資訊改變
response.sendRedirect("/login.jsp");
其作用效果和請求轉發一樣!
3.請求轉發和重定向的區別
我在其他博主那裡找到了有價值的資訊,傳送門:https://blog.csdn.net/liubin5620/article/details/79922692
總結:
- 如果請求中有表單資料,而資料又比較重要,不能重複提交,建議使用重定向。
- 如果請求被Servlet接收後,無法進行處理,建議使用重定向定位到可以處理的資源。
- 其他情況建議使用請求轉發。
4.request物件作用域
request物件用於解決一次請求內的資料共享,也就是說在一次請求內只有一個request物件並且這次請求內的所有操作共享同一個request