2018/8/10
response對象(響應對象)
* 想要獲取客戶端的內容,使用request對象。對客戶端做出響應使用response對象。
* 響應:
* 響應行
* 狀態碼:
void setStatus(int sc) 設置狀態碼
* 響應頭(key:value的形式,一個key對應一個value,一個key對應多個value)
* 設置頭信息
void setHeader(String name, String value) (一個key對應一個value)經常使用的
setHeader("aa","bb");
setHeader("aa","cc");
結果:aa:cc
void setIntHeader(String name, int value)
void setDateHeader(String name, long date) 值是毫秒值(int 秒 long 毫秒)
void addHeader(String name, String value) (一個key對應多個value)
addHeader("aa","bb");
addHeader("aa","cc");
結果:aa:bb,cc
void addIntHeader(String name, int value)
void addDateHeader(String name, long date)
* 響應體
ServletOutputStream getOutputStream() 字節輸出流
PrintWriter getWriter() 字符輸出流
* 案例
重定向(登陸頁面)
* 登陸頁面重定向
* 狀態碼302 應頭location
* 需求:登陸頁面,用戶名和密碼的登陸頁面,用戶名和密碼都是admin,
如果有一個不是,重定向到登陸頁面,重新登陸。
// 設置302的狀態碼
response.setStatus(302);
// 設置地址
response.setHeader("location", "/day10/response/login.html");
// response對象提供了一個方法,可以完成重定向。
response.sendRedirect("/day10/response/login.html");
頁面定時刷新(頁面讀秒操作)
* 響應的頭 refresh
<meta http-equiv="refresh" content="5;url=/day10/response/login.html">
禁用瀏覽器緩存(三個頭信息)
* 應用:網銀。頁面的數據是發送變化的。
Cache-Control : no-cache
Expires: -1 值是日期類型(setDateHeader())
Pragma : no-cache
向頁面輸出中文(亂碼問題)
字節:ServletOutputStream getOutputStream() 字節輸出流
* 字節的輸出中文的亂碼
* * 輸出哈羅我的是否亂碼呢?
* * 不一定亂碼。
* * 解決辦法
* * 設置瀏覽器打開文件時所採用的編碼
* response.setHeader("Content-Type", "text/html;charset=UTF-8");
* * 獲取字符串byte數組時編碼和打開文件時編碼一致。
* "哈羅我的".getBytes("UTF-8")
PrintWriter getWriter() 字符輸出流
* 字符輸出中文是否亂碼呢?
* * 肯定亂碼
* response緩衝區的編碼,默認值ISO-8859-1
* * 設置response緩衝編碼
* response.setCharacterEncoding("UTF-8");
* * 設置瀏覽器打開文件所採用的編碼
* response.setHeader("Content-Type", "text/html;charset=UTF-8");
* * 簡寫方式
* response.setContentType("text/html;charset=UTF-8");
* 總結:response對象輸出中文,產生亂碼。
* 字節
* 解決方案
* 設置瀏覽器打開文件時採用的編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
* 獲取字符串的byte數組採用的編碼
"哈羅我的".getBytes("UTF-8")
* 字符
* 解決方法
* 設置瀏覽器打開文件時採用的編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
* 設置response緩衝區的編碼
response.setCharacterEncoding("UTF-8");
* 簡寫的方式(等於上面的兩句)
* response.setContentType("text/html;charset=UTF-8");
實現文件下載(初級的下載)
* 超鏈接,瀏覽器可以解析直接打開。
* 彈出下載窗口。
* 前提條件:先準備一個文件。
* 讀取文件,讀入到輸入流中。
* 通過response讀出到瀏覽器端。
* 設置頭信息
* Content-Disposition attachment;filename=文件名稱
* 以附件的形式打開。
實現驗證碼(*****)
request對象(請求對象)
ServletRequest
|
HttpServletRequest
獲取客戶機信息
getRemoteAddr(*****) 獲取IP地址
getMethod() (*****) 獲取請求方式
getContextPath()(*****) 獲取虛擬路徑
獲取請求頭信息
String getHeader(String name)
long getDateHeader(String name)
int getIntHeader(String name)
* 請求頭
referer 記住當前網頁的來源
User-Agent 判斷瀏覽器
if-modified-since 控制緩存
獲取請求參數(*****)
String getParameter(String name) (*****)
String[] getParameterValues(String name)(*****)
Map getParameterMap()(*****)
Enumeration getParameterNames()(用的比較少)
亂碼問題解決:
* POST請求亂碼 :request.setCharacterEncoding("utf-8");
* GET請求亂碼
解決方案一:修改tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
* 必須有修改tomcat服務器配置文件權限
解決方案二:逆向編解碼
username = URLEncoder.encode(username, "ISO8859-1");
username = URLDecoder.decode(username, "utf-8");
解決方案三:簡寫的方式(推薦使用)
username = new String(username.getBytes("ISO-8859-1"),"utf-8");
* request獲取中文數據亂碼(總結:)
* post提交
* 設置request緩衝區的編碼
request.setCharacterEncoding("utf-8");
* get提交
* String構造方法
username = new String(username.getBytes("ISO-8859-1"),"utf-8");
利用請求域傳遞對象(request域對象)
重定向和轉發的區別(轉發)(*****)
* 域對象
ServletContext:服務器一啓動,爲每個web應用創建一個ServletContext對象,所有servlet實例共享對象。
request:一次請求的範圍。
* setAttribute("","");
* getAttribute("");
* removeAttribute("");
* getRequestDispatcher(String path) ,返回是RequestDispatcher:對象
* RequestDispatcher:
* forward(ServletRequest request, ServletResponse response)(經常使用) 轉發的方法
* include(ServletRequest request, ServletResponse response)(瞭解) 包含