1. 程式人生 > >小白的進階之路14

小白的進階之路14

get請求 bubuko 獲取請求參數 在服務器 取數 public 就是 9.png 區域

---恢復內容開始---

servlet 是Javaweb的三大組件之一。

三大組件:servlet,filter,lisoner

客戶端通過服務器想瀏覽器發出請求。

我們所寫的AServlet、BServlet,都是由我們實現servlet接口的實現類。

servlet是單例的,一個類一個servlet,他們的功能是不同的。但他是線程不安全的,而且效率是高的。有可能出現一個servlet處理同時處理多個請求,所以最好不要在servlet中隨便創建成員變量,有可能出現一個線程是讀操作,另一個線程是寫操作,這樣就出現線程不安全的問題。但如果是只讀,或者只寫操作還可以。

servlet 類我們寫(比如執行什麽功能),但是對象由Tomcat創建。

servlet完成的三大塊:

獲取請求數據、 請求處理、完成響應。

servlet的三大生命周期方法:init(),//第一次請求servlet則創建。destroy()//Tomcat關閉則死亡。

service(),,,//可以多次調用,每次處理請求都會調用。

而這些方法都是由Tomcat調用,調用destory則servlet死亡,關閉Tomcat則死亡。

tomcat怎麽訪問servlet,servlet只是一個java類???

需要用xml配置文件,將servlet和URL的路徑綁在一起。

技術分享圖片

在xml配置中,獲取初始化參數。

技術分享圖片

獲取初始化參數

技術分享圖片

技術分享圖片

需要調用service時,Tomcat將service的兩個參數強轉成httpservletrequest,和 httpservletresponse類型。然後通過httpservletreques得到當前的請求方式,是post還是get,如果是post,則調用doPost方法,如果是get,則調用get方法。

技術分享圖片

4打頭,是客戶端的錯誤。

技術分享圖片

一般情況下,servlet的創建時第一次被調用的時候,但是可以設置xml文件實現服務器開啟時就創建。

技術分享圖片

圖中的<load-on-startup> 表示第一次開啟的時候就創建的順序。

ServletContext==application

生命周期在服務器開啟時創建,服務器關閉時死亡。

一個項目只有一個servletcontext對象。

servletconfig()。getservletContext();

正常我們創建一個servlet會繼承httpservlet

public void servlet extends httpservlet(){

………………}

但其實,httpservlet繼承了servletconfig接口。

技術分享圖片

javaweb中有四大域對象,即pageContext,servletContext,servletrequest,httpsession。

域對象是什麽?有什麽作用?

域對象不需要創建直接在servlet區域中調用,作用是保存數據以及servlet之間的數據傳遞。所以域對象有兩大功能,第一存數據,第二取數據。

技術分享圖片

servletcontext可以設置全局的初始化參數,此初始化參數不屬於任何一個servlet

下面是一個小練習:

訪問量的統計。

第一次訪問的時候建立一個int型的變量在servletcontext這個對象中,之後的每次訪問都+1;

首先,第一次訪問的時候用setattribute()這個函數來創建一個屬性,

技術分享圖片

將輸入流轉化為字符串,需要用到commons.ioUtils這個工具類。

URI=項目名+servlet路徑:、/goods/AServlet

URL:不包含路徑的參數的請求路徑。即?之後全沒有

技術分享圖片

獲取請求參數,用戶向服務器發出請求,如果請求參數在請求體中,則是post請求,如果是URL中,則是get請求。

技術分享圖片

其中第一個和最後一個最為常用。

轉發是一個請求,跨多個servlet,但是使用一個request和response域。

技術分享圖片

這是轉發,request.getRequestDispatcher("/TwoServlet").forword(request,reponse);

請求轉發是只顯示轉發至的servlet響應體。

在轉發中,留頭不留體,比如AServlet轉發至BServlet,在A中設置響應頭和響應體,在B中設置響應體,那麽,A中只會留頭(為了證明|A參與)不會留體,只會留B中的體。、

轉發地址欄不會發生變化,如果想地址欄發生變化,那麽必須使用重定向。如果想在下一個servlet中獲得request域中的數據,那麽必須使用轉發。

服務器默認編碼是iso8859-1;而瀏覽器默認的編碼是gbk;但是Tomcat8的默認編碼是utf-8;

響應編碼:不亂碼,只需加上response.setContextType("text/thml";"charset=utf-8");

請求編碼:頁面是什麽編碼,那麽獲得請求參數就是什麽編碼。在獲得請求參數之前,要加上request.setCharacterEncoding("utf-8");然後在用request.getParameter("XXX");

技術分享圖片

技術分享圖片

以“/”開頭,則是絕對路徑,絕對路徑要加項目名+。。。

不以“/”開頭,則是相對路徑

---恢復內容結束---

小白的進階之路14