servlet 、GenericServlet 、HttpServlet 详解

今天突然想研究下servlet,总结下新的,希望对大家有帮助:

 

 

首先,看看怎样才能实现一个servlet,方法有3种:

1、实现servlet接口

2、继承GenericServlet(实现service 方法

3、继承HttpServlet类(重写doGet,doPost方法就行)

 

servlet 接口源代码

 

GenericServlet源代码

 

 

HttpServlet源代码

 

 

 

GenericServlet实现了接口:Servlet , ServletConfig

HttpServlet :继承了GenericServlet 

 

 

咱先看下访问页面是怎样的一个流程:

 

当你访问一个servlet的时候(也可以说是访问一个jsp页面),访问的方式有(get,post,delete),调用service()方法处理你的请求,你可以在里面写你想要干嘛。

 

在GenericServlet中,service是一个抽象方法,也就是当你以继承GenericServlet的方式创建一个servlet时,必须实现service方法,在里面处理前端发过来的request,和response。

 

在HttpServlet中,大家可以看它的原代码,有2个service方法,一个是保护的(主要看里面的实现),一个是公有的,公有的service接收到请求时,会抛给保护的那个service,它在这只是起一个中转的作用。当前端有请求过来时,会默认找到这2个service方法,具体先找哪个我不清楚,反正最后请求都会在保护的那个service那里,在那个service中,会根据前端是哪种方式的请求,再抛给相应的处理方法,如:get则交给doGet处理。所以,在以继承GenericServlet的方式创建一个servlet时,你只要重写相应的doGet或者doPost等处理方法就行了,然后再在里面写你的代码就行了。

 

 

--------------------

还有一个就是关于servlet的生命周期,它开始于init,而且容器中一个servlet只有一个实例,多个请求过来时,是共享一个servlet的,每次请求都是调用service,它销毁与容器关闭的时候,还有人说可以调用destory来销毁一个实例,我做了实验,不行。可能是不同容器不同的处理吧,你们可以看下源代码,destory在GenericServlet中是空实现,不知道为什么。求高手解答。

 

 

测试销毁servlet的代码

 

 

 

 

其实,当你reload一些服务器或者关闭服务器或者重启服务器时,才会调用destory,这个方法有点像垃圾回收里面那个finalize(),在执行Gc前,会调用finalize来做一些清理。

 

 

 

 

 

 

 

 

 

 

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值