標籤:擷取域對象 封裝 使用 常用方法 htm 設定 oid inpu 地址
一、向伺服器發起請求的方式
1、地址欄輸入(http://ip:port/path)
2、超連結
3、Form表單提交
4、ajax
通過ajax發出的請求屬於非同步請求,能實現局部重新整理的效果,通過JQuery中的ajax(),get(),post(),getJson()等方法都能發出請求。
5、請求轉寄(在下面會詳細介紹)
6、重新導向(在下面會詳細介紹)
二、HttpServletRequest對象
1、介紹
·主要作用是用來接收用戶端發送過來的請求資訊,例如請求參數,發送的頭資訊等。
·service方法的形參接收的是HTTPServletRequest介面的執行個體化對象,表示該對象主要用在HTTP協議上,是由Tomcat封裝好傳遞過來的
ServletRequest只有一個子介面HTTPServletRequest介面,但為什麼不將兩個介面合在一起呢?
原因是現在主要用的協議是HTTP協議,如果以後出現新的協議,想支援新的協議,只要繼承ServletRequest介面就行了。
2、常用形式
1)常用方法
2)擷取要求標頭
3)擷取用戶端請求參數(用戶端提交的資料)
3、請求亂碼的解決方式
req.setCharacterEncoding("UTF-8");
這種方法只針對POST有效,必須在接收所有資料前設定
new String(req.getParameter(name).getBytes("ISO-8859"),"UTF-8");
這種方式對任何請求都有效,但Tomcat8起,以後的GET方式請求不會出現亂碼,再設定反而會出現亂碼。
4、請求轉寄
請求轉寄是一種伺服器的行為,當用戶端請求到達後,伺服器進行轉寄,此時會將請求對象進行儲存,地址欄中的URL地址不會改變,
得到響應後,伺服器端再將響應發送給用戶端,從始至終只有一個請求發出。
5、Request作為域對象
作用範圍只在一次請求中有效,經過請求轉寄request域的資料依然存在。
request.setAttribute(); 設定域對象的內容
request.getAttribute(); 擷取域對象內容
request.removeAttribute(String name); 刪除域對象內容
三、HTTPServletResponse對象
1、介紹
HTTPServletResponse主要功能是伺服器對用戶端的請求進行相應,將Web伺服器處理後的結果返回給用戶端
2、常用方法
3、重新整理和頁面自動跳轉
response頭資訊重新整理
HTML方式重新整理
4、資料響應
getWrite()擷取字元流(只能響應回字元)
getOutputStream()擷取位元組流(能響應一切資料)
5、亂碼解決
resp.setCharacterEncoding("UTF-8") 服務端解碼方式
resp.setHeader("content-type", "text/html;charset=UTF-8"); 用戶端解碼方式
要保持發送端和接收端一致,所以兩種方式要同時使用
可以同時指定伺服器和用戶端的方式:
resp.setContentType("text/html;charset=utf-8");
6、響應圖片
public class Servlet02 extends HttpServlet{ /** * 響應圖片 */ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //設定圖片響應類型 resp.setContentType("image/jpeg"); //得到伺服器的真實路徑 String realPath=req.getServletContext().getRealPath("/"); System.out.println(realPath); //得到圖片路徑 String filePath=realPath+"s1.jpg"; //通過圖片路徑得到file對象 File file=new File(filePath); //判斷file對象是否存在,並且是一個標準檔案 if (file.exists() && file.isFile()) { //得到輸出資料流 ServletOutputStream out=resp.getOutputStream(); //得到輸入資料流 InputStream is=new FileInputStream(file); byte[] buf=new byte[1024]; int len=0; while ((len=is.read(buf))!=-1) { out.write(buf,0,len); } is.close(); out.close(); }else { resp.setContentType("text/html;charset=UTF-8"); resp.getWriter().write("檔案不存在"); } }}
7、重新導向跳轉
重新導向是一種伺服器指導,用戶端的行為。用戶端發出第一個請求,被伺服器接收,經過處理伺服器進行響應,與此同時,伺服器給用戶端一個地址(下次請求的地址 resp.sendRedirect("url");),當用戶端接收到響應後, 立刻、馬上、自動根據伺服器 給的地址進行請求的發送第二個請求,伺服器接收請求並作出響應,重新導向完成。從描述中可以看出重新導向當中有兩個請求存在,並且屬於用戶端行為。
實現方式
請求轉寄和重新導向比較:
Web常用對象(1)