Servelet

1.什麼是servelet:
Servelet本質上是一段Java程序,和以前的Java程序不一樣的是,Servlet程序沒法獨立運行,須要將Servlet程序放在服務器中(好比tomcat服務器),由服務器調用才能夠執行。-----Servlet: 服務器端的Java程序.html

2.Servelet做用:
其做用是對服務器接收過來的請求進行處理(做用爲處理請求)
image.pngweb

繼承HttpServlet類,默認會覆蓋doGet方法和doPost方法,兩個方法的做用爲:瀏覽器

  • doGet方法:當瀏覽器發送請求的方式爲GET提交時, 將會調用doGet方法來處

理請求tomcat

  • doPost方法:當瀏覽器發送請求的方式爲POST提交時,

將會調用doPost方法來處理請求
提示:若是當GET提交和POST提交處理代碼相同時,能夠將代碼寫在其中一個方
法裏(例如寫在doGet中),並在另一個方法(例如doPost)中調這個方法。這樣
一來,無論是GET提交仍是POST提交,最終doGet方法都會執行,都會對請求進行處理!!服務器

Servlet在web.xml中的配置
建立servelet時,會自動配置web.xml文件(若是是複製servelet文件,配置文件不會跟着一塊兒複製,需本身配置)(3.0以上版本建立web工程不自動添加web.xml)
image.png
關於上面的配置信息:
a) Eclipse每建立一個Servlet,就會在web.xml文件中添加兩個標籤:<servlet>和
<servlet-mapping>標籤(能夠將這兩個標籤當作一個組的標籤)
b) <servlet>和<servlet-mapping>標籤內都會有一個<servlet-name>標籤,標籤的
內容能夠更改,但要求更改後的這兩個<servlet-name>標籤的內容也必須一致。
c) <servlet-class>標籤用於配置Servlet類的全限定類名(即包名+類名)
須要注意:若是在建立Servlet後修改了Servlet類的名稱,這個地方也要一塊兒更
改,不然將會出現"ClassNotFoundException" 即類找不到異常
d) <url-pattern>標籤用於配置瀏覽器以什麼路徑訪問當前Servlet(即Servlet對外
訪問的路徑),默認的路徑是:/類名
例如:上面爲HelloServlet配置的<url-pattern>爲/HelloServlet,所以咱們在瀏覽
器中的訪問路徑則爲:
http://主機名/web項目訪問路徑...app

request和response介紹
request:封裝了瀏覽器發送給服務器的請求信息(請求行、請求頭、請求實體等)
請求參數:超連接後面經過問號提交的數據,都是請求參數。
image.png
請求參數時的中文亂碼:
get:tomcat8.0之後提交不會
post:request.setCharacterEncoding("utf-8");(通知服務器在接收POST提交的參數時,使用utf-8編碼來接收!)post

做爲域對象使用
request對象上的map集合以及request對象的所在範圍稱之爲域對象
存數據:request.setAttribute(String attrName, Object attrValue);
-- 往request域中存入一個域屬性,屬性名(key)只能是字符串,屬性值(value)能夠是任意類型。
取對象:request.getAttribute(String attrName);
-- 根據屬性名(key)獲取對應的屬性值(value)。返回的是一個Object類型的對象。編碼

請求轉發(forward)
(1)轉發是一次請求,一次響應
(2)請求轉發先後,瀏覽器的地址欄地址不會發生變化。(瀏覽器--訪問--> A --轉發--> B,地址欄地址始終指向A的地址)
(3)請求轉發先後的兩個資源必須屬於同一個Web應用,不然將沒法進行轉發。(A--轉發-->B,A和B必須屬於同一個Web應用!)
(4)在轉發時,能夠帶數據到目的地(好比,從A轉發到B,能夠從A帶數據給B,須要配合域對象才能夠
image.png
image.pngurl

response:封裝服務器要發送給瀏覽器的響應信息(狀態
行、響應頭、響應實體),在service方法執行完後,服務器再將response中的數據取出,按照HTTP協議的格式發送給瀏覽器。
向客戶端發送數據:
PrintWriter out = response.getWriter();
亂碼問題:
在響應數據以前,通知服務器使用utf-8發送數據。
response.setContentType( "text/html;charset=utf-8" );spa

實現重定向(redirct)
(1)重定向是兩次請求、兩次響應
(2)重定向先後,瀏覽器的地址欄地址會發生變化。(由於兩次請求都是經過瀏覽器發起,瀏覽器知道這個跳轉的過程,所以地址欄地址會變化)
(3)重定向先後的request對象不是同一個(由於重定向是兩次請求,服務器會根據兩次請求建立兩個不一樣的request對象,request對象不是同一個,也就不能在重定向時經過request帶數據到目的地。)
(4)重定向先後的兩個資源能夠是來自不一樣的web應用,甚至能夠是來自不一樣的服務器。(進行跳轉的兩個資源之間沒有限制)
image.png
實現代碼:response.sendRedirect(所重定向到資源的URL地址);

請求轉發(forward)和重定向(redirect)的區別?
(1)請求轉發是一次請求,一次響應; 而重定向是兩次請求兩次響應
(2)請求轉發先後地址欄地址不會發生變化; 而重定向先後地址欄地址會發生變化
(3)請求轉發先後的request對象是同一個,能夠配合request域對象帶數據到目的地;而重定向先後的request對象不是同一個, 不能結合request域對象在重定向先後帶數據.
(4)請求轉發要求兩個資源必須屬於同一個Web應用; 而進行重定向的兩個資源能夠是同一個Web應用,也能夠不是同一個Web應用,甚至能夠是來自於不一樣的主機或服務器.

何時用請求轉發(forward)?何時用重定向(redirect)?(1)若是但願跳轉先後地址欄地址不會發生變化, 只能使用轉發; 若是但願跳轉先後地址欄地址會發生變化, 只能使用重定向(2)若是但願在跳轉先後, 可以經過request對象帶數據到目的地, 只能使用轉發(3)若是僅僅是作一個跳轉,沒有其餘要求,此時推薦使用轉發(轉發是一次請求,一次響應,能夠減小訪問服務器的次數,下降服務器的壓力)

相關文章
相關標籤/搜索