Java EE中的Servlet

1. 什麼是Servlet

我是理解爲ServletTomcat服務器提供的接口,我們只有實現Tomcat的這個接口,我們才能複寫接口裏面提供的方法.(可能有誤,望指正).

2. 配置Servlet

方法1:

  1. 在創建javaEE項目的時候點擊生成web.xml文件
    在這裏插入圖片描述
  2. 在生成好的web.xml文件進行配置
<servlet>
	<servlet-name>xxx</servlet-name>
	<servlet-class>cn.dmeo.web.servlet.ServletDemo</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>xxx</servlet-name>
	<url-pattern>/demo</url-pattern>
</servlet-mapping>
1. <servlet-name> ServletDemo </servlet-name>  
	  ServletDemo是類的別名, 不過一般直接寫成類名
	  
2. <servlet-class> cn.dmeo.web.servlet.ServletDemo </servlet-class>
		cn.dmeo.web.servlet.ServletDemo是類的路徑,
		也就說package(包) + .類名
		package : cn.dmeo.web.servlet
		類名: .ServletDemo
		
3. <servlet-mapping> 是給Servlet提供(映射)一個可供客戶端訪問的URI

4. <servlet-name>包裹的必須和自己上面定義的類別名相同

5. <url-pattern> servlet的映射路徑
  • 執行原理:
    1. 當服務器接收到客戶端瀏覽器的請求後, 會解析請求的url路徑,獲取訪問的Servlet的資源路徑.
    2. 查找web.xml文件,是否有對應的標籤內容.
    3. 如果有,則會找到對應的全類名
    4. tomcat會將字節碼文件加載進內存,並且創建其對象
    5. 調用其方法

3 . 實現Servlet接口之後

package cn.demo.web.servlet;

import javax.servlet.*;
import java.io.IOException;

public class ServletDemo implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
Servlet中的生命週期:
    1. 被創建: 執行init方法, 只執行一次
    	* Servlet什麼時候被創建?
			* 默認情況下,第一次被訪問時,Servlet被創建
			* 可以配置Servlet的創建時機
				* 在<servlet>標籤下創建
				1.第一次被訪問時,創建
                    * <load-on-startup>的值爲負數
                2.在服務器啓動時,創建
                    * <load-on-startup>的值爲0或正整數
		* Servlet的init方法,只執行一次覅, 說明Servlet在內存中只存在一個對象,Servlet是單例的
	        * 多個用戶同時訪問時, 可能存在線程安全問題.
	        * 解決: 儘量不要在Servlet中定義成員變量. 即使定義了成員變量, 也不要對修改值
	        
	2. 提供服務: 執行servlet方法, 執行多次
		* 每次訪問Servlet時, Servlet方法都會被調用一次
		
	3. 被銷燬: 執行destroy方法, 執行一次 
		* Servlet被銷燬是時執行. 服務器關閉時, Servlet被銷燬
		* 只有服務器正常關閉時,纔會執行destroy方法
		* destroy方法在Servlet被銷燬之前執行, 一般用於釋放資源

方法一非常不方便…所有提供Servlet 3.0的註解配置


方法2:

Servlet 3.0

	好處:  支持註解配置, 可以不需要web.xml

在這裏插入圖片描述
create web.xml 不要打勾

在類上使用@WebServlet註解, 進行配置
@WebServlet("資源路徑")
在這裏插入圖片描述
包名: javax.servlet.annotation.WebServlet;


Servlet的體系結構

		Servlet -- 接口
			|
		GenericServlet -- 抽象類
			|
		HttpServlet	 -- 抽象類
	* GenericServlet: 將Servlet接口中其它的方法默認空實現,只將service()方法作爲抽象
			* 將來定義Servlet類時,可以繼承GenericServlet, 實現service()方法即可
		
	* HttpServlet: 對http協議的一種封裝, 簡化操作
			1. 定義類繼承HttpServlet
			2. 複寫doGet/doPost方法

Servlet相關配置

	1. urlpartten: Servlet訪問路徑
		1. 一個Servlet可以定義多個訪問路徑 : @WebServlet({"/d4","/dd4","/ddd4"}) 
		2. 路徑的定義規則:
			1. /xxx
			2. /xxx/xxx: 多層路徑, 目錄結構
			3. *.do
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章