适配器模式改造Servlet

一、我们编译Servlet类直接实现Servlet接口有什么缺点?

在接口中的 5 个方法中,只有service 方法使我们常用的,但是要实现其余 5 个方法,这其实是很蠢的。

二、那么我们应该怎么办呢?

我们可以编写一个通用的GenericServlet类,用这个类实现 Servlet 接口。这个类是抽象的,将 service 方法设置成抽象方法 。每个Servlet类不在实现 Servlet接口了,而是继承这个通用的GenericServlet 类【这个通用的类就是 适配器,这也是Servlet规范中的一员】

//通用的Servlet类
public  abstract class GenericServlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*
        抽象方法:没有方法体。

     */
    @Override
    public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException ;

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

以下为俩个 Servlet 类:

 编辑配置文件:

 当我们访问 BServlet时:

当我们访问 CServlet 时:

 

三、能不能改造GenericServlet适配器?更利于子类的编写

  • 当我们提供一个GenericServlet之后,里面 init 方法还会执行吗?
    • ​​​​​​​会的,子类继承 GenericServlet,会执行 init 方法。
  • ​​​​​​​  init 方法中的 ServletConfig 对象 是谁创建的?谁传过来的呢?
    • ​​​​​​​Tomcat 服务器。Tomcat 先创建 Servlet 对象。通过对象调用 init 方法。
  • 那么我们如何在子类中获取到 ServletConfig 呢
    • ServletConfig 在init方法中是一个 局部变量,可以将这个局部变量赋给成员变量。通过 getServletConfig 这个方法获取到 。
  • 有没有可能在子类中需要重写 init 方法?
    • 是有可能的,但是重写 init 方法 会破坏 config 的值。
    • 所以我们一般不会允许 GenericServlet 中 init 方法进行重写。会在init方法上加一个 final 修饰。
    • 但是我们可以再 GenericServlet 中重载一个 init 方法。让子类对重载的 init 方法进行操作
  • 其实适配器不用我们自己写,只是了解以下源码。在 javax.servlet 包下已经写好了。只需继承即可【有的在 jakarta.servlet包下。我这个版本较低】
    • 这个是写好的 GenericServlet ,几乎和我们自己写一样。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲨瓜2号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值