随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。
posts - 398,comments - 0,views - 13万

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("死了!");
    }
}
复制代码

 

 

posted on   时间完全不够用啊  阅读(83)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示