JAVA--Servlet總結
一.什麼是Servlet?
Jsp的前身就是Servlet。
Servlet是在伺服器上執行的小程式,一個Servlet就是一個Java類,並且可以通過“請求-響應”程式設計模型來訪問這個駐留在伺服器記憶體裡的Servlet程式。
二.Tomcat容器
Tomcat容器分為四個等級,Servlet容器管理Context容器,一個Context對應一個Web工程。
三.Servlet執行流程
請求<a href="servlet/HelloServlet"> ===>
找到相同的url-pattern。然後根據servlet-mapping裡面的name:helloServlet,去找對應的Servlet,再根據class找到對應的Servlet類,根據請求型別讀取 doGet(),doPost().....方法。
四.Servlet生命週期
(1)初始化階段,呼叫init()方法;
init()方法是工作在單執行緒的環境下,開發者不必考慮執行緒安全的問題。在Servlet的整個生命週期內,init()方法只被呼叫一次。Servlet長期駐留在記憶體中,當Servlet例項一旦被載入後,那麼這個Servlet物件就會長期保留在伺服器記憶體中。
(2)響應客戶請求階段,呼叫service()方法,由service()方法根據提交方式選擇執行doGet ()或者doPost()等方法。
(3)終止階段,呼叫destory()方法;
Servlet的執行順序嚴格按照先構造方法,再初始化方法,然後是service方法,由service()方法再轉去做doGet()或者doPost()方法,最後在伺服器停止工作的時候,呼叫destroy()方法。
五.Servlet容器裝載Servlet的時刻
(1)Servlet啟動時,自動裝載某些servlet,實現它只需要在web.xml檔案中的<servlet></servlet>之間填寫如下程式碼<loadon-startup></loadon-startup>,數字越小表示越優先。
<servlet>
<servlet-name>TestServlet1</servlet-name>
<servlet-class>servlet.TestServlet1</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet1</servlet-name>
<url-pattern>/servlet/TestServlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>TestServlet2</servlet-name>
<servlet-class>servlet.TestServlet2</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet2</servlet-name>
<url-pattern>/servlet/TestServlet2</url-pattern>
</servlet-mapping>
TestServlet2的load-on-startup更小一些,會先裝載。可以看到裝載順序如下。
(2)在servlet容器啟動後,客戶首次像servlet傳送請求;
(3)servlet檔案被更新後,重新裝載servlet。
六.獲取初始化引數
在web.xml中配置servlet時,可以配置一些初始化引數,而在servlet中可以通過servletConfig介面提供的方法來取得這些引數。
配置如下:
<servlet>
<servlet-name>RegServlet</servlet-name>
<servlet-class>servlet.RegServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>RegServlet</servlet-name>
<url-pattern>/servlet/RegServlet</url-pattern>
</servlet-mapping>
使用方式:
@Override
public void init() throws ServletException {
this.setUsername(this.getInitParameter("username"));
this.setPassword(this.getInitParameter("password"));
}