Servlet概述
- 概念:
server applet,即運行在服務器端的小程序
2021-04-12_141553.jpg
需要遵守的規(guī)則(接口),就是servlet。
servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規(guī)則
自定義一個類,實現(xiàn)servlet接口,復寫方法
Servlet快速編寫
繼承Servlet的類并沒有創(chuàng)建對象,也沒有調(diào)用方法,單就被執(zhí)行
1.創(chuàng)建JavaEE項目
2.定義一個類,實現(xiàn)Servlet接口
public class ServletDemo1 implements Servlet
ps(Servlet繼承失敗解決:https://blog.csdn.net/weixin_41362471/article/details/109451690)
3.實現(xiàn)接口中的抽象方法(5個)
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>
Servlet執(zhí)行原理

2021-04-12_194536.jpg
xml文件中的全類名,基本都牽扯到反射。
1.當服務器收到客戶端瀏覽器請求后,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
2.查找
web.xml文件,是否有<url-pattern>標簽體內(nèi)容3.如果有,則找到對應的<servlet-class>全類名
4.tomcat會將字節(jié)碼文件加載進內(nèi)存,并且創(chuàng)建其對象(反射機制)
5.調(diào)用其方法(例如:service()方法)
Servlet中的生命周期
即5種方法中主要的:創(chuàng)建,提供服務,被銷毀3種方法
/*
初始化方法:用于加載資源
在Servlet被創(chuàng)建時執(zhí)行,只會執(zhí)行一次:
說明Servlet在內(nèi)存中只存在一個對象,即Servlet是單例的
問題:多個用戶同時訪問會有線程安全問題
解決:盡量不要在Servlet中定義成員變量,將成員變量定義在方法中,如果定義在類中就盡量不要對其修改值
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init........");
}
---------------------------------------------------
xml中<servlet>下配置
1.第一次被訪問時創(chuàng)建,即默認情況
<load-on-startup>負數(shù)</load-on-startup>
2.在服務器啟動時創(chuàng)建
<load-on-startup>0或正數(shù)</load-on-startup>
/*
獲取ServletConfig對象
ServletConfig:Servlet的配置對象
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/*
提供服務方法
每一次Servlet被訪問時,都會被執(zhí)行一次。執(zhí)行多次
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("service.....");
}
/*
獲取Servlet的一些信息,版本,作者等等
*/
@Override
public String getServletInfo() {
return null;
}
/*
銷毀方法:用于釋放資源
在服務器正常關(guān)閉時執(zhí)行,Servlet被銷毀,執(zhí)行一次
先執(zhí)行destroy方法,再銷毀Servlet
*/
@Override
public void destroy() {
System.out.println("Destroy.....");
}
Servlet3.0
- 優(yōu)勢:支持注解配置。可以不需要web.xml
- 1.創(chuàng)建JavaEE項目,選擇Servlet的版本3.0以上,不創(chuàng)建web.xml
2.定義一個類,實現(xiàn)Servlet接口
3.復寫方法
4.在類上使用@WebServlet注解,進行配置
@WebServlet(urlPatterns = "/demo")//" "中寫資源路徑
//@WebServlet("/demo2")
Servlet體系結(jié)構(gòu)

2021-04-13_131509.jpg
-
GenericServlet
將Servlet接口中除service()方法都做了默認空實現(xiàn),只將service()方法作為抽象方法
所以定義Servlet類時可以繼承GenericServlet類,只實現(xiàn)service()方法即可,如果需要復寫其他四個方法,也可以復寫,但不是必須 -
HttpServlet(重要,常用)
對http協(xié)議的一種封裝,簡化操作
1.定義類繼承HttpServlet
2.復寫doGet和doPost方法
Servlet相關(guān)配置
- urlpartten:Servlet訪問路徑
一個Servlet(資源)可以定義多個訪問路徑:@WebServlet({"/d4","/dd4","/ddd4"})
路徑定義規(guī)則:/xxx或許/xxx/xxx或*.do
@WebServlet({"/d4","/dd4","/ddd4"})
@WebServlet("/user/demo4")
@WebServlet("/user/*")//*代表著任意名字,當找不到訪問文件時,就會訪問*
@WebServlet("*.do")//想要訪問輸入demo4.do
