Servlet:html
一、概念:Servlet:server applet ,運行在服務器端的小程序。web
瀏覽器在訪問服務器的動態資源時,訪問的是具備邏輯性的Java代碼(Java類),而這裏的Java類依 賴於服務器才能運行(tomcat執行它),而這些Java類須要遵循一些規則,tomcat才能識別它並執行它,而這些規則就是Servlet。小程序
* Servlet就是一個接口,定義了Java類能被瀏覽器訪問到(tomcat識別)的規則。瀏覽器
二、快速入門:tomcat
一、建立JavaEE項目。安全
二、定義一個類,實現Servlet接口。服務器
三、實現接口中的抽象方法。app
四、配置Servlet:url
<servlet> <servlet-name>demo1</servlet-name> <servlet-class>servlet.ServletDemo1</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping>
三、Servlet執行原理。spa
一、http://localhost:8080/Tomcat/demo1 瀏覽器訪問服務器,並試圖獲取資源。
二、查找web.xml,看<url-pattern>裏有沒有demo1
三、若是有,找到對應<servlet-class>全類名。
四、tomcat將該類的字節碼文件加載進內存,並建立其對象。
五、調用該對象的方法。
四、Servlet中的生命週期。
一、被建立:執行 init 方法,只執行一次。
* Servlet何時被建立?
* 默認,第一次訪問時,Servlet被建立。
* 能夠配置Servlet的建立時機。
一、第一次被訪問時建立:<load-on-startup>的值爲負數。
二、服務器啓動時建立:值爲0或正數。
* Servlet的 init 方法,只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的。因此在多個用戶訪問時,可能存在線程安全問題。
* 解決:儘可能不要在Servlet中定義成員變量。即便定義了,不要對其修改值。
二、提供服務:執行service 方法,執行屢次。
* 每次訪問Servlet時,service方法被調用一次
三、被銷燬:執行 destroy 方法,只執行一次。
* 服務器關閉時(正常關閉),在Servlet銷燬以前被執行,通常用於釋放資源。
四、Servlet3.0.
好處:支持註解配置。能夠不用web.xml。
步驟:一、建立JavaEE項目,選Servlet3.0及以上版本,可不建立web.xml
二、定義類實現接口,重寫方法。
三、類上使用@WebServlet 註解來配置:@WebServlet("資源路徑")。
五、IDEA和tomcat的相關配置。
一、IDEA會爲每一個tomcat部署的項目單獨創建一份配置文件。
* 查看控制檯的 Using CATALINA_BASE:
二、項目有兩個地方存儲:工做空間項目 和 tomcat部署的web項目。
* tomcat真正訪問的是 「tomcat部署的web項目「 ,該項目對應着工做空間項目的web目錄下的全部資源。
三、tomcat斷點調試:點小蟲子來啓動debug。
六、Servlet體系結構。
Servlet接口 <---GenericServlet 抽象類 <-- HttpServlet 抽象類。
*GenericServlet:將Servlet接口的其餘方法做了默認實現,只將service()方法做爲抽象方法,因此之後定義Servlet類時,能夠繼承該抽象類,實現service()方法便可。
*HttpServlet :對http協議的一種封裝,簡化操做(判斷請求類型) 經常使用
實現:一、定義類繼承HttpServlet 二、複寫doGet/doPost 方法。
七、Servlet相關配置。
一、urlPartten:Servlet訪問路徑。
* 一個Servlet能夠定義多個訪問路徑。
* 路徑定義規則:一、/XXX 二、/xxx/xxx 三、*.do
八、HTTP。
一、概念:Hyper Text Transfer Protocol 超文本傳輸協議。
傳輸協議:定義了客戶端和服務器通訊時,發送數據的格式。
* 特色:一、基於TCP/IP的高級協議。
二、默認端口號:80
三、基於請求/響應模型的: 一次請求對應一次響應。
四、無狀態的 :每次請求之間相互獨立,不能交互數據。
二、請求消息數據格式。
一、請求行:請求方式 請求url 請求協議/版本 : GET /login.html HTTP/1.1
二、請求頭:瀏覽器告訴服務器一些信息。 請求名稱:請求值
常見的請求頭:一、User-Agent:告訴服務器瀏覽器的版本信息。
二、Referer:告訴服務器,當前請求從哪裏來。做用:防盜鏈、統計。
三、請求空行:空行,用來分隔。
四、請求體(正文):封裝POST請求消息的請求參數的。