夥伴們!
今天我們來繼續分享知識點了哈!
Get 和 Post 請求?
首先給大家演示一下 Get 請求!
Get 請求有兩種方式:
一種方式是:
使用表單,既可以不指定 <form> 標籤的 method 屬性(默認的 HTTP 方法是get ),也可以明確指定 <form> 標籤的 method屬性為 get
頁面效果:
有點醜
輸入賬號密碼點擊登錄
一種方式是
直接使用超鏈接,超鏈接總是使用 GET 請求,示例如下。
直接點擊超鏈接就可以進入了
這是在 Servlet 中的 doGet 方法的代碼
下面是 post 方式
效果
Servlet 中 doPost 方法的代碼
表單提交數據 Get 請求和 Post 請求的區別?
從安全性看
Get < Post,Get 提交的數據會在瀏覽器的地址顯示。
get 方式
post 方式
就好像我們去超市買東西
Get:不用袋子裝,提在手裡,別人一眼就能看到我買的什麼。
Post:用袋子裝起來,別人只看到我提了一個袋子,不知道袋裡裝的什麼。
從提交的內容大小看
Get < Post,Get 提交的數據不能大於2k,而 Post 提交的數據理論上不受限制,但是實際編程中建議不要大於64K。
從請求響應速度看
Get > Post,Get 要求服務器立即處理請求,而post請可能形成一個隊列請求。
Servlet 的中文亂碼問題
這個問題其實在我們的代碼中已經解決了!
解決的方法就是統一編碼:
1.Request編碼和response編碼
2.html頁面編碼設置為utf8
3.Conf目錄 Server.xml
一般來說三種方式就可以把亂碼問題解決了
4.Windows->preference->General->workspace
5.以 get形成在瀏覽器中請求出現亂碼
在地址欄中輸入默認編碼是 gbk,而 get 傳參是要先編碼為 iso8859-1 再傳,所以要先用 iso-8859-1 解碼,再用 utf8 編碼為一個新的字符。
以上就是我知道的解決亂碼的方法了!希望可以幫助到夥伴們
小夥伴們要是有更好的辦法也歡迎留言呀!
HttpServletRequest與HttpServletResponse
Web 服務器收到客戶端的 http 請求,會針對每一次請求,分別創建一個用於代表請求的 Request 對象和代表響應的 Response 對象。
Request 和 Response 對象即代表請求和響應,那我們要獲取客戶機提交過來的數據,只需要找到 Request 對象就行了。要向客戶機輸出數據,只需要找到Response 對象就行了。
HttpServletRequest
該對象表示瀏覽器(HTTP 請求),當web服務器得到該請求後,會把請求信息封裝成一個 HttpServletRequest 對象。
常用的方法介紹:
lgetRequestURL():返回客戶端發出請求時的完整URL。
lgetRequestURI方法返回請求行中的資源名部分。
lgetQueryString方法返回請求行中的參數部分(參數名+值)。
該函數可以獲取請求部分的數據比如
//localhost/web名?username=abc&pwd=123
request.getQueryString();就會得到 username=abc&pwd=123
getRemoteAddr方法返回發出請求的客戶機的IP地址
getRemoteHost方法返回發出請求的客戶機的完整主機名
getRemotePort方法返回客戶機所使用的網絡端口號
客戶機的端口號是隨機選擇的,web服務器的端口號是一定的
getLocalPort方法返回web服務器所使用的網絡端口號
getLocalAddr方法返回WEB服務器的IP地址。
getLocalName方法返回WEB服務器的主機名
HttpServletResponse
HttpServletResponse 對象代表服務器的響應。這個對象中封裝了向客戶端發送數據、發送響應頭,發送響應狀態碼的方法。
重點是要知道GetWrite() 與getOutputStream() 的區別?
getWrite()用於向客戶機回送字符數據。
getOutputStream()返回的對象,可以回送字符數據,也可以回送字節數據(二進制數據)。
如何選擇?
如果我們是回送字符數據,則使用 PrintWriter對象 ,效率高
如果我們是回送字節數據(binary date) ,則只能使用OutputStream
注意:
二個流不能同時使用。
OutputStream os=response.getOutputStream();
os.write("Hello,World".getBytes());
PrintWriter out=response.getWriter();
out.println("hello");
就會報錯:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
load-on-startup
1.load-on-startup 元素標記容器是否在啟動的時候就加載這個 servlet(實例化並調用其init()方法)
2.它的值必須是一個整數,表示 servlet 應該被載入的順序
3.當值為0或者大於0時,表示容器在應用啟動時就加載並初始化這個servlet
4.正數的值越小,該servlet的優先級越高,應用啟動時就越先加載
5.當值小於0或者沒有指定時,則表示容器在該 servlet 被選擇時才會去加載
6.當值相同時,容器就會自己選擇順序來加載
有兩種方式:
首先創建兩個Servlet
第一種方式是直接在代碼中用註解的方法
ServletOne
ServletTwo
在控制檯查看結果
第二種方法是用 web.xml 的方式配置!
注意要把註解方式刪掉
結果
好的夥伴們
今天的知識點就分享這麼多了
那麼再見了