日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java实战之04JavaWeb-02Request和Response

發布時間:2025/3/13 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实战之04JavaWeb-02Request和Response 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Response和Request的生態環境

二、HttpServletResponse---代表響應對象

1.設置狀態碼

void setStatus(int sc)

狀態碼:

200:一切正常 正常返回數據

302:重定向

304:拿緩存

404:找不到資源

500:服務器端報錯(一般情況,代碼有異常)

2.設置響應頭

(1)設置響應頭的API

(2)案例-重定向

重定向:

實現重定向:302+Location

servlet1:

response.setStatus(302);

response.setHeader(“Location”,”url地址”);

servlet2:

response.getWriter().write(“hello”);

重定向的特點:

1)客戶端訪問兩次

2)客戶端的地址欄的地址發生了變化

response中便捷的重定向的方法:

void sendRedirect(String location)

(3)案例-定時跳轉

refresh頭代表定時跳轉

頭對應的值的寫法:秒值;url=url地址

response.setHeader("refresh","5;url=/response2");

(4)304狀態碼的原理

3.設置響應體

(1)寫給客戶端字符

PrintWriter writer = response.getWriter();

writer.write(字符);

原因:write方法在寫的時候 其實是將內容寫到response的緩沖區,response的緩 沖區本有默認的編碼格式 iso-8859-1問題:寫給客戶端的中文亂碼

解決:手動的設置response的緩沖區編碼

void setCharacterEncoding(String Charset)

問題:設置response的編碼為UTF-8之后 發現頁面顯示


解決:通過代碼去指定頁面解析時的編碼
原因:頁面默認解析的編碼是GBK

通過Content-Type頭去指導瀏覽器使用哪種編碼進行頁面的解析

response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);

response.setContentType("text/html;charset=UTF-8");

注意:設置Content-Type的方法內部有兩個功能

1)自行設置response的緩沖區的編碼是UTF-8;

2)指導瀏覽器的解析頁面時的編碼是UTF-8;

記住:解決response發中文亂碼

response.setContentType("text/html;charset=UTF-8");

(2)寫給客戶端字節

1)獲得字節流

ServletOutputStram ?response.getOutputStream();

2)需求:輸出驗證碼圖片

3)需求:文件下載

兩個流:

輸入流:讀取文件

輸出流:寫給客戶端---寫到response緩沖區

兩個頭:

//顯示的告訴客戶端文件的mime類型

response.setContentType("audio/mpeg");

//告知客戶端回寫的文件要以附件的形式打開(下載)

response.setHeader("Content-Disposition","attachment;filename=1.mp3");

4.Response的一些細節

1)getWriter和getOutputSteam在一個Servlet中不能同時調用

2)通過response獲得的流不用手動關閉

web容器在service方法結束后會檢查response獲得的流是否關閉,沒有關閉容器會關閉這個流。

3)response緩沖區的大小是8k ?可以設置大小 只能向更大的范圍設置

三、HttpServletRequest

1.獲取請求行

1)獲取請求方式

String method = request.getMethod(); //GET ?POST

2)獲得請求的資源

request.getRequestURI()

request.getRequestURL()

request.getContextPath():web應用的名稱

1 //1、請求方式 2 String method = request.getMethod(); 3 System.out.println(method);//GET 4 //2、獲得請求資源 5 String requestURI = request.getRequestURI(); 6 StringBuffer requestURL = request.getRequestURL(); 7 System.out.println(requestURI); 8 System.out.println(requestURL.toString()); 9 String contextPath = request.getContextPath(); 10 System.out.println(contextPath);

3)獲取get提交的數據的字符串形式

1 //3、獲取get提交的字符串形式的 參數 2 String queryStr = request.getQueryString(); 3 System.out.println(queryStr);

4)獲取客戶機的參數

1 //4、獲得客戶機的ip 2 String remoteAddr = request.getRemoteAddr(); 3 System.out.println(remoteAddr);

2.獲取請求頭

1 //1、獲取一個指定的頭 2 String header = request.getHeader("User-Agent"); 3 System.out.println(header); 4 //2、判斷客戶端的瀏覽器的類型 5 if(header.contains("MSIE")){ 6 System.out.println("這是IE"); 7 }else if(header.contains("Firefox")){ 8 System.out.println("這是火狐"); 9 }else{ 10 System.out.println("這是其他"); 11 } 12 //3、獲得所有的頭的名稱 13 System.out.println("-------------------------------------------"); 14 Enumeration headerNames = request.getHeaderNames(); 15 while(headerNames.hasMoreElements()){ 16 String headerName = (String) headerNames.nextElement(); 17 System.out.println(headerName+":"+request.getHeader(headerName)); 18 }

3.獲得請求體(獲得post提交的參數)

請求體的格式:

username=zhangsan&password=123&hobby=zq&hobby=pq

1)String getParamter(name)

獲得zhangsan:request.getParameter(“username”);

2)String[] getParameterValues(name)

獲得愛好hobby:request.getParamterValues(“hobby”);

3)Map<String,String[]> ?getParameterMap()

獲取上述的請求體:

username:{zhangsan}

password:{12345}

hobby:{zq,pq}

4)getParameterNames():獲得所有的請求參數的名稱

獲取上述的請求體:

[ username,password,hobby ]

1 //1、獲取username---???? 2 String username = request.getParameter("username"); 3 //get方式 4 //編碼---字節數組 5 byte[] bytes = username.getBytes("iso8859-1"); 6 //解碼---utf-8 7 username = new String(bytes, "UTF-8"); 8 9 10 System.out.println(username); 11 //2、password 12 String password = request.getParameter("password"); 13 System.out.println(password); 14 //3、獲取hobby 15 String[] hobby = request.getParameterValues("hobby"); 16 System.out.println(hobby.length); 17 //4、獲取所有的參數的map形式 18 Map<String,String[]> parameterMap = request.getParameterMap(); 19 System.out.println(parameterMap);

問題:頁面在提交中文時 到服務器端獲取后亂碼

原因:request對象默認的編碼是iso-8859-1

解決方案:將request的編碼設置成UTF-8(只適合post提交)

request.setCharacterEncoding(“UTF-8”);

注意:get怎樣解決中文亂碼

客戶端的編碼是(編碼)UTF-8---->服務器端request編碼是(解碼)iso8859-1--->????????--->用iso8859-1編碼---->UTF-8進行解碼

4.Request是一個域對象和請求轉發

轉發的語法:

request.getRequestDispatcher(“要轉發的地址”).forward(request,response);

1 request.getRequestDispatcher("/request2").forward(request, response);

request域可見范圍:在一次請求鏈中

5.請求包含

語法:

request.getRequestDispatcher(“要包含的資源的地址”).include(request,response);

轉載于:https://www.cnblogs.com/minihouseCoder/p/5624363.html

總結

以上是生活随笔為你收集整理的Java实战之04JavaWeb-02Request和Response的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。