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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运动跟踪建模
- 下一篇: java美元兑换,(Java实现) 美元