1. 什麼是Servlet
我是理解爲Servlet
是Tomcat服務器
提供的接口
,我們只有實現Tomcat的這個接口,我們才能複寫接口裏面提供的方法.(可能有誤,望指正).
2. 配置Servlet
方法1:
- 在創建javaEE項目的時候點擊生成
web.xml
文件
- 在生成好的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