一、請求的方式
1.地址欄輸入
2.超鏈接
3.Form表單
4.ajax,異步無刷新技術(shù)
5.請求轉(zhuǎn)發(fā)
6.重定向
二践宴、HttpServletRequest對象
主要作用:接受客戶端發(fā)送過來的請求信息
1.常用方法
getRequestURL():獲取來源URL
getQueryString():
getMethod():請求方式,get/post
2.請求亂碼解決
2.1 方案一
只對post請求有效
req.setCharacterEncoding("UTF-8");
2.2 方案二
一次只能處理一個參數(shù)
如果本身不亂碼,使用后會亂碼
無論get還是post都可以使用
new String(request.getParameter("參數(shù)名").getBytes("ISO-8859-1"),"UTF-8")
3.請求轉(zhuǎn)發(fā)
請求轉(zhuǎn)發(fā)辱士,是一種服務(wù)器的行為
當客戶端請求到達后坞淮,服務(wù)器進行轉(zhuǎn)發(fā)残炮, 此時會將請求對象進行保存
req.getRequestDispatcher("請求地址").forward(request,response)
4.request作為域?qū)ο?/h2>
設(shè)置作用域
req.setAttribute("user", "zhangsan");
移除作用域
req.removeAttribute("user");
三、HttpServletResponse對象
1.常用方法
getWriter(),獲取輸出的 字符流
getOutputStream(),獲取輸出的字節(jié)流
setContentType(),設(shè)置響應(yīng)類型和編碼
2.刷新和頁面自動跳轉(zhuǎn)
2.1 頁面跳轉(zhuǎn)
3秒后進行跳轉(zhuǎn)
response.setHeader("refresh","3;URL=ok.html");
2.2 自動刷新
每隔2秒自動刷新
resp.setHeader("refresh","2");
3.響應(yīng)數(shù)據(jù)
接受到客戶端請求后,可以通過HttpServletResponse對象直接進行響應(yīng)
getWriter()獲取字符流
PrintWriter writer = resp.getWriter();
writer.write("<h4>Hello Servlet</h4>");
writer.close();
getOutputStream()獲取字節(jié)流,可以響應(yīng)一切數(shù)據(jù)
OutputStream outputStream = resp.getOutputStream();
outputStream.write("<h4>Hello Servlet</h4>".getBytes());
4.解決亂碼
4.1 指定客戶端和服務(wù)器使用的編碼一致
設(shè)置服務(wù)器的編碼格式
resp.setCharacterEncoding("UTF-8")
設(shè)置客戶端的編碼格式
resp.setHeader("content-type", "text/html;charset=UTF-8");
4.2 使用單句話代替
用這句話,就可以替代,完成編碼格式統(tǒng)一和,響應(yīng)類型識別
resp.setContentType("text/html;charset=utf-8");
5.響應(yīng)圖片
5.1? 獲取路徑
獲得項目在服務(wù)器中的真實路徑
String path = req.getServletContext().getRealPath("/")
獲得圖片的存放路徑
String filepath = path + "WEB-INF/圖片名稱.jpeg"
5.2 獲取對象
獲取該對象
File file = new File(filepath)
5.3 判斷對象
判斷該對象是否存在,并且是否為一個文件
if(file.exists() && file.isFile())
5.4 寫入關(guān)閉
得到輸出流
ServletOutputStream out = resp.getOutputStream();
得到輸入流
InputStream in = new FileInputStream(filepath);
寫出
byte[] arr = byte[1024];
int len =0;
while((len=in.read(arr))
!= -1){
? ? out.write(arr,0,len);
}
out.flush();
in.close();
out.close();
5.5 設(shè)置響應(yīng)類型
resp.setContentType("img/jpeg");
6.請求轉(zhuǎn)發(fā)和重定向的區(qū)別
6.1 請求轉(zhuǎn)發(fā)
1. 只有一次請求,request作用域中的數(shù)據(jù)可以共享
2. 瀏覽器地址欄不發(fā)生改變
3. 服務(wù)器行為
4. 跳轉(zhuǎn)的絕對地址可以定位到站點名后
6.2 重定向
1. 有兩次請求,request作用域的屬于不可以共享
2. 瀏覽器地址方式改變
3. 客戶端行為
4. 跳轉(zhuǎn)地址可以定位到http://后
5. 重定向可以定位到任意路徑
6.3 請求轉(zhuǎn)發(fā)和重定向的"/"含義
請求轉(zhuǎn)發(fā)(服務(wù)端跳轉(zhuǎn)):"http://localhost:8080/站點名"
重定向(客戶端跳轉(zhuǎn)):"http://localhost:8080/"
6.4 客戶端跳轉(zhuǎn)
1. 表單提交
2. 超鏈接提交
3. 地址欄輸入
4. 重定向?
6.5 服務(wù)端跳轉(zhuǎn)
1. 地址欄直接輸入
2. 請求轉(zhuǎn)發(fā)
7.路徑問題
7.1相對路徑
路徑的前面不要加任何符號,一般情況下代表的是:"http://localhost:8080/站點名"
7.2絕對路徑
以http://開頭的完整的絕對路徑,可以跨域,可以訪問任何資源
以"/"開頭,訪問當前項目下的資源