揭秘Java Web技术内幕,别让CRUD麻木了你!

发表于:2019-5-24 09:58

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Java进阶交流    来源:今日头条

#
java
分享:
  在JavaWeb学习研究中,Servlet扮演重要的作用,学好它,是后续JavaWeb学习的良好基础。
  无论是SSH,还是SSM,微服务JavaWeb技术,都应先学好Servlet,从而达到事半功倍的效果,本篇将主要分析Servlet的运行原理。
  一、UML
  下图为Servlet UML关系图。
  
  从图中可以看出:
  抽象类HttpServlet继承抽象类GenericServlet,其有两个比较关键的方法,doGet()和doPost()
  GenericServlet实现接口Servlet,ServletConfig,Serializable
  MyServlet(用户自定义Servlet类)继承HttpServlet,重写抽象类HttpServlet的doGet()和doPost()方法
  注:任何一个用户自定义Servlet,只需重写抽象类HttpServlet的doPost()和doGet()即可,如上图的MyServlet
  二、Servlet在容器中的执行过程
  Servlet只有放在容器中,方可执行,且Servlet容器种类较多,如Tomcat,WebLogic等。
  下图为简单的请求响应模型。
  
  分析:
  浏览器向服务器发出GET请求(请求服务器ServletA)
  服务器上的容器逻辑接收到该url,根据该url判断为Servlet请求,此时容器逻辑将产生两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)
  容器逻辑根据url找到目标Servlet(本示例目标Servlet为ServletA),且创建一个线程A
  容器逻辑将刚才创建的请求对象和响应对象传递给线程A
  容器逻辑调用Servlet的service()方法
  service()方法根据请求类型(本示例为GET请求)调用doGet()(本示例调用doGet())或doPost()方法
  doGet()执行完后,将结果返回给容器逻辑
  线程A被销毁或被放在线程池中
  注意:
  在容器中的每个Servlet原则上只有一个实例
  每个请求对应一个线程
  多个线程可作用于同一个Servlet(这是造成Servlet线程不安全的根本原因)
  每个线程一旦执行完任务,就被销毁或放在线程池中等待回收
  三、Servlet在JavaWeb中扮演的角色
  Servlet在JavaWeb中,扮演两个角色:页面角色和控制器角色。
  有了jsp等动态页面技术后,Servlet更侧重于控制器角色,jsp+servlert+model 形成基本的三层架构
  (一)页面Page角色
  
  (二)控制器角色
  jsp充当页面角色,Servlet扮演控制器角色,两者组合构建基本的MVC三层架构模式
  
  四、Servlet在容器中的生命周期
  下图为Servlet生命周期简要概图
 
  分析:
  第一步:容器先加载Servlet类
  第二步:容器实例化Servlet(Servlet无参构造函数执行)
  第三步:执行init()方法(在Servlet生命周期中,只执行一次,且在service()方法执行前执行)
  第四步:执行service()方法,处理客户请求,doPost()或doGet()
  第五步:执行destroy(),销毁线程

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号