servlet究竟是个啥

Java基础 专栏收录该内容
4 篇文章 0 订阅

Java Web开发,servlet这个词大家一定不陌生,比如java自己提供的HttpServlet、springMVC中的dispatcherServlet等等,但是有没有人跟我一样,日常开发中直接上框架,管他什么sevlet是个啥,反正封装在框架,作为一个“资深”的渣渣开发,我只管用就好了,实现公司安排任务就行。(有多少人和我一样,可耻的举下手)。

直到这一天,我打算正视他。可以说,只要涉及到java web开发,就离不开servlet,那servlet到底是个啥玩意,啥又是servlt容器,和http又是啥关系,下面就来一步一步的学习。首先,sevlet是个接口,接口是什么?接口就是规范,

所以servlet是一个规范(记笔记,重点:规范),它规范了接受到一个web请求后应该要做的事。可以看看servlet的接口中的方法,方法即代表了他要遵循的规范:

 

   重点方法主要是这三个(剩下两个后面再说):init(),service(),destory(),他们的作用分别是:

     init():接收到请求后,你要做啥准备工作(初始化)

service():既然是请求,这里就是做请求要求你做的事(响应请求)

destroy():请求做完之后,在返回之前,做一些善后的事情(释放、销毁持有的资源等)

所以很简单的来看,servlet就是这样一个规范,一种约定俗称,它规定了我接受请求之后,应该做的这三件事情,初始化、请求逻辑、请求结束后的处理,比如:

    

 

好啦,这就是servlet的作用,看吧,很简答吧,学完。

???

 

哈哈,不开玩笑继续。既然他是个规范,那我们要实现这种功能,就要遵循这种规范。那如何来实现呢,简单来说提供了三种方法:

 第一种,直接实现servlet接口,就像上面这个例子一样,实现接口中的方法;

 第二种,实现GenericServlet接口,原理同servlet,只是在servlet又包裹了一层

 

第三种,继承httpsevlet类,它实现了上面的GenericServlet接口,httpsevlet是专门为http请求实现的一个servlet,里面封装了很多有关http的操作方法。

好麻烦哦,有一个servlet不就够了吗,为啥还有这么多其他的。跟我一样这么问的肯定和我一样就是个学渣。

仔细想想,关于接口,你在学习啥是接口的时候,是不是会看到这么一些文章里面拿一些例子来距离,比如动物、鸟类、图形,相信看到这里的同学都会会心一笑,原来我们都是这样学过来的。

没错,那你想想,你在写鸟类接口的时候,有一个总的动物接口,有个方法,会动;然后你要为这个动物写实现,动物又分为天上的(会飞)、地上的(走路)、海里的(游泳),然后以这三类再继续分下去,那么你还会用只用这一个动物接口吗,我们正确的做法是不是应该创造器更多的接口,来不断丰满我们的动物的这个体系。最后我们需要实现的类需要什么样的功能,就去集成这样一个具体的类,比下面:

这个不就是面向对象编程的思想吗。所以啊,这里的servlet是一样的,对于HttpServlet来说,就是专门为处理http请求创建的一个类,实现了一些相关的方法,就不用麻烦你去写啦(于此对应,还有其他协议,例如arp)。

我们就以httpServlet这个来说,开始分析它的“规范”,话不多说,直接上方法图:

除了上面我们提到的servlet接口的方法外,多出的主要方法就是这几个do方法,doGet,doPost,doPut,doPut等请求,其实通过名字也可以看出来,这些方法就是接收到对应http的请求方法的时候实现的,对应http的get,post,put方法请求的时候进行的处理的方法。秋逗麻德,你刚刚不是说servlet规范请求是通过serivice方法进行处理吗,现在怎么又是这些方法?骗人搞事情?

不要慌,收起你们手中的板砖,先来看看httpservlet的service方法就知道了

  

看吧,现在明白了吧,请求的确是进入了service方法,不过在里面他会先判断你这个http请求的类型,然后再进入刚刚该说的对应的doXXX()方法。

   所以,本质来说,servlet就是一个

好了,现在明白了httpservlet的用法,那是不是可以自己尝试建一个servlet来测试一下呢,em……..先写个servlet集成httpServlet方法,然后实现他的各种方法。嗯?然后呢,请求从那而来,怎么接受请求,怎么运行起来?下一步呢?就这?

摸脑壳,我好方

哎呀,不要急,严格的来说,servlet是一种规范,只是规定了怎么处理请求,只是规范ing了有请求来的时候,你该做那些事、怎么做。但是它和http请求没啥关系,什么接受请求啊,返回啊,都跟他没关系。

  靠,那你说了这么多,和没说有啥区别?

让servlet能够跑来,就需要servlet容器。啥是servlet容器,干啥用的,就拿上面我们提到的来说:

  1. servlet只是个规范,他只负责处理请求,但是如何接受请求呢,我咋知道啥时候有人请求我了?
  2. 请求完了之后,我们么给它反馈?
  3. 我怎么知道一个http请求进来,这个http用的那个方法?get还是post方法
  4. 我可能有多个servlet方法,那一个请求过来,我该用那个servlet来处理

一下省略一千条(表情包,笑脸)…………,

…………

…………

现在明白了吧,光是servlet还不够,他只是处理请求,解决想要做的事情,集体如何来接收请求、调度、设置、启动等等,还是要靠servlet容器来实现。可以这样理解,把servlet当成你员工,servlet是你的老板,你会后端编程、你同事小强前端编程、还有个同事小刚负责数据库,你们是不知道你们啥时候有任务的,直到老板给你们说,最近有个一个亿的项目要你们做,给你们分配任务啦,然后把后端任务分配给你、前端分配给小强,数据库任务分配给你小刚。

这里面设计打破如何分配任务、任务的描述、任务的类别、还有可能规定你要用什么框架开发等等,但是具体开发还是有你们自己来写代码。

可能不太准确,但大概就是这个意思啦。

常见的servlet容器,比如tomcat、jetty.

  • 1
    点赞
  • 1
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值