Javaweb學習筆記3—Serverlet


今天來講javaweb的第三個階段學習。

老規矩,首先先用一張思維導圖來展現今天的博客內容。

ps:我的思維是用的xMind畫的,如果你對我的思維導圖感興趣並且想看到你們跟詳細的備注信息,請點擊下載

另外:如果圖看不清的話請右擊---在新窗口中打開會清楚很多。

一、Servlet概述

        1 Servlet是什么?

            是sun公司提供一套規范,用於接受客戶瀏覽器發出的請求,響應給客戶瀏覽器。是運行在服務端一個小程序。

        2 Servlet入門:Servlet是一個接口,要想實現Servlet功能必須實現該接口或者繼承該接口的實現類。

            已知實現類:GenericServlet

            Servlet接口中的方法:

            init(ServletConfig) 初始化

            service(ServletRequest,ServletResponse) 核心方法

            destroy() 銷毀

二、Servlet編碼步驟

        主要目的:為了了解Servlet從無到有,到能運行訪問的一個過程

第一步:編寫

        1 編寫FirstServlet實現Servlet接口或者繼承GenericServlet

第二步:編譯    

2 編譯FirstServlet

        直接用javac命令編譯servlet會有問題,需要設置classpath,加入servlet-api.jar

        該jar存在於tomcat/lib/

    第三步:配置

3 配置Servlet,使其生效

            配置Servlet,是針對應用而言的,在web.xml中配置

        注意:web.xml文件必須另存為UTF-8格式編碼的

    第四步:部署

        

4 部署到Tomcat,訪問http://localhost:8080/firstservlet/FirstServlet

        

        明確 規范(sun) 服務器(tomcat) 我們的應用之間的關系

        

三、Servlet執行過程

    1 客戶瀏覽器——Tomcat服務器——應用——應用的配置(web.xml)——Servlet——Servlet執行完成響應客戶瀏覽器

    

四、Servlet編碼方式

        1 繼承GenericServlet類,是javax.servlet包下的一個抽象類

        案例:ServletDemo1 了解創建一個Servlet是兩步,第一步建類,第二部映射

        2 繼承HttpServlet類,是javax.servlet.http包下面的一個抽象類,是GenericServlet的子類。

 

注意:(重要) 我們在繼承HttpServlet時,只需要覆蓋doxxx的方法,常用就是doGetdoPost,不要覆蓋service

        案例:ServletDemo2 繼承自HttpServletServletDemo2的查找順序

        

五、Servlet生命周期

        出生——活着——死亡,從生到死的一個過程(人有,內存中的對象也有)

        出生:請求到達Servlet時,對象就創建出來,並且初始化成功。只出生一次,就放到內存中。

        活着:服務器提供服務的整個過程中,該對象一直存在,每次只是方法service方法。

        死亡:當服務停止時,或者服務器掛機時,對象消亡。

        單例模式:只有一個對象實例。Servlet就是單例的,只有一個實例。

        

六、Servlet線程安全

        1 Servlet不是線程安全的。

        

        注意:在Servlet中盡量避免使用全局變量,但不是絕對。請參看HttpServletservice(HttpServletRequest,HttpServletRequest)方法。

七、Servlet注意事項

        1 映射方式:

            方式1:通配符+固定結尾格式 *.do

            方式2/開頭+通配符             /servlet/*

            方式3:指名道姓    (最常用)     /servlet/ServletDemo    

            方式1和方式2之間是有一定的區別:就是優先級的問題。

            方式3的優先級最高,其次是以/開頭的,最后才是*.do方式。

        2 多路徑映射:

            url-pattern可以映射多個地址

            

    3 配置啟動服務時,自動創建servlet

load-on-startup元素標記容器

是否在啟動的時候就加載這個servlet(實例化並調用其init()方法)

        

使用:<load-on-startup>啟動順序,必須是正整數,且不能重復</load-on-startup>來設置服務器啟動時創建servlet對象

    

    4 默認Servlet

            當我們訪問的資源,在web.xml中找不到對應的映射時,這個時候會去找默認的Servlet,該Servlet由服務器提供,Tomcat服務器的默認Servlet在:

        apache-tomcat-7.0.57-src.zip\apache-tomcat-7.0.57-src\java\org\apache\catalina\servlets

        一切都是Servlet

八、Servlet參數配置:ServletConfig

        1 ServletConfig 是什么?

            它是Servlet的配置參數對象,每個Servlet都一個自己的ServletConfig

        2 ServletConfig 怎么獲取?

            由服務器容器提供,我們直接使用即可。每次覆蓋init方法的時候,注意:覆蓋的是沒有參數的init方法。

        3 如何配置ServletConfig參數?

 

            <init-param>

                <param-name></param-name>

                <param-value></param-value>

            </inti-param>

            要寫在<servlet>元素內

            

        4 如何使用ServletConfig得到配置好的參數

        

        

九、ServletContext

        1 ServletContext是什么?

            它是應用的全局上下文對象,每個應用只有一個ServletContext對象。

每個應用都可以有多個Servlet,多個Servlet之間的通信就是通過ServletContent對象獲取。

        2 如何獲取ServletContext

                

 

        3 ServletContext 生命周期

            出生——活着——死亡

            出生: 應用一加載,該對象就被創建出來了。只有一個實例對象。

                 (ServletServletContext都是單例的)

            活着:只要應用一直提供服務,該對象就一直存在。

            死亡:應用被卸載(或者服務器掛了),該對象消亡。

        4 域對象的概念

            該對象有一個作用域(就是使用的范圍),是web應用中最大的作用域,叫application域。每個應用只有一個application域。

        

如何往域中存放參數及如何獲取域中的參數

        5 如何獲取全局參數

             針對ServletContext配置的參數就是全局參數

            

                

        Servlet類視圖全圖:

        

        6 ServletContext的一些細節

            1 請求轉發(基於ServletContext

            請求轉發是服務器的行為,服務器內部自己去請求下一個地址,瀏覽器地址欄不會發生變化。

            

 

            2 使用ServletContext獲取文件路徑,實現下載

            使用的方法是context.getRealPath();

            

            3 讀取配置文件的各種方式(.properties)

                InputStream

                ResourceBundle

                ClassLoader

                 參看:day07_01_servlet/ServletDemo12


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM