Request&&Response學習總結

 

1.Response html

  1.1 Response信息分析 瀏覽器

       1.1.1 響應行(響應的協議  響應的狀態嗎  響應的描述) 緩存

              響應的狀態碼: 服務器

                     1XX:用戶請求成功,可是服務器端沒有響應 dom

            2XX:用戶請求成功,且服務器端給了正確的響應 post

            3XX:訪問地址發生臨時改變 字體

                            302:重定向 編碼

瀏覽器請求兩次,地址欄的地址發生改變,顯示的是最後的頁面內容 spa

                304:緩存 htm

             4XX:客戶端錯誤

                404:路徑錯誤

             5XX:服務器端錯誤

       設置狀態碼的方法:

1)設置正確的狀態碼:setStatus();

2)設置錯誤的狀態碼:sendError(狀態碼,[文字提示]);

1.1.2 響應頭

       設置響應頭的方法:

1setHeaderkey,value;若是有就覆蓋,沒有就添加

2addHeaderkey,value;不進行覆蓋,直接添加

1.1.3 響應正文

               1response.getwriter():輸出字符流

        2response.getOutputStream();輸出字節流,多用於驗證碼及上傳下載

        備註:輸出字符流與輸出字節流不能同時使用

1.2 Response的生命週期:一次完整的請求到響應結束

  1.3 Response的亂碼處理方法:

              添加:response.setContentType("text/html;charset=utf-8");

        以此指定解碼方式爲utf-8

   1.4 小案例:驗證碼

      //1.設置畫布的寬高

int height=30;

              int width=80;

              //2.新建一個畫布對象

              BufferedImage im=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

             

              //3.新建一個畫筆對象

              Graphics gs=im.getGraphics();

              //3.1設置背景色

              gs.setColor(Color.LIGHT_GRAY);

              //3.2設置字體樣式、大小

              gs.setFont(new Font("微軟雅黑",Font.ITALIC, 26));

              //3.3將畫布展平

              gs.fillRect(0, 0, width, height);

      

              //4.畫出圖像

              //gs.drawString("1234", 0, height);

              Random rd=new Random();

              String[] strs={"a","b","c","d","e","f","g","h","i","j",

                            "k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};

              String b;

              int a;

              for(int i=0;i<4;i++){

                      a= rd.nextInt(10);

                     if(a%2==0){

                            b = rd.nextInt(10)+"";

                     }else{

                            a = rd.nextInt(26);

                            b = strs[a];

                     }

                     gs.setColor(new Color(rd.nextInt(256), rd.nextInt(256), rd.nextInt(256)));

                     gs.drawString(""+b, 20*i, height-rd.nextInt(10));

              }

              //畫一些干擾線

              int x1,y1,x2,y2;

              for(int j=0;j<15;j++){

                     x1=rd.nextInt(80);

                     y1=rd.nextInt(30);

                     x2=x1+rd.nextInt(5);

                     y2=y1+rd.nextInt(5);

                     gs.setColor(new Color(rd.nextInt(256), rd.nextInt(256), rd.nextInt(256)));

                     gs.drawLine(x1, y1,x2, y2);

              }

             

              //5.刷出圖像

              gs.dispose();

              ImageIO.write(im, "jpeg", new File("f:/a.jpg"));  //存儲到硬盤上

        ImageIO.write(im, "jpeg", response.getOutputStream());//打印到頁面上

2.Request

  2.1 Request信息分析

2.1.1請求行

       請求方式(get/post  咱們請求的資源路徑   協議

 獲取請求的方式:String method = request.getMethod();

 獲取資源的路徑:String requestURI = request.getRequestURI();

 獲取請求的協議:String protocol = request.getProtocol();

 獲取資源名:String contextPath = request.getContextPath();

 獲取請求資源路徑:StringBuffer stringBuffer = request.getRequestURL();

 獲取用戶的地址:String addr = request.getRemoteAddr();

2.1.2 請求頭

   request.getHeader("host") ;       經過請求頭的name 獲得相應的請求的值

   Enumeration enu = request.getHeaderNames(); 獲得全部的請求頭的name

2.1.3 請求體

request.getParameterMap()

   map{String[name的屬性值],String[](value) }

   map{「username」,String[](ssss)}

獲得用戶的請求

request.getParameter("username");//根據name的屬性值獲得相應提交信息

request.getParameterNames(); //獲得表單標籤name的屬性值

request.getParameterMap();//將用戶的請求信息放到map

request.getParameterValues("xxx");//獲取checkbok中的值

 2.2 request的亂碼問題

緣由:

提交信息===》瀏覽器按照utf-8進行編碼===》服務器按照iso-8859-1的形式進行解碼

  亂碼中文====》按iso-8859-1編碼===》按照utf-8的格式進行解碼===》提交信息

2.2.1 post請求的亂碼解決方案

        request.setCharacterEncoding("utf-8");

2.2.2 get請求的亂碼解決方案

String str1 = new String (xxx.getBytes("iso-8859-1"),"utf-8");

2.3request請求轉發

 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/xx");

 requestDispatcher.forward(request, response);

 或:request.getRequestDispatcher("/yu2").forward(request, response);

   特色:

     1.地址欄中顯示的地址是原始請求的地址

2.顯示的內容是轉發後的頁面的內容

3.原始請求地址中的內容不會顯示出來

4.瀏覽器只訪問一次服務器

2.4request請求包含

request.getRequestDispatcher("/yu2").include(request, response)

特色:

1.將兩個Servlet合併,兩個頁面的信息都顯示。

2.request在相互跳轉的多個servlet間進行共享。

相關文章
相關標籤/搜索