浅析Servlet执行原理
在javaweb学习研究中,servlet扮演重要的作用,学好它,是后续javaweb学习的良好基础。无论是ssh,还是ssm,微服务javaweb技术,都应先学好servlet,从而达到事半功倍的效果,本篇将主要分析servlet的运行原理。
一 uml
下图为servlet uml关系图。
从图中,可以看出:
1.抽象类httpservlet继承抽象类genericservlet,其有两个比较关键的方法,doget()和dopost()
2.genericservlet实现接口servlet,servletconfig,serializable
3.myservlet(用户自定义servlet类)继承httpservlet,重写抽象类httpservlet的doget()和dopost()方法
注:任何一个用户自定义servlet,只需重写抽象类httpservlet的dopost()和doget()即可,如上图的myservlet
二 servlet在容器中的执行过程
servlet只有放在容器中,方可执行,且servlet容器种类较多,如tomcat,weblogic等。下图为简单的 请求响应 模型。
分析:
1.浏览器向服务器发出get请求(请求服务器servleta)
2.服务器上的容器逻辑接收到该url,根据该url判断为servlet请求,此时容器逻辑将产生两个对象:请求对象(httpservletrequest)和响应对象(httpservletresponce)
3.容器逻辑根据url找到目标servlet(本示例目标servlet为servleta),且创建一个线程a
4.容器逻辑将刚才创建的请求对象和响应对象传递给线程a
5.容器逻辑调用servlet的service()方法
6.service()方法根据请求类型(本示例为get请求)调用doget()(本示例调用doget())或dopost()方法
7.doget()执行完后,将结果返回给容器逻辑
8.线程a被销毁或被放在线程池中
注意:
1.在容器中的每个servlet原则上只有一个实例
2.每个请求对应一个线程
3.多个线程可作用于同一个servlet(这是造成servlet线程不安全的根本原因)
4.每个线程一旦执行完任务,就被销毁或放在线程池中等待回收
三 servlet在javaweb中扮演的角色
servlet在javaweb中,扮演两个角色:页面角色和控制器角色。
有了jsp等动态页面技术后,servlet更侧重于控制器角色,jsp+servlert+model 形成基本的三层架构
(一)页面page角色
protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { request.setcharacterencoding("utf-8"); response.setcontenttype("text/html;charset=utf-8"); printwriter out=response.getwriter(); out.println("hello!servlet."); }
(二)控制器角色
jsp充当页面角色,servlet扮演控制器角色,两者组合构建基本的mvc三层架构模式
四 servlet在容器中的生命周期
下图为servlet生命周期简要概图
分析:
第一步:容器先加载servlet类
第二步:容器实例化servlet(servlet无参构造函数执行)
第三步:执行init()方法(在servlet生命周期中,只执行一次,且在service()方法执行前执行)
第四步:执行service()方法,处理客户请求,dopost()或doget()
第五步:执行destroy(),销毁线程
五 版权区
- 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
- 博主网址:http://www.cnblogs.com/wangjiming/。
- 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
- 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2098469527@qq.com。
- 可以转载该博客,但必须著名博客来源。
上一篇: 一个木匠的儿子,竟成了一个王朝的掘墓人