Servlet一些個人理解
一、什麽是Servlet
1.Servlet是一個基於Java技術的動態網頁技術,運行在服務器端,由Servlet容器管理,用於生成動態內容,是jsp( servlet進行網頁開發非常的繁瑣,所以現在一般用於流程控制)的前身。
補充:jsp:jsp的框架是HTML,開發網頁非常簡單方便,裏面嵌套java,jsp的本質是servlet。jsp的執行過程:jsp----翻譯---->.java(servlet)----編譯---->.class-----> 執行。
2.Servlet本質是一個實現了特定接口的java類,編寫一個servlet,實際上就是按照Servlet規範編寫了一個java類。
3.Servlet不是由用戶或程序員直接調用,是由容器管理的,沒有main方法。
二、Servlet的生命周期
1.加載:
(1)如果在web.xml中配置了<load-on-start>則在服務器啟動的時候就自動加載
(2)沒有配置就在第一次想servlet發送請求的時候加載
2.實例化:
加載Servlet後,服務器創建一個Servlet實例。
補充:在學習Spring的自動註入時,曾疑惑為什麽不能在servlet裏面進行service類的註 入。後來查詢資料,明白了,原因是:Spring不對servlet進行管理,服務器在進行加載servlet時會實例化一個對象,如果在applicationContext.xml中進行自動註入,又會創建一個對象。這兩個對象不是同一個!
3.初始化:
調用init()方法,Servlet初始化參數被傳遞給Servlet配置對象ServletConfiig
4.處理請求:
調用service()方法,該方法用於傳遞請求和響應對象,進行流程控制。從請求對象(HttpServletRequest)中獲取請求信息,處理該請求並用響應對象(HttpServletResponse)的方法返回給客戶端。也可以調用doGet(),dopost()方法。
5.銷毀:
當服務器不在需要Servlet,或重新裝入新的Servlet實例時,服務器會調用destroy()方法。
三、Servlet相關實現
--Servlet必須直接或間接實現javax.servlet.Servlet接口
--通過繼承javax.servlet.GenericServlet抽象類實現跨協議的Servlet
--通過繼承javax.servlet.HttpServlet類實現http Servlet(常用方法)
裏面有兩個service方法,下面的是父類的,如果用這個的話,還需要把requst和response轉為http的,所有一般直接實現上面的service方法,或者實現doGet(),doPost()方法(如果不實現會報405錯
)。
四、Servlet在web.xml中配置
<servlet-name>用來定義servlet的名稱,該名稱在整個應用中必須是唯一的,可以隨便起
<servlet-class>用來指定servlet的完全限定的名稱。
<servlet-name>:Servlet的名字,唯一性和一致性,與<servlet>元素中聲明的名字一致。
<url-pattern>:指定相對於Servlet的URL的路徑。該路徑相對於web應用程序上下文的根路徑。
<servlet-mapping>將URL模式映射到某個Servlet,即該Servlet處理的URL。也就是說可以通過這個路徑訪問到該servlet
<servlet>
<servlet-name>FristServlet</servlet-name>
<servlet-class>全限定路徑FristServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FristServlet</servlet-name>
<url-pattern>/servlet/frist</url-pattern>
</servlet-mapping>
Servlet一些個人理解