爲了方便標識可以這裏修改 Tomcat 的虛擬目錄
一、Servlet 執行原理
* 執行原理:
(1)當服務器接受到客戶端瀏覽器的請求後,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
(2)查找web.xml文件,是否有對應的<url-pattern>標籤體內容。
(3)如果有,則在找到對應的<servlet-class>全類名
(4)tomcat會將字節碼文件加載進內存,並且創建其對象
(5)調用其方法
二、Servlet 生命週期
- 被創建:執行init方法,只執行一次
* Servlet什麼時候被創建?
* 默認情況下,第一次被訪問時,Servlet被創建
* 可以配置執行Servlet的創建時機,在 web.xml 中修改
* 在<servlet>標籤下配置
(1) 第一次被訪問時,創建
* <load-on-startup>的值爲負數
(2)在服務器啓動時,創建
* <load-on-startup>的值爲0或正整數
<!--配置Servlet -->
<servlet>
<servlet-name>demo2</servlet-name>
<servlet-class>servlet.ServletDemo</servlet-class>
<!--指定Servlet的創建時機
1.第一次被訪問時創建
* <load-on-startup>負數</load-on-startup>
2.在服務器啓動時創建
* <load-on-startup>值爲0或正整數</load-on-startup>
-->
<load-on-startup>-5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo2</servlet-name>
<url-pattern>/demo2</url-pattern>
</servlet-mapping>
</web-app>
* Servlet的init方法,只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的
* 多個用戶同時訪問時,可能存在線程安全問題。
* 解決:儘量不要在Servlet中定義成員變量,即使定義了成員變量,也不要對修改值
- 提供服務:執行service方法,執行多次
* 每次訪問Servlet時,Service方法都會被調用一次。
- 被銷燬:執行destroy方法,只執行一次
* Servlet被銷燬時執行:服務器關閉時,Servlet被銷燬
* 只有服務器正常關閉時,纔會執行destroy方法。
* destroy方法在Servlet被銷燬之前執行,一般用於釋放資源
整體示例:
public class ServletDemo implements Servlet {
private int age = 3;
/**
* 初始化方法
* 在Servlet被創建時,執行。只會執行一次
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init.....");
}
/**
* 獲取ServletConfig對象
* ServletConfig:Servlet的配置對象
* @return
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* 提供服務方法
* 每一次Servlet被訪問時,執行。執行多次
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service.....");
int number = 3;
}
/**
* 獲取Servlet的一些信息,版本,作者等等。。
* @return
*/
@Override
public String getServletInfo() {
return null;
}
/**
* 銷燬方法
* 在服務器正常關閉時,執行,執行一次。
*/
@Override
public void destroy() {
System.out.println("destroy.....");
}
}