当前位置: 移动技术网 > IT编程>开发语言>Java > 浅析Servlet执行原理

浅析Servlet执行原理

2019年02月11日  | 移动技术网IT编程  | 我要评论

herzog zwei,兰金灿,miss穿紧身衣

     在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。
  • 可以转载该博客,但必须著名博客来源。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网