復(fù)習(xí)1:
一.get
1.如何編寫一個servlet?
①創(chuàng)建一個類去繼承HttpServlet,重寫doGet|doPost方法。
②配置訪問路徑(路徑是唯一的)
1)注解
2)xml配置
2.響應(yīng)數(shù)據(jù):HttpServletResponse
①首先設(shè)置編碼: HttpServletResponse.setContentType("text/html;charset=utf-8");|
HttpServletResponse.setCharacterEncoding("utf-8")
②HttpServletResponse去獲取輸出流:PrintWriter pw = HttpServletResponse.getWriter(); pw.print("xxx");
3.接受請求參數(shù)HttpServletRequest
①HttpServletRequest去調(diào)用getParameter("表單的name屬性值或者url在后面追加的值")
②解決中文亂碼 String value = new String(值.getBytes("ISO-8859-1"),"UTF-8");
4.超鏈接是get請求
二.post(如果直接在url輸入訪問路徑,默認(rèn)是get請求,如果沒有g(shù)et方法報錯)
1.post解決中文亂碼請求參數(shù)的中文亂碼
HttpServletResponse.setCharacterEncoding("utf-8");
三。get與post的區(qū)別:
GET請求的特點:
從使用經(jīng)驗上有如下總結(jié):
1.GET是把參數(shù)數(shù)據(jù)隊列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個字段一一對應(yīng),在URL中可以看到。
2.GET傳送的數(shù)據(jù)量較小,不能大于2KB。
3.GET安全性非常低 (路由器會記錄請求地址)
如下情況中瀏覽器會發(fā)送GET類型的請求:
1.在地址欄輸入一個地址
2.點擊頁面中的鏈接
3.表單的默認(rèn)提交方式
POST請求的特點:
從使用經(jīng)驗上有如下總結(jié):
1.POST是將表單內(nèi)各個字段與其內(nèi)容放置在實體內(nèi)容中內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
2.POST傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制
3.POST安全性較高,將表單的Method屬性設(shè)置為POST時,瀏覽器會發(fā)送POST請求
GET和POST還有一個重大區(qū)別,
簡單的說:
GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包。
長的說:
對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200(返回數(shù)據(jù));
而對于POST,瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 ok(返回數(shù)據(jù))。
也就是說,GET只需要汽車跑一趟就把貨送到了,而POST得跑兩趟,第一趟,
先去和服務(wù)器打個招呼“嗨,我等下要送一批貨來,你們打開門迎接我”,然后再回頭把貨送過去。
因為POST需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。因此Yahoo團(tuán)隊有推薦用GET替換.
POST來優(yōu)化網(wǎng)站性能。但這是一個坑!跳入需謹(jǐn)慎。為什么?
1. GET與POST都有自己的語義,不能隨便混用。
2. 據(jù)研究,在網(wǎng)絡(luò)環(huán)境好的情況下,發(fā)一次包的時間和發(fā)兩次包的時間差別基本可以無視。
而在網(wǎng)絡(luò)環(huán)境差的情況下,兩次包的TCP在驗證數(shù)據(jù)包完整性上,有非常大的優(yōu)點。
3. 并不是所有瀏覽器都會在POST中發(fā)送兩次包,F(xiàn)irefox就只發(fā)送一次。
復(fù)習(xí)2:
一.servlet生命周期
①實例化 <load - on - startup>x</load - on - startup>,x>=0 init方法會啟動服務(wù)器的時候執(zhí)行,x<0訪問的時候init()才會執(zhí)行
②初始化 init():只會執(zhí)行一次
③就緒service():訪問的時候執(zhí)行
④銷毀destory():關(guān)閉服務(wù)器的時候執(zhí)行
二.servlet四大域
①application:整合web
②session :瀏覽器打開到瀏覽器關(guān)閉
③request :一次請求一次響應(yīng),與轉(zhuǎn)發(fā)結(jié)合使用
④pageContext:整個jsp頁面
三.Jsp
1.表達(dá)式
①<%= ... %>(方便輸出)
②<% ... %>(完成較長的邏輯運算)
③<%! ... %>(添加屬性或者方法)
2.三大指令
①page : 導(dǎo)包
②include : 引入頁面
③taglib :引入第三方j(luò)ar
四。重定向與轉(zhuǎn)發(fā)
重定向:瀏覽器的兩次請求,url會發(fā)生變化
轉(zhuǎn) 發(fā): url不發(fā)生變化,是服務(wù)器的兩次請求