Servlet
概念:運行在服務器端的小程序
Servlet
接口:定義了java類被瀏覽器訪問到的規則
使用步驟:
-
創建javaEE項目
-
定義一個類,實現Servlet接口
public class MyServlet implements Servlet
-
實現接口的抽象方法
-
配置Servlet,在
web.xml
中配置:實例代碼:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <!--Servlet實現類名--> <servlet-name>MyServlet</servlet-name> <!--全類名--> <servlet-class>ChenXing.MyServlet</servlet-class> </servlet> <servlet-mapping> <!--Servlet實現類名--> <servlet-name>MyServlet</servlet-name> <!--/Servlet實現類名--> <url-pattern>/MyServlet</url-pattern> </servlet-mapping> </web-app>
Servlet
的生命週期
-
被創建:執行
init()
方法,只能執行一次- 設置Servlet被創建的時間:(在
<servlet>
標籤下設置)- 第一次訪問時被創建:
<load-on-startup>
的值爲負數 - 在服務器被啓動時被創建:
<load-on-startup>
的值爲0或正整數
- 第一次訪問時被創建:
注意:
- 一個
Servlet
在內存只能存在一個對象 - 多個用戶同時訪問時,可能存在線程安全問題
- 解決:儘量不要在
Servlet
中定義成員變量,即使定義了成員變量,也不要修改值
- 設置Servlet被創建的時間:(在
-
提供服務:執行
Service()
方法,執行多次- 每次訪問
Servlet
時,Service()
方法都會被調用一次
- 每次訪問
-
被銷燬:執行
destroy()
方法,只執行一次- 當服務器正常關閉時,用於釋放資源
Servlet3.0:
好處:支持註解配置。不需要web.xml
使用步驟:
- 創建javaEE項目,選擇
Servlet
的版本3.0以上,可以不創建web.xml
- 定義一個類,實現
Servlet
接口 - 實現接口中的抽象方法
- 在類上使用
@WebServlet
註解,進行配置@WebServlet("資源路徑")
:資源路徑是自定義的訪問路徑
實例代碼
package ChenXing;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/ChenXing")
public class MyServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("開始!!!");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//提供服務的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("服務器結束!");
}
}
Servlet
的體系結構
Servlet
接口 —— 接口
| 繼承
GenericServlet
—— 抽象類
| 繼承
HttpServlet
—— 抽象類
GenericServlet
抽象類:將Servlet
接口中其他的方法做了默認空實現,只能將Service()
方法作爲抽象HttpServlet
抽象類:對http協議的一種封裝,簡化操作- 定義類繼承
HttpServlet
- 複寫
doGet()
或doPost()
方法
- 定義類繼承
Servlet
相關配置
urlparttern:Servlet
訪問路徑- 一個
Servlet
可以定義多個訪問路徑:@WebServlet({"/路徑1","/l路徑2","/路徑3"})
- 路徑定義規則:
/xxx
:路徑匹配"/xxx/xxx"
:多層路徑,目錄結構*.do
:擴展名匹配
- 一個