servlet學習筆記(二)

servlet登陸功能實現與思考

servlet實現登陸功能主要是通過get()方法或者post()方法接收前端頁面輸入的參數,然後跟數據庫中已有的用戶數據進行匹配,匹配上則登陸成功,否則失敗。
由此,我覺得假如在這個過程中存在優化方案的話肯定是在這個匹配過程中。匹配過程中決定登陸速率的主要在兩個方面,一個是匹配算法,另一個是表結構。匹配算法無非幾個過程,先讀取表的內容,然後通過for語句進行一一比對,實在沒有優化的手段。於是我們可以從表結構下手,關於表結構優化方案,我們從主要從清理殭屍號下手。人們在註冊賬號的時候大多數存在一個現象,就是一時心血來潮註冊了賬號之後不再登陸,每次匹配要匹配這些賬號實在是浪費資源,但我們又不能將其從表中清除,因此我們應該設計一個算法使殭屍賬號自動地被放到表尾。
想出來的解決方案有兩個,一個是修改數據結構,讓用戶每次登入之後表中關於該用戶的登陸次數字段加一,然後重新進行一次插入排序。另一個是寫一個殭屍回收算法,每隔一段時間對殭屍號進行一次清理,把自上次清理後未在登陸過的賬號按序排到表尾。


get()方法和post()方法的區別

get()方法和post方法都是http協議上對數據進行操作的方法。主要區別如下:

  • 從名字上看,get()方法主要用於獲取數據,post()主要用於向服務器提交數據。此外delete()主要負責刪除數據,put()主要負責更改數據。
  • get()所能傳遞的參數是有限的,而post傳遞的參數可以說無限的。這主要是受到它們傳遞參數的方法限制。get()通過表頭傳遞參數,URL的長度進而限制了它傳遞參數的數量,而post()通過正文傳遞參數,因此可以是無限的參數。
  • get()方法是不安全的,post方法是安全的。這個主要也受到各自傳遞參數的方法影響。get()通過URL或cookie傳遞參數,某種意義上是把參數暴露出來,而post()通過BODY傳遞則不存在這個問題。
  • get()能夠被緩存,被保存爲書籤,方便傳播,而post()不行。這種差異是因爲get()方法把參數放進了URL,而post()不是。
  • get()限制Form表單的數據集的值必須爲ASCII字符;而post()支持整個ISO10646字符集。
  • get()的執行效率遠比post()要高。這也是由於兩者提交數據的方式不同造成的。

解決get()和post()亂碼問題

解決post()亂碼問題相對比較簡單,只要通過設置post方法的參數對象request和response的setCharacterEncoding="gbk"即可。其中gbk支持簡體和繁體,gb2312只支持簡體,而utf-8支持基本所有字體。
解決get()亂碼問題相對比較麻煩,要更改tomcat的配置文件。進入tomcat文件夾->conf->server.xml,找到connector標籤,在該標籤內添加一句語句URIEncoding="gbk"。
造成這兩種差異的主要原因是 post()方法是通過正文提交參數,get()是通過報頭提交參數,而setCharacterEncoding只能設置正文的編碼格式,而不能設置報頭的編碼格式

提交複選框參數

提交複選框的時候只要讓獲取參數的變量爲數組,然後把多個參數同時獲取並保存到數組裏即可。獲取多個參數的方法爲getParameterValues("name")

最後總結一句,我覺得get()post()最主要的區別在於get()是通過報頭提交參數,post()是通過正文提交參數,並由此衍生了各自的安全性、傳輸數據量等的區別

PS:以上爲小白的學習筆記,包含很多腦洞的想法,各位客官多多包涵,也希望大家能夠多多指教晚輩
發佈了34 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章