Servlet:server applet
1.概念:運行在服務器端的小程序。
* Servlet是一個接口,定義了Java類被瀏覽器訪問的規則。
* 我們自定義一個類,實現Servlet接口,複寫方法。
2.快速入門
1、創建JavaEE項目
2、定義一個類,實現Servlet接口
* public class ServletDemo1 implements Servlet
3、實現接口中的抽象方法
4、配置Servlet
* 在web.xml中配置
<!--配置Servlet -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
3.執行原理
1、當服務器接收到客戶端請求後,解析請求URL路徑,獲取訪問的Servlet的資源路徑。
2、查找web.xml文件,是否有對應的<url-pattern>標籤體內容。
3、如果有,再找到對應的<servlet-class>標籤體中的全類名。
4、tomcat會將字節碼文件加載到內存中,並且創建其對象。
5、調用其方法。
4.Servlet中的生命週期
1、被創建:執行init方法,只執行一次。
* Servlet什麼時候被創建?
* 默認情況下,第一次被訪問時,Servlet被創建
* 可以配置Servlet的創建時機。
* 在<servlet>標籤體中配置
1、第一次被訪問時,創建
* <load-on-startup> 值爲負
2、在服務器啓動時,創建
* <load-on-startup> 值爲0或正整數
* Servlet的init方法,只執行一次。說明一個Servlet在內存中只存在一個對象,Servlet是單例的。
* 多個用戶同時訪問時,可能存在線程安全問題。
* 解決方案:不在Servlet中定義成員變量。即使定義了,也不對其修改值。
2、提供服務:執行service方法,執行多次。
* 每次訪問Servlet時,service方法都會被調用一次。
3、被銷燬:執行destory方法,只執行一次。
* 只有服務器正常關閉時,才執行destory方法。
* destory方法在Servlet被銷燬之前執行,一般用於釋放資源。
5.Servlet3.0
* 優點:支持註解配置,不需要web.xml文件了。
* 步驟:
1、創建JavaEE項目,選擇Servlet3.0以上的版本,可以不創建web.xml文件。
2、定義一個類,實現Servlet接口。
3、複寫方法。
4、在類上使用@WebServlet註解,進行配置。
* @WebServlet("資源路徑")
* 底層代碼
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default "";//相當於<Servlet-name>
String[] value() default {};//代表urlPatterns()屬性配置
String[] urlPatterns() default {};//相當於<url-pattern>
int loadOnStartup() default -1;//相當於<load-on-startup>
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}
6.Servlet的體系結構
Servlet -- 接口
|
GenericServlet -- 抽象類
|
HttpServlet -- 抽象類
* GenericServlet抽象類:將Servlet接口中其他的方法做了默認空實現,只將service()方法作爲抽象方法。
* 將來定義Servlet類時,可以繼承GenericServlet,實現service()方法即可。
* HttpServlet 抽象類:對http協議的一種封裝,簡化操作。
* 將來定義Servlet類時,可以繼承HttpServlet,複寫doGet()/doPost()方法即可。
7.Servlet的相關配置
* urlpattern:Servlet的訪問路徑
1、一個Servlet課定義多個訪問路徑。
* 如,@WebServlet({"/d4","/dd4","/ddd4"})
2、路徑定義規則。
1、/xxx:路徑匹配
2、/xxx/xxx:多層路徑,目錄結構
3、*.do:擴展名匹配