1. 程式人生 > 其它 >servlet之GenericServlet抽象類

servlet之GenericServlet抽象類

GenericServlet抽象類:

這個抽象類其實是一種擴充套件類,與Servlet介面沒有很大區別,但是又有所不同。

API:

https://docs.oracle.com/javaee/5/api/

public abstract class GenericServlet
extends java.lang.Object
implements Servlet, ServletConfig, java.io.Serializable

 

模擬GenericServlet抽象類:

新建一個BServlet類並實現Servlet介面:

package cn.mlcd.servlet;
import
java.io.IOException; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * 模擬GenericServlet * * @author CDU_LM * */ public class
BServlet implements Servlet { private ServletConfig config; private int userNumber; @Override public void destroy() { System.out.print("即將死亡。。。"); } /** * 這個方法必定會在init()方法之後被呼叫,那麼config必定已經被賦值,不為空 */ @Override public ServletConfig getServletConfig() {
return this.config; } // 過載一個無參的init()方法提供給子類使用,避免使用原始init()方法導致config為空 public void init() {} /** * 沒啥用的方法,返回的是一個字串,對本Servlet的一段描述 */ @Override public String getServletInfo() { return "這是BServlet"; } /** * 由伺服器呼叫,第一個被呼叫並只調用一次 */ @Override public void init(ServletConfig config) throws ServletException { // 把伺服器傳遞的ServletConfig賦值給本類的一個ServletConfig物件,就是將其儲存起來方便其它方法使用 this.config = config; } @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { userNumber = 0; System.out.print("第" + (userNumber + 1) + "次被呼叫!"); userNumber++; } public ServletContext getServletContext() { return this.config.getServletContext(); } public String getServletName() { return this.config.getServletName(); } }

再新建一個CServlet類繼承BServlet:

package cn.mlcd.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CServlet extends BServlet {
    /**
     * 使用過載的無參init()方法避免使用原本的方法導致config為空
     */
    @Override
    public void init() {
        System.out.print("CServlet 出生!!");
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.print(getServletName());
    }
}

上面主要是理解GenericServlet介面的內部實現原理,比如自定義config,過載無參的init()等;

下面就建立一個類繼承GenericServlet抽象類並重寫其中的方法:

package cn.mlcd.servlet;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class DServlet extends GenericServlet {
    @Override
    public void init() throws ServletException {
        System.out.print("來了!!");
        super.init();
    }
    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        System.out.print("Hi!DServlet!");
    }
    @Override
    public void destroy() {
        System.out.print("死了!");
    }
}