Web服務技術——Servlet

什麼是 Servlet?

  1. 其實就是一個 Java 程序,運行在我們的 Web 服務器上,用於接收和響應客戶端的 HTTP 請求。

  2. 更多的是配合動態資源來做。 當然靜態資源也需要使用到 Servlet,只不過是Tomcat裏面已經定義好了一個 DefaultServlet。

Servlet 的執行過程

第一步:類的定義

    package com.huang.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    /**
     *
     *@author	黃遠志
     *@date		2019年7月4日下午7:08:19
     *@GitHub	https://github.com/huangyuanzhi1997
     */
    public class HelloServlet implements Servlet {
    
    	@Override
    	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    		System.out.println("HelloServlet");
    	}
    	@Override
    	public void destroy() {
    	}
    
    	@Override
    	public ServletConfig getServletConfig() {
    
    		return null;
    	}
    
    	@Override
    	public String getServletInfo() {
    
    		return null;
    	}
    
    	@Override
    	public void init(ServletConfig config) throws ServletException {
    	}
    
    
    }

第二步:Servlet 的配置

    	<!-- 向tomcat報告, 我這個應用裏面有這個servlet,名字叫做HelloServlet , 具體的路徑是com.huang.servlet.HelloServlet -->
    	<servlet>
    		<servlet-name>HelloServlet</servlet-name>
    		<servlet-class>com.huang.servlet.HelloServlet</servlet-class>
    	</servlet>
    
    	<!-- 註冊servlet的映射。 servletName : 找到上面註冊的具體servlet,url-pattern: 在地址欄上的path一定要以/打頭 -->
    	<servlet-mapping>
    		<servlet-name>HelloServlet</servlet-name>
    		<url-pattern>/a</url-pattern>
    	</servlet-mapping>

執行過程:

  1. 找到 Tomcat 應用
  2. 找到項目
  3. 找 web.xml,然後在裏面找到 url-pattern,有沒有哪一個 patten 的內容是 /a
  4. 找到第二步 servlet-mapping 中的那個 servlet-name(HelloServlet)
  5. 找到第二步上面定義的 servlet 元素中的 servlet-name(HelloServlet)
  6. 找到第二步下面定義的 servlet-class,然後開始創建該類的實例
  7. 繼而執行該 servlet 中的 service 方法

Servlet 的通用寫法:

        Servlet (接口)
             |
             |
        GenericServlet
             |
             |
        HttpServlet (用於處理http的請求)

定義一個類,繼承 HttpServlet 複寫 doGet 和 doPost

package com.huang.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 *@author	黃遠志
 *@date		2019年7月4日下午7:51:01
 *@GitHub	https://github.com/huangyuanzhi1997
 */
public class HelloServlet02 extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		System.out.println("HelloServlet02...");
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		super.doGet(req, resp);
		System.out.println("get...");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		super.doPost(req, resp);
		System.out.println("post...");
	}
}

Servlet 的生命週期

生命週期

從創建到銷燬的一段時間。

生命週期方法

從創建到銷燬,所調用的方法。

  1. init 方法
    在創建該 Servlet 的實例時,就執行該方法。一個 Servlet 只會初始化一次, init 方法只會執行一次。
    默認情況下是 : 初次訪問該 Servlet,纔會創建實例。
  2. service 方法
    只要客戶端來了一個請求,那麼就執行這個方法。該方法可以被執行很多次。 一次請求,對應一次 service 方法的調用。
  3. destroy 方法
    servlet 銷燬的時候,就會執行該方法。
    (1). 該項目從 Tomcat 的裏面移除。
    (2). 正常關閉 Tomcat 就會執行 shutdown.bat。

doGet 和 doPost 不算生命週期方法,所謂的生命週期方法是指,從對象的創建到銷燬一定會執行的方法, 但是這兩個方法,不一定會執行。

讓 Servlet 創建實例的時機提前

  1. 默認情況下,只有在初次訪問 Servlet 的時候,纔會執行 init 方法。 有的時候,我們可能需要在這個方法裏面執行一些初始化工作,甚至是做一些比較耗時的邏輯。
  2. 那麼這個時候,初次訪問,可能會在 init 方法中逗留太久的時間。 那麼有沒有方法可以讓這個初始化的時機提前一點。
  3. 在配置的時候, 使用 load-on-startup 元素來指定, 給定的數字越小,啓動的時機就越早。 一般不寫負數, 從 2 開始即可。
       	<servlet>
       		<servlet-name>HelloServlet04</servlet-name>
       		<servlet-class>com.itheima.servlet.HelloServlet04</servlet-class>
       		<load-on-startup>2</load-on-startup>
       	</servlet>

什麼是 ServletConfig

Servlet 的配置,通過這個對象,可以獲取 Servlet 在配置的時候一些信息

  1. 未來我們自己開發的一些應用,使用到了一些技術,或者一些代碼,我們不會。 但是有人寫出來了。它的代碼放置在了自己的 Servlet 類裏面。
  2. 剛好這個 Servlet 裏面需要一個數字或者叫做變量值。 但是這個值不能是固定了。 所以要求使用到這個 Servlet 的公司,在註冊 Servlet 的時候,必須要在 web.xml 裏面,聲明 init-params。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章