HttpServlet类为什么要声明为抽象类

在HttpServlet类中没有抽象方法,那为什么还要将HttpServlet类声明为抽象类呢?

当一个类被声明为抽象方法有两个原因:
1.有抽象方法
2.没有抽象方法,但是不想此类被实例化

所以HttpServlet就是不想让我们new出它的实例。

一、那为什么设计者不想让我们new出它的实例呢?

1.如果将HttpServlet中的方法设置为抽象方法,那么我们就不得不去实现这些方法,但是很多时候大部分方法对我们来说是用不上的,因此我们可能需要实现很多无意义的方法,所以设置成抽象方法并不是一个优雅的做法。

2.HttpServlet如果不设置为抽象类,那么我们就可以new出其实例,但是这个实例内部方法如doGet()、doPost()并没有任何实现(业务逻辑的代码只有自己知道怎么写),所以new出来的这个实例是没有意义的一个实例,它不能做任何事情,所以为了防止我们做这种没有意义的事情,将其设置为抽象类是优雅的做法。

二、如果我们继承了HttpServlet,但是不重写里面的方法直接用继承的类调用父类方法会发生什么呢?
这是HttpServlet内的doPost()方法,其他请求方法和这个差不多:

public static final int SC_METHOD_NOT_ALLOWED = 405;
public static final int SC_BAD_REQUEST = 400;

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
{
    String protocol = req.getProtocol();
    String msg = lStrings.getString("http.method_post_not_supported");
    if (protocol.endsWith("1.1")) {
        //协议为Http/1.1,直接调用该方法将会返回错误405
        resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
    } else {
        //协议不为Http/1.1,直接调用该方法将会返回错误400
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
    }
}

因为不重写的方法调用没有任何意义,所以设计为如果直接调用方法将直接返回错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值