Javaweb servlet体系结构与原理剖析

  • 1.Servlet的工作过程
  • 2.Servlet体系结构
  • 3.Servlet工作原理
  • 4.Servlet生命周期

1.Servlet的工作过程

当用户通过 URL 发出一个请求时,这些 Java servlet 类就将之转换成一个 HttpServletRequest,并发送给 URL 所指向的目标。当服务器端完成其工作时,Java 运行时环境(JRE)就将结果包装在一个 HttpServletResponse 中,然后将原 HTTP 响应送回给发出该请求的客户机。

在与 Web 应用程序进行交互时,通常会发出多个请求并获得多个响应。所有这些都是在一个会话语境中,Java 语言将之包装在一个 HttpSession 对象中。在处理响应时,您可以访问该对象,并在创建响应时向其添加事件。它提供了一些跨请求的语境。


2.Servlet体系结构

Servlet顶级类关联图

Servlet的框架是由两个Java包组成的:javax.servletjavax.servlet.http。在javax.servlet包中定义了所有的Servlet类都必须实现或者扩展的通用接口和类。在javax.servlet.http包中定义了采用Http协议通信的HttpServlet类。Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这个接口

在该Servlet接口中定义了5个方法:

1. init(ServletConfig)方法:负责初始化Servlet对象,在Servlet的生命周期中,该方法执行一次;该方法执行在单线程的环境下,因此开发者不用考虑线程安全的问题;
2. service(ServletRequest req,ServletResponse res)方法:负责响应客户的请求;为了提高效率,Servlet规范要求一个Servlet实例必须能够同时服务于多个客户端请求,即service()方法运行在多线程的环境下,Servlet开发者必须保证该方法的线程安全性;
3. destroy()方法:当Servlet对象退出生命周期时,负责释放占用的资源;
4. getServletInfo:返回Servlet的描述;
5. getServletConfig:这个方法返回由Servlet容器传给init方法的ServletConfig。

ServletRequest & ServletResponse:

对于每一个HTTP请求,servlet容器会创建一个封装了HTTP请求的ServletRequest实例传递给servlet的service方法,ServletResponse则表示一个Servlet响应,其隐藏了将响应发给浏览器的复杂性。通过ServletRequest的方法你可以获取一些请求相关的参数,而ServletResponse则可以将设置一些返回参数信息,并且设置返回内容

ServletConfig:

ServletConfig封装可以通过@WebServlet或者web.xml传给一个Servlet的配置信息,以这种方式传递的每一条信息都称做初始化信息

ServletContext:

ServletContext是代表了Servlet应用程序。每个Web应用程序只有一个context。在分布式环境中,一个应用程序同时部署到多个容器中,并且每台Java虚拟机都有一个ServletContext对象

GenericServlet:

前面编写的Servlet应用中通过实现Servlet接口来编写Servlet,但是我们每次都必须为Servlet中的所有方法都提供实现,还需要将ServletConfig对象保存到一个类级别的变量中,GenericServlet抽象类就是为了为我们省略一些模板代码,实现了Servlet和ServletConfig

HTTPServlet:

在编写Servlet应用程序时,大多数都要用到HTTP,也就是说可以利用HTTP提供的特性,javax.servlet.http包含了编写Servlet应用程序的类和接口,其中很多覆盖了javax.servlet中的类型,我们自己在编写应用时大多时候也是继承的HttpServlet


3.Servlet工作原理

当Web服务器接收到一个HTTP请求时,它会先判断请求内容——如果是静态网页数据,Web服务器将会自行处理,然后产生响应信息;如果牵涉到动态数据,Web服务器会将请求转交给Servlet容器。此时Servlet容器会找到对应的处理该请求的Servlet实例来处理,结果会送回Web服务器,再由Web服务器传回用户端

针对同一个Servlet,Servlet容器会在第一次收到http请求时建立一个Servlet实例,然后启动一个线程。第二次收到http请求时,Servlet容器无须建立相同的Servlet实例,而是启动第二个线程来服务客户端请求。所以多线程方式不但可以提高Web应用程序的执行效率,也可以降低Web服务器的系统负担

Servlet工作原理时序:

1. 客户端 向Servlet容器(Tomcat)发出Http请求;2. Servlet容器接收客户端的请求;3. Servlet容器创建一个HttpRequest对象,将客户端请求的信息封装到这个对象中;4. Servlet容器创建一个HttpResponse对象;5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet对象;6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息;7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据;8. Servlet容器把HttpServlet的响应结果传给客户端;

4.Servlet生命周期

servlet从出生到死亡的过程就是servlet的生命周期

对应servlet的三个方法:

  • init()
  • service()
  • destroy()

默认情况下:

第一次接受请求时,这个Servlet会进行实例化(构造方法),初始化(init),然后服务(service)

从第二次请求开始,都是服务

关闭tomcat,这个Servlet会被销毁(destroy)

Servlet的生命周期,简单的概括这就分为四步:Servlet类加载--->实例化--->服务--->销毁;

第一次请求时,tomcat才会去实例化,初始化,然后再服务,这样可以提高系统的启动速度

Javaweb servlet体系结构与原理剖析相关推荐

  1. MVC 模式/Servlet/JSP 编译原理剖析:Servlet 组件到底属于 MVC 模式的哪一层?

    文章目录 前言 一.回忆什么是 MVC 模式? 1.1.Model.View.Controller 组件介绍 1.2.明确 View 与 Controller 组件区别 二.什么是 Servlet? ...

  2. JavaWeb第一讲 Servlet的工作原理及生命周期

    Servlet的工作原理及生命周期 (一)Tomcat容器模型 Servlet的运行离不开Tomcat,那我们先弄清楚Tomcat的容器模型. 由上图可以看出,在Tomcat下有一个Container ...

  3. java校验框架源码解析_Spring Boot原理剖析和源码分析

    Spring Boot原理剖析和源码分析 依赖管理 问题一:为什么导入dependency时不需要指定版本? spring-boot-starter-parent依赖 org.springframew ...

  4. 视频教程-Java异常原理剖析-Java

    Java异常原理剖析 曾任职于国内知名校企合作单位.超过6年教育行业工作经验.曾在多家线上教育平台讲授过公开课.和VIP课程,擅长讲授JAVASE.JAVAWEB相关的课程.授课氛围清晰自然,讲解内容 ...

  5. Shiro系统权限管理、及原理剖析

    1.简介 常用的Java EE安全框架有shiro.spring security.shiro被应用非常广泛,可以集成cas,搭建单点登录系统.spring security则被认为比较重,应用没有s ...

  6. 网关,路由,局域网内的通信及不同的网络间通信实现的原理剖析

    百度百科定义网关: 网关(Gateway)又称网间连接器.协议转换器.网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连.网关既可以用于广域网互连,也可以用于局域网 ...

  7. SpringSecurity原理剖析及其实战(三)

    SpringSecurity原理剖析及其实战(三) 1.自定义登录页面 2.过滤器链模式与责任链模式 3.Security Session 4.RememberMe实现 5.退出登录 6.CSRF 1 ...

  8. JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)

    JavaWeb--Servlet Tomcat工作机制动画演示(点击动图可全屏观看) 什么是Servlet Servlet(Server Applet),全称Java Servlet,未有中文译文.是 ...

  9. socket之send和recv原理剖析

    socket之send和recv原理剖析 1. 认识TCP socket的发送和接收缓冲区 当创建一个TCP socket对象的时候会有一个发送缓冲区和一个接收缓冲区,这个发送和接收缓冲区指的就是内存 ...

最新文章

  1. Graph Normalization (GN):为图神经网络学习一个有效的图归一化
  2. html线框聚焦效果,24种表单input输入框聚焦动画特效
  3. Sentinel(十八)之注解支持
  4. 1092 最好吃的月饼 (20 分
  5. 1 CO配置-企业结构-定义-创建经营组织(Operating Concern)
  6. 宝塔mysql表使用中_Mysql-表的基本操作
  7. 11.30 如何取得当事人的银行账号?
  8. 将 MySQL 数据库恢复到某个时间点
  9. 计算机关于剪贴板的知识,如何打开电脑剪贴板图文教程
  10. 【pys60笔记】中文
  11. 山东理工oj答案java_山东理工大学ACM程序设计竞赛-山东理工ACM主页.DOC
  12. H5禁止苹果手机页面缩放
  13. icp许可证申请:一文读懂icp许可办理流程、费用
  14. <C++>运算符重载完结,详解赋值,关系,函数调用运算符
  15. Ansiable批量管理工具
  16. 新手小白如何画中世纪骑士铠甲?有什么需要注意?
  17. 中海达ihand30手簿使用说明_中海达iHand30 手簿使用说明书
  18. 2022-2028年中国红枣行业发展模式分析及市场分析预测报告
  19. 开关电源LLC基本原理
  20. layui lay-active 实现button click点击事件

热门文章

  1. 关于一个小游戏 ———猜数字
  2. 主动学习(Active Learning)系列介绍(三)搜索假设空间(Searching Through the Hypothesis Space)
  3. Pytorch简单实现BiLSTM文本生成
  4. XMLHttpRequest同步和异步请求
  5. python分析数据的变化趋势_调查报告数据分析怎么做?
  6. 关于vRA 6.2.1(vCAC)公网端口映射
  7. 个人支付系统源码 支付宝包装网银+支付宝网关软件+PC端监控+支付宝全自动收款系统软件
  8. geohash算法的实现及可视化(以广州为例)
  9. 三、6【Verilog HDL】基础知识之门级建模
  10. Linux下,Apache及PHP项目报Core错误Program terminated with signal 7, Bus error