servlet總體簡單介紹

       Servlet是JavaWeb的三大組件之一(Servlet、Filter、Listener),它屬於動態資源。Servlet的作用是處理請求,服務器會把接收到的請求交給Servlet來處理,在Servlet中通常需要:接收請求數據;處理請求;完成響應。例如客戶端發出登錄請求,或者輸出註冊請求,這些請求都應該由Servlet來完成處理。Servlet需要我們自己來編寫,每個Servlet必須實現javax.servlet.Servlet接口。Servlet對象駐留在服務器內存中。

 

動態WEB現在的實現手段非常多,較爲常見的有以下幾種:

       Microsoft ASP、ASP.NET

       PHP: PHP開發速度很快,功能強大,跨平臺(平臺指的就是運行的操作系統),而且代碼也簡單

       JAVA Servlet/JSP :Servlet/JSP技術的性能也是非常高的,不受平臺的限制,各個平臺基本上都可以使用。而且在運行中是使用多線程的處理方式,所以性能非常高。

SUN公司最早推出的WEB技術推出的是Servlet程序,Servlet程序本身使用的時候有一些問題,所有的程序是採用JAVA代碼+HTML的方式編寫的,即,要使用JAVA輸出語句,一行一行地輸出所有的HTML代碼,之後,SUN公司受到了ASP的啓發,發展出了JSP(Java Server Page),JSP某些代碼的編寫效果與ASP是非常相似的。這樣可以很方便地使一些ASP程序員轉向JSP的學習,加大市場的競爭力度。

 

Servlet:

       Java Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作爲來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。

       使用 Servlet,您可以收集來自網頁表單的用戶輸入,呈現來自數據庫或者其他源的記錄,還可以動態創建網頁。

在整個過程中的:

          

 

       該Servlet的作用是,接收form登錄表單發送過來的HTTP請求,並解析出請求中封裝的一些參數,然後在回寫到response響應當中去,最後在瀏覽器端顯示。

 

        對於一個 Servlet 類,我們日常最常用的方法是繼承自 HttpServlet 類,提供了 Http 相關的方法,HttpServlet 擴展了 GenericServlet 類,而 GenericServlet 類又實現了 Servlet 類和 ServletConfig 類。

        

      Servlet 創建於用戶第一次調用對應於該 Servlet 的 URL 時,但是您也可以指定 Servlet 在服務器第一次啓動時被加載。

        如果要開發一個可以處理HTTP請求的Servlet程序,則肯定要繼承HttpServlet類,而且在自定義的Servlet類中還要重寫HttpServlet類中提供的doGet()方法。Servlet程序本身也是按照請求和應答的方式進行的,所以在doGet()方法中定義了兩個參數,即HttpServletRequest和HttpServletResponse,用來接收和迴應用戶的請求

       HttpServlet有兩個特性是GenericServlet所不具備的:

              1.不用覆蓋service方法,而是覆蓋doGet或者doPost方法。在少數情況,還會覆蓋其他的5個方法。

              2.使用的是HttpServletRequest和HttpServletResponse對象。

       這個service方法的參數是HttpServletRequest對象和HttpServletResponse對象,剛好接收了上一個service方法傳過來的兩個對象。

        HttpServletRequest表示Http環境中的Servlet請求。它擴展於javax.servlet.ServletRequest接口,並添加了幾個方法。

       

        HttpServletRequest內封裝的請求:

              因爲Request代表請求,所以我們可以通過該對象分別獲得HTTP請求的請求行,請求頭和請求體。

 

注意: 不要重寫父類Httpservlet中的service()方法,因爲該方法會調用Httpservlet中私有的service()方法,而該私有的service()方法會根據不同的提交表單的方式,會調用相應的doGet()、doPost()、doHead()等方法。 我們去重寫這些不同的表單提交的方法即可。

       Servlet(接口) --> GenericServlet(抽象類/適配器) --> HttpServlet(功能抽象類/模板) --> (繼承HttpServlet,具體實現類,重寫其功能)

         一個servlet可以配置多個映射路徑(或者說:多個映射路徑可以指向同一個servlet),只要是name是一樣的就行

在web.xml中對servlet進行配置

 

       在前面我們講過,在service中使用的編碼解碼方式默認爲:ISO-8859-1編碼,但此編碼並不支持中文,因此會出現亂碼問題,所以我們需要手動修改編碼方式爲UTF-8編碼,才能解決中文亂碼問題,下面是發生亂碼的具體細節:

         

          解決post提交方式的亂碼:request.setCharacterEncoding("UTF-8");

          解決get提交的方式的亂碼:

                  parameter = newString(parameter.getbytes("iso8859-1"),"utf-8");

 

Servlet的生命週期:    實例化-->初始化-->服務->銷燬

       出生:(實例化-->初始化)第一次訪問Servlet就出生了(默認情況下)。(說明我可以改變它的出生時機,比如讓servlet在服務器啓動時就創建)

       活着:(服務)應用活着,servlet就活着。(Servlet是單實例,其中的service()方法是多線程的。)

       死亡:(銷燬)應用被卸載了,servlet就銷燬了。

     

     Servlet的生命週期有兩種情況,一般就是1,否則爲2

      init 方法被設計成只調用一次。它只在第一次創建 Servlet 時被調用,在後續每次用戶請求時不再調用。因此,它是用於一次性初始化    在初始化中也可以做一些關於它數據的相關初始化的事情

 

創建Servlet:

Class文件中創建:

 

創建一個servlet的時候要在web.xml中配置servlet, 配置的時候都是一對一對的配置的

 

服務器能夠認識你寫的代碼,同時能夠快速調用這個代碼

解決方法:按照服務器能夠認識的規範去書寫

 

Servlet的使用:

servlet就像一個接口一樣,寫好了規範,寫好了裏面有什麼方法,然後你按照這個規範去寫這個方法裏面的具體內容,但這個方法的聲明是固定的

只有按照這個流程去書寫servlet,服務器纔會認識和快速找到並調用這個類

第四步是讓服務器能夠找到此servlet類

其實是本質上就是

但不使用這種方式,而是使用別名可以使得暴露在外面的地址更安全,而不要直接把包名等地址漏在外面

    url絕對路徑, uri相對路徑

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章