Javaweb的Response對象怎么使用

這篇文章主要講解了“Javaweb的Response對象怎么使用”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Javaweb的Response對象怎么使用”吧!

10年積累的成都網(wǎng)站設計、成都做網(wǎng)站經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設流程,更有南岳免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

response的理解概述:

與request相對,response對象是設置響應消息。在瀏覽器按下F12鍵--點擊網(wǎng)絡--ctrl+R: 可以查看用戶在瀏覽器端每次操作時瀏覽器向服務器發(fā)送的響應消息。

Javaweb的Response對象怎么使用

response的使用概述:

response作為tomcat服務器已實現(xiàn)的對象,最直接的用法就是在servlet類中調(diào)用response對象的方法,response對象的功能是設置響應消息,所以方法的總體邏輯就是設置響應消息,這類方法的關(guān)鍵在于對響應消息的理解。

reponse對象設置響應消息的方法:
-setStatus(int sc):設置狀態(tài)碼
-setHeader(String name, String value) :設置響應頭
設置響應體的方法:
-PrintWriter getWriter():獲取字符輸出流對象
-ServletOutputStream getOutputStream():獲取字節(jié)輸出流對象
重定向方法:
-sendRedirect(String Path): 資源跳轉(zhuǎn)

redirect(重定向)和forward(轉(zhuǎn)發(fā))同為資源跳轉(zhuǎn)方法,但有所區(qū)別:

* 重定向的特點: redirect

1. 跳轉(zhuǎn)后地址欄發(fā)生變化:

2. 重定向可以訪問項目外其他站點(服務器)的資源

3. 重定向是兩次請求。前后Servlet下的request對象不能共享數(shù)據(jù)

* 轉(zhuǎn)發(fā)的特點:forward

1. 轉(zhuǎn)發(fā)地址欄路徑不變 :

2. 轉(zhuǎn)發(fā)只能訪問當前服務器下的資源

3. 轉(zhuǎn)發(fā)是一次請求,可以使用request對象來共享數(shù)據(jù)

跳轉(zhuǎn)資源需要確定跳轉(zhuǎn)后資源的路徑,分為相對路徑和絕對路徑。

通過相對路徑不可以確定唯一資源,使用相對路徑需要找到當前資源和目標資源之間的相對位置關(guān)系,比如:./ 表示當前目錄,../ 表示后退一級目錄;

通過絕對路徑可以確定唯一資源,絕對路徑以/開頭的路徑,比如:/day15/responseDemo2即http://localhost/day15/responseDemo2。 如果資源跳轉(zhuǎn)的請求是由客戶端瀏覽器發(fā)出比如:***,則項目的絕對路徑需要加虛擬目錄;如果是由服務器端發(fā)出比如:sendRedirect(),則可加可不加。

response的測試代碼:

/**運行前提:
 *1.備好responseTest2資源
 *2.
 */ /**responseTest1:重定向資源跳轉(zhuǎn):使訪問responseTest1資源會自動跳轉(zhuǎn)到responseTest2資源
 * 1.動態(tài)獲取虛擬目錄
 * 2.通過request對象設置共享數(shù)據(jù)到request域中
 * 3.調(diào)用以跳轉(zhuǎn)資源為參數(shù)的重定向方法
 */ @WebServlet("/responseTest1")public class ResponseDemo1 extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //1.
        String contextPath = request.getContextPath(); 
        //2.
        request.serAttribute("msg","hello Test2, I come from Test1."); 
        //3.
        response.sendRedirect(contextPath+"/responseTest2");        //response.sendRedirect("http://www.baidu.com");  //sendRedirect方法可跳轉(zhuǎn)到項目外的資源
        //response.sendRedirect("location","/responseTest2");//以靜態(tài)虛擬目錄作為參數(shù) 
       /* 初始重定向資源跳轉(zhuǎn)方式:設置狀態(tài)碼,響應頭。又因為"302""location"取固定值,可直接調(diào)用方sendRedirect(響應頭的值)。
        response.setStatus(302);//設置狀態(tài)碼為302
        response.setHeader("location","/MyTest/responseTest2");//設置響應頭location =  /MyTest/responseTest2
       */
      /*響應狀態(tài)碼:服務器告訴客戶端瀏覽器本次請求和響應的一個狀態(tài)。
                1. 狀態(tài)碼都是3位數(shù)字 
                2. 分類:
                    1. 1xx:服務器接受客戶端消息,但沒有接受完成,等待一段時間后,發(fā)送1xx多狀態(tài)碼
                    2. 2xx:成功。代表:200
                    3. 3xx:重定向。代表:302(重定向),304(訪問緩存)
                    4. 4xx:客戶端錯誤。
                        * 代表:
                            * 404(請求路徑?jīng)]有對應的資源) 
                            * 405:請求方式?jīng)]有對應的doXxx方法
                    5. 5xx:服務器端錯誤。代表:500(服務器內(nèi)部出現(xiàn)異常)
                */
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        this.doPost(request,response);
    }
}
/**ResponseTest2:服務器輸出字符數(shù)據(jù)到瀏覽器
 *1.設置編碼,并告訴瀏覽器編碼類型
 *2.獲取字符輸出流
 *3.輸出數(shù)據(jù)
 */@WebServlet("/responsTset2")public class ResponseTest1 extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //1.再獲取輸出流之前設置編碼,并告訴瀏覽器使用的編碼,避免編碼解碼碼表不一致出現(xiàn)亂碼問題
        response.setContentType("text/html;charset=utf-8");        //response.setHeader("content-type","text/html;charset=utf-8");通過消息頭"content-type"設置字符流編碼并告訴瀏覽器 
        // response.setCharacterEncoding("utf-8"); 僅僅設置字符流編碼格式,不能保證與瀏覽器默認解碼格式統(tǒng)一 
        //2.獲取字符輸出流,默認情況下獲取字符流的編碼是tomcat實現(xiàn)的ISO-8859-1,所以需要提前設置
        PrintWriter pw = response.getWriter();        
        //3.輸出數(shù)據(jù)
        String msg ="hello Test2, I don't come from Test1."
        //String msg = (String)request.getAttribute("msg");錯于重定向是兩次請求,不能通過request共享數(shù)據(jù)
        //
        pw.write(msg);        //pw.write("<h1>msg</h1>");
    }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        this.doPost(request,response);
    }
}
/**ResponseTest3:
 * 1.設置編碼,并告訴瀏覽器編碼類型
 * 2.獲取字節(jié)輸出流
 * 3.輸出數(shù)據(jù)
 */@WebServlet("/responseTest3")public class ResponseTest3 extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //1.
        response.setContentType("text/html;charset=utf-8"); 
        //2.
        ServletOutputStream sos = response.getOutputStream();        //3.
        sos.write("你好".getBytes("utf-8"));
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        this.doPost(request,response);
    }
}

基于response的驗證碼的案例代碼:

/**CheckCodeServlet:驗證碼
  *1.在內(nèi)存中創(chuàng)建圖片(驗證碼圖片對象)
  *2.美化圖片 
  *  2.1 填充背景圖
  *  2.2 畫指定顏色邊框
  *  2.3 生成驗證碼
  *  2.4 畫干擾線
  *3.將圖片輸出到頁面展示
 */@WebServlet("/checkCodeServlet")public class CheckCodeServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        int width = 100;        int height = 50; 
        //1.在內(nèi)存中創(chuàng)建一個指定寬高,背景色為黑色的圖片對象
        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);        //BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);創(chuàng)建一個帶透明色的對象,最后一個參數(shù)調(diào)節(jié)灰度    
        //2.用代碼畫圖的步驟邏輯和“畫圖工具”鼠標點擊畫圖一樣
        //2.1 代碼“獲取畫筆--設置畫筆顏色--填充圖片背景色”相當于鼠標“點擊畫筆--選擇畫筆顏色--點擊圖片填充顏色”
        Graphics g = image.getGraphics();//獲得畫筆
        g.setColor(Color.PINK);//設置畫筆顏色
        g.fillRect(0,0,width,height); //填充圖片顏色 
        //2.2代碼“設置邊框顏色--設置邊框起始位置和長寬幅度”相當于鼠標“點擊選擇邊框起始位置--拖動鼠標確定最終邊框大小”
        g.setColor(Color.BLUE); //設置邊框顏色
        g.drawRect(0,0,width - 1,height - 1); //設置邊框起始坐標和長寬像素,注意邊框占一個像素        
        //2.3
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
        Random ran = new Random(); 
        for (int i = 1; i <= 4; i++) {            int index = ran.nextInt(str.length());//生成隨機角標
            char ch = str.charAt(index);//獲取隨機角標對應的字符
            g.drawString(ch+"",width/5*i,height/2);//在圖片上寫驗證碼
        }  
        //2.4
        g.setColor(Color.GREEN);        //
        //隨機生成干擾線的始末點坐標,并連接成干擾線
        for (int i = 0; i < 10; i++) {            int x1 = ran.nextInt(width);            int x2 = ran.nextInt(width);            int y1 = ran.nextInt(height);            int y2 = ran.nextInt(height);
            g.drawLine(x1,y1,x2,y2);
        } 
        //3.將圖片響應給客戶端
        ImageIO.write(image,"jpg",response.getOutputStream());
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        this.doPost(request,response);
    }
}

感謝各位的閱讀,以上就是“Javaweb的Response對象怎么使用”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Javaweb的Response對象怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)站標題:Javaweb的Response對象怎么使用
文章地址:http://muchs.cn/article32/pdjpsc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google面包屑導航、企業(yè)網(wǎng)站制作、標簽優(yōu)化、微信公眾號品牌網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設