康说—Servlet生命周期

老康有话说 专栏收录该内容
3 篇文章 0 订阅

第一章:启动服务器

我叫 HelloServlet,我是一个字节码文件,我出生在一个混沌的世界中,我对出生的印象很模糊,不知道自己的父母是谁。

我听见有人在敲我的门,打开门后看见的是一个一脸严肃的人。

“你好,我叫类加载器,特意来要带你离开这里。”

“带我去哪里?”

“Tomcat服务器已经启动了,我需要把一些类加载到内存中去…”

“所有的类都要加载吗?”

“不,只需要一些特殊的类,它们都是 HttpServlet 的孩子…”

“你是怎么找到我的?”

“Web容器手里有一份部署文件名单 web.xml,我通过上面的地址 <servlet-class> 找到了你,你是最后一个。”

“我一直想问,我是从哪来的?是你口中那个Web容器创造的我吗?”

“没错,服务器启动的时候,Web容器就已经根据 HelloServlet.java 来编译创造了你,它是你的本体。”

“那我的本体现在在哪?”

“因为它比较重要,所以它不会被发布到服务器,仍在硬盘世界里,你是找不到它的,其余更多的内容你就不要再问了。”

我哦了一声,跟着它终于来到了服务器中,映入眼帘的是一个公告板,上面写着一句话:“项目的首页是index.html”。

“这是什么意思?”我指着公告板问类加载器。

他回答我说:“这个板子只有一个,它叫做 ServletContext,上面的是整个工程的配置信息,所有的Servlet都能看见这块板子”。

我点点头,然后被他带进了一个名字叫做 WEB-INF/classes 的房间中。

“接下来我要干点什么?”

“什么都不用做,等着就行了,会有人来找你的,我得走了,再见!”

第二章:来请求了

浑浑噩噩中,突然脑袋上方传来一个声音:”醒一醒!”

我被吓了一跳,连忙问道:“你是谁?”

“我是Web容器,有客户发请求了,想要访问你,现在把你的 init() 方法执行一下,这里有一张你的任务清单,每一个Servlet都会有一张,拿好了。”

我伸手拿过这张任务清单,上面的标题是:servletConfig ,上面已经详细的纪录了我的所有出生信息和初始化参数,但是最不能让我容忍的是,我居然有一个工作小名,叫abc。”

“没问题,但是我的 init() 方法里什么都没有,是不是就不用做什么了?”

“嗯对。”

Web容器话音未落,身后已经多了一个人,他对我说道:“你好,我是一个线程,我叫0x9527,是老大分配过来的。”

“你要做什么?”

“我需要把你的 service() 执行一下,正好我刚拿到老大创建的 requestresponse。对了,用户发送的是一个get请求,service() 方法会自动调用 doGet() ,并且把这两个参数传递给 doGet() 方法,然后我要执行它里面的内容!”

话音未落,突然身后又多了一个人,他对我说道:“你好,我是一个线程,我叫0x9528,是老大分配过来的。”

“又来一个?”

我回过身问0x9527怎么办,0x9527淡定地回复我说:“没关系,我们所有线程都可以同时工作,互相不干扰,因为我们谁都没有带锁,如果涉及到共享数据,我们可能会干一架,你在旁边看就好了。”

过了几分钟,两个人都把活干完了,并且他们的请求已经得到了正确的响应,然后他们先后对我说了再见,并且回到了线程池中,临走的时候0x9527还把那两个参数随手一扔,跟我说这两个参数已经没有什么用了,扔地上吧,一会儿GC大妈会过来处理。

第三章:关闭服务器

我的生活就在这里日复一日,直到有一天,头顶又传来那个讨厌的声音:“abc!服务器要重启了!请调用一下你的 destroy() 方法,留最后的遗言!”

“可是我的 destroy() 方法中没有任何代码..”

“哦,那你去死吧…”

然后我眼前一黑,大家再见。

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

©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值