帶你深入瞭解 servlet—解決亂碼問題!

技術 web前端開發學習 web前端開發學習 2017-10-31

夥伴們!

今天我們來繼續分享知識點了哈!

Get 和 Post 請求?

首先給大家演示一下 Get 請求!

Get 請求有兩種方式:

一種方式是:

使用表單,既可以不指定 <form> 標籤的 method 屬性(默認的 HTTP 方法是get ),也可以明確指定 <form> 標籤的 method屬性為 get

帶你深入瞭解 servlet—解決亂碼問題!

頁面效果:

有點醜

帶你深入瞭解 servlet—解決亂碼問題!

帶你深入瞭解 servlet—解決亂碼問題!

輸入賬號密碼點擊登錄

帶你深入瞭解 servlet—解決亂碼問題!

一種方式是

直接使用超鏈接,超鏈接總是使用 GET 請求,示例如下。

帶你深入瞭解 servlet—解決亂碼問題!

帶你深入瞭解 servlet—解決亂碼問題!

直接點擊超鏈接就可以進入了

帶你深入瞭解 servlet—解決亂碼問題!

這是在 Servlet 中的 doGet 方法的代碼

帶你深入瞭解 servlet—解決亂碼問題!

下面是 post 方式

帶你深入瞭解 servlet—解決亂碼問題!

效果

帶你深入瞭解 servlet—解決亂碼問題!

Servlet 中 doPost 方法的代碼

帶你深入瞭解 servlet—解決亂碼問題!

表單提交數據 Get 請求和 Post 請求的區別?

從安全性看

Get < Post,Get 提交的數據會在瀏覽器的地址顯示。

get 方式

帶你深入瞭解 servlet—解決亂碼問題!

post 方式

帶你深入瞭解 servlet—解決亂碼問題!

就好像我們去超市買東西

Get:不用袋子裝,提在手裡,別人一眼就能看到我買的什麼。

Post:用袋子裝起來,別人只看到我提了一個袋子,不知道袋裡裝的什麼。

從提交的內容大小看

Get < Post,Get 提交的數據不能大於2k,而 Post 提交的數據理論上不受限制,但是實際編程中建議不要大於64K。

從請求響應速度看

Get > Post,Get 要求服務器立即處理請求,而post請可能形成一個隊列請求。

Servlet 的中文亂碼問題

這個問題其實在我們的代碼中已經解決了!

解決的方法就是統一編碼

1.Request編碼和response編碼

帶你深入瞭解 servlet—解決亂碼問題!

2.html頁面編碼設置為utf8

帶你深入瞭解 servlet—解決亂碼問題!

3.Conf目錄 Server.xml

帶你深入瞭解 servlet—解決亂碼問題!

一般來說三種方式就可以把亂碼問題解決了

4.Windows->preference->General->workspace

帶你深入瞭解 servlet—解決亂碼問題!

5.以 get形成在瀏覽器中請求出現亂碼

在地址欄中輸入默認編碼是 gbk,而 get 傳參是要先編碼為 iso8859-1 再傳,所以要先用 iso-8859-1 解碼,再用 utf8 編碼為一個新的字符。

帶你深入瞭解 servlet—解決亂碼問題!

以上就是我知道的解決亂碼的方法了!希望可以幫助到夥伴們

小夥伴們要是有更好的辦法也歡迎留言呀!

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");

就會報錯:

帶你深入瞭解 servlet—解決亂碼問題!

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

帶你深入瞭解 servlet—解決亂碼問題!

ServletTwo

帶你深入瞭解 servlet—解決亂碼問題!

在控制檯查看結果

帶你深入瞭解 servlet—解決亂碼問題!

第二種方法是用 web.xml 的方式配置!

注意要把註解方式刪掉

帶你深入瞭解 servlet—解決亂碼問題!

結果

帶你深入瞭解 servlet—解決亂碼問題!

好的夥伴們

今天的知識點就分享這麼多了

那麼再見了

相關推薦

推薦中...