PS:如下僅爲我的學習筆記,澀及方面略窄 html
####################### Request #######################java
/**
* request表明用戶經過瀏覽器發起的請求:
* Request對象將瀏覽器發送來的Http請求
* 解析爲對象的屬性.只要使用request對象
* 的方法就能夠獲取Http請求的所有信息
*/web
1. 獲取請求頭的名稱瀏覽器
Enumeration<String> names = req.getHeaderNames(); 緩存
request中有一個 getHeaderNames()方法,用來獲取所有請求頭的名稱服務器
返回值是一個Enumeration(枚舉,java老舊的一種迭代器,現被Iterator替代)app
2. 可經過HeaderNames獲取對應請求頭ide
能夠得到 ->學習
主機IP和端口,鏈接方式,緩存控制,用戶代理 等信息.編碼
while (names.hasMoreElements()) { String name = names.nextElement(); System.out.println(name+": "+req.getHeader(name)); }
因爲Enumeration有着迭代器的性質,能夠經過迭代獲取全部信息,控制檯輸出舉例以下:
host: localhost:8088 connection: keep-alive cache-control: max-age=0 user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 upgrade-insecure-requests: 1 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9
3. URI 和 URL區別
String uri = req.getRequestURI(); StringBuffer utl = req.getRequestURL();
System.out.println("uri: "+uri); System.out.println("url: "+utl.toString());
URI,是uniform resource identifier,統一資源標識符,用來惟一的標識一個資源。
(能夠理解成一個資源名)
而URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL能夠用來標識一個資源,並且還指明瞭如何locate這個資源。
(能夠理解成一個資源的完整名稱,包括文件所在位置)
至於區別輸出以下:
uri: /Dpl_7_Servlet/request
url: http://localhost:8088/Dpl_7_Servlet/request
(項目名) (servlet名)
4.如何讀取請求參數值?
String getParameter(String paramName);
注:
a.若是請求參數名寫錯,會返回null值。
b.若是不填寫任何數據,會得到空字符串。
####################### Response #######################
/**
* 任何發送到瀏覽器的響應信息均可以
* 利用response對象來設置而且發送到客戶端
*/
# 設置響應狀態碼 (就是設置響應狀態行)
response.setStatus(200);
HTTP協議中有多種狀態碼:如 200-請求成功 404-請求失敗,未找到資源 500-服務器遭遇錯誤 等
# 設置響應頭部
response.setContentType("text/html;charset=utf-8");
text/html: 表明響應類型
charset=utf-8: 瀏覽器在解碼時會使用不一樣的編碼,這裏設置編碼是給瀏覽器解碼時統一的編碼
# 設置響應Body中的編碼
response.setCharacterEncoding("UTF-8");
在輸出時,默認使用iso-8859-1來編碼,
因此在
Servlset輸出
中文時會亂碼,
爲了解決亂碼問題會使用response設置字符編碼
# 發送body內容,利用流發送
//使用Printwriter 發送文本
1 PrintWriter pw = response.getWriter();
2 pw.println("世界你好!");
//使用OutputStream 發送非文本(如圖片等)
//獲取文件輸入流
BufferedInputStream bis
= new BufferedInputStream(
new FileInputStream(
new File("1.jpg")));
//響應狀態行 response.setStatus(200); //發送響應頭 response.setContentType("image/jpg"); response.setContentLength((int)pngFile.length()); //發送body OutputStream out = response.getOutputStream(); int b ; while( (b=bis.read())!=-1){ out.write(b); } bis.close(); out.close();
####################### 重定向 #######################
服務器通知瀏覽器,向一個新地址發送請求。 注: 服務器能夠發送一個302狀態碼以及一個location消息頭( 值是一個地址,稱之爲重定向地址)給瀏覽器,瀏覽器收到之 後,會當即向重定向地址發送請求。
response.sendRedirect(String url);
注:url就是重定向地址。
注: 重定向以前,容器會清空response對象上存放的全部數據。
也就是說,實體內容裏面是沒有任何數據的。
a.重定向地址是任意的。
b.重定向以後瀏覽器地址會發生變化。
好比 http://ip:port/servlet-day03/abc.html "/servlet-day03/abc.html" step1. 容器默認會認爲訪問的是一個servlet 即查找和"/abc.html"匹配的servlet。 注: 匹配規則: a.精確匹配: <url-pattern>/abc.html</url-pattern> b.通配符匹配: <url-pattern>/*</url-pattern> <url-pattern>/demo/*</url-pattern> *:匹配零個或者多個任意的字符。 c.後綴匹配: <url-pattern>*.do</url-pattern> *.do 匹配全部以.do結尾的請求。 step2.若是找不到匹配的servlet,則訪問對應的文件。 找到了就返回該文件。若是找不到,返回404。
step1. 採用後綴匹配。
step2. 分析請求資源路徑,依據分析結果,來調用
不一樣的分支來處理。