1. 程式人生 > >JAVA--Servlet總結

JAVA--Servlet總結

一.什麼是Servlet?

Jsp的前身就是Servlet。

Servlet是在伺服器上執行的小程式,一個Servlet就是一個Java類,並且可以通過“請求-響應”程式設計模型來訪問這個駐留在伺服器記憶體裡的Servlet程式。

二.Tomcat容器

    Tomcat容器分為四個等級,Servlet容器管理Context容器,一個Context對應一個Web工程。

三.Servlet執行流程

請求<a href="servlet/HelloServlet">        ===> 

  找web.xml

找到相同的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"));
    }