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