servlet之GenericServlet抽象類
阿新 • • 發佈:2022-04-04
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("死了!");
}
}