1. 程式人生 > >(5A)HttpServletResponse:getWriter和getOutputStream()、sendRedirect()、session(簡單理解)、檔案下載、頁面快取

(5A)HttpServletResponse:getWriter和getOutputStream()、sendRedirect()、session(簡單理解)、檔案下載、頁面快取

一、getWriter()、getOutputStream()向客戶端輸出資料
這裡寫圖片描述
getWriter:只能會送字元流
getOutputStream:可以會從字元流和位元組流(二進位制)

PrintWriter out = response.getWriter();
        out.println("hello world");

        //OutputStream也可以輸出字元流
        OutputStream os=response.getOutputStream();
        os.write("hello ".getBytes());

如何選擇:如果會送字元資料,則使用PrintWriter物件,效率高
如果需要回送的位元組資料,則只能選擇OutputStream
注意:PrintWriter和OutputStream不能在一個servlet中同時使用


否則報錯:java.lang.IllegalStateException: getWriter() has already been called for this response
解釋如下:
這裡寫圖片描述
從該圖可以看出:為什麼有時流不關閉,程式也沒有問題(伺服器給關了)

二、sendRedirect()方法:將資訊傳遞給下一個頁面
①語法:sendRedirect(“welcome?uname=xiaoming”);
welcome代表你要跳轉的那個servlet的URL
servlet URL名與變數之間要有?
如果要傳遞引數兩個以上,他們之間要用&分開
response.sendRedirect(“welcome?uname=xiaoming&pass=111”);
新頁面的URL:

http://localhost:8080/UserManager1/MainFrame?uname=admin
優點:傳遞資訊的速度比較快
缺點:它只能傳遞字串,而不能傳送一個物件
也可以用session傳遞資訊,可以傳遞物件(後面講)
接收端:String 引數=requst.getParameter(“引數名”);
String uname=request.getParameter(“uname”);
案例:在web網頁中顯示登陸使用者的姓名

session簡單理解:
這裡寫圖片描述
request.getSession().setAttribute(“loginuser”, username);

三、檔案下載Content-Disposition
講解:在servlet類別中(4)中響應頭中②

四、頁面快取
講解:在servlet類別中(4)中響應頭中③