1. 程式人生 > 實用技巧 >Servlet介面實現類開發步驟

Servlet介面實現類開發步驟

Servlet程式設計方式

  • 1、實現Servlet介面
    這種情況Servlel不是獨立的應用程式,沒有main( )方法,而是生存在容器中,由容器來管理。程式設計時需要實現javax.servlet.Servlet介面的5個方法。
  • 2、繼承GenericServlet類
    由javax. servlet包提供個抽象類GenericSerlet。它給出了Servlet介面中除service()方法外的其他4個方法的簡單實現,並且還實現了ServletConfig介面,程式設計時直接繼承這個類,程式碼會簡化很多。
  • 3、繼承HttpServlet、覆蓋doXXX( )方法
    在大部分網路中,都是客戶端通過HTTP協議來訪問伺服器端的資源。為了快速開發應用於HTTP協議的Servlet類,在javax.servlet.http包中提供了一個抽象類HttpServlet,它繼承了GenericServlet類。編寫一個Servlet類繼承HttpServlet,只需要覆蓋相應的doxx()方法即可。
  • 4、繼承HttpServlet、重寫service( )方法
    其本質就是擴充套件HttpServlet類,使用者只需重寫service( )方法,Servlet模組執行service()方法時,會自動呼叫doPost()和doGet()這兩個方法,實現Servlet的邏輯處理功能。

步驟

第一步:建立一個Java類繼承HttpServlet,使之成為一個Servlet介面實現類。
第二步:重寫HttpServlet父類兩個方法,doGet或doPost。
第三步:將Servlet介面實現類資訊註冊到Tomcat伺服器(在web.xml裡面部署)。

xml配置資訊

<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
    <!--將Servlet介面實現類的類路徑地址交給Tomcat-->
    <servlet>
        <!--宣告一個變數儲存servlet介面實現類的類路徑-->
        <servlet-name>自己起的名字</servlet-name>
        <!--宣告servlet介面實現類的類路徑-->
        <servlet-class>servlet的類名,如果有包加上包名,注意這裡的類名不要加.java</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>和servlet-name裡的值一樣</servlet-name>
        <url-pattern>該servlet執行的路徑名,隨便起名字,但是前面要加上“/”</url-pattern>
    </servlet-mapping>
</web-app>

程式碼示例

package com.zyh.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 直接實現servlet介面的話需要實現五個方法:
 *     init
 *     getServletConfig
 *     getServletInfo
 *     destroy
 *     service---只有這個方法有用
 * 為什麼?
 *     Tomcat根據Servlet規範呼叫Servlet介面實現類規則:
 *     1、Tomcat有權建立Servlet介面實現類例項物件:
 *     Servlet oneservlet = new OneServlet();
 *     2、Tomcat根據例項物件呼叫service方法處理當前請求:
 *     oneServlet.service();
 */

public class OneServlet extends HttpServlet {

    /*
     * 呼叫doGet還是doPost方法?
     * 由父類HttpServlet決定(看原始碼,大概在227行)
     * */

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>demo</servlet-name>
        <servlet-class>com.zyh.controller.OneServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo</servlet-name>
        <url-pattern>/myserv</url-pattern>
    </servlet-mapping>
</web-app>

訪問: