今天來講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的方法,常用就是doGet和doPost,不要覆蓋service。
案例:ServletDemo2 繼承自HttpServlet的ServletDemo2的查找順序
五、Servlet生命周期
出生——活着——死亡,從生到死的一個過程(人有,內存中的對象也有)
出生:請求到達Servlet時,對象就創建出來,並且初始化成功。只出生一次,就放到內存中。
活着:服務器提供服務的整個過程中,該對象一直存在,每次只是方法service方法。
死亡:當服務停止時,或者服務器掛機時,對象消亡。
單例模式:只有一個對象實例。Servlet就是單例的,只有一個實例。
六、Servlet線程安全
1 Servlet不是線程安全的。
注意:在Servlet中盡量避免使用全局變量,但不是絕對。請參看HttpServlet的service(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 生命周期
出生——活着——死亡
出生: 應用一加載,該對象就被創建出來了。只有一個實例對象。
(Servlet和ServletContext都是單例的)
活着:只要應用一直提供服務,該對象就一直存在。
死亡:應用被卸載(或者服務器掛了),該對象消亡。
4 域對象的概念
該對象有一個作用域(就是使用的范圍),是web應用中最大的作用域,叫application域。每個應用只有一個application域。
如何往域中存放參數及如何獲取域中的參數
5 如何獲取全局參數
針對ServletContext配置的參數就是全局參數
Servlet類視圖全圖:
6 ServletContext的一些細節
1 請求轉發(基於ServletContext)
請求轉發是服務器的行為,服務器內部自己去請求下一個地址,瀏覽器地址欄不會發生變化。
2 使用ServletContext獲取文件路徑,實現下載
使用的方法是context.getRealPath();
3 讀取配置文件的各種方式(.properties)
InputStream
ResourceBundle
ClassLoader
參看:day07_01_servlet/ServletDemo12
