当客户端浏览器向服务器请求一个 Servlet 时,服务器收到该请求后,首先到容器中检索与请求匹配的 Servlet 实例是否已经存在。

若不存在,则 Servlet 容器负责加载并实例化出该类 Servlet的一个实例对象,接着容器框架负责调用该实例的 init() 方法来对实例做一些初始化工作,然后Servlet 容器运行该实例的 service() 方法。

若 Servlet 实例已经存在,则容器框架直接调用该实例的 service() 方法。

service() 方法在运行时,自动派遣运行与用户请求相对应的 doXX() 方法来响应用户发起的请求。

通常,每个 Servlet 类在容器中只存在一个实例,每当请求到来时,则分配一条线程来处理该请求。

在处理请求时:

1、Servlet容器会创建一个请求对象ServletRequst,其中封装了用户请求的信息,以便处理客户端请求,此外还会创建一个响应对象ServletResponse,用于响应客户端请求,想客户端返回数据。

2、然后Servlet容器把创建好的ServletRequst和ServletResponse对象传给用户所请求的Servlet。

3、Servlet利用ServletResponse包含的数据和自身的业务逻辑处理请求,并把处理好的结果写在ServletResponse中,最后Servlet容器把响应结果传给用户。

结合如下流程图:

当客户端浏览器向服务器请求一个 JSP 页面时,服务器收到该请求后,首先检查所请求的这个JSP 文件内容 ( 代码 ) 是否已经被更新,或者是否是 JSP 文件创建后的第一次被访问:

--如果是,那么,这个 JSP 文件就会在服务器端的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件。紧接着,这个 Servlet 类会在 Java 编译器的作用下被编译成一个字节码文件,并装载到 jvm 解释执行。剩下的就等同于 Servlet 的处理过程了。

--如果被请求的 JSP 文件内容 ( 代码 ) 没有被修改,那么它的处理过程也等同于一个 Servlet 的处理过程。即直接由服务器检索出与之对应的 Servlet 实例来处理。

需要注意的是,JSP 文件不是在服务器启动的时候转换成 Servlet 类的。而是在被客户端访问的时候才可能发生转换的 ( 如 JSP 文件内容没有被更新等,就不再发生 Servlet 转换 )。

就 Tomcat 而言,打开目录 %Tomcat%/work/%您的工程文件目录%,然后会看到里面有 3个子目录:org/apache/jsp,若没有这 3 个目录,说明项目的 JSP 文件还没有被访问过,打开进到 jsp 目录下,会看到一些 *_jsp.java 和 *_jsp.class 文件,这就是 JSP 文件被转换成

Servlet 类的源文件和字节码文件了。

有兴趣的话,可以使用浏览器访问服务器中的 JSP,然后观察 JSP 转换 Servlet 以及编译的时机

结合如下流程图:

Servlet和Jsp

JSP 本质是一个 Servlet,它的运行也需要容器的支持。
在 JSP 和 Servlet 文件中都可以编写 Java 和 HTML 代码,不同的是,
Servlet 虽然也可以动态的生成页面内容,但更加偏向于逻辑的控制。
JSP 最终被转换成 Servlet 在 jvm 中解释执行,在 JSP 中虽然也可以编写 Java 代码,但它更加偏向于页面视图的展现。

在 MVC 架构模式中,就 JSP 和 Servlet 而言,C 通常由 Servlet 充当,V 通常由 JSP 来充当。

JSP/Servlet工作原理相关推荐

  1. JSP/Servlet 工作原理

    Servlet Servlet Servlet 没有 main 方法,不能够独立的运行,它的运行需要容器的支持,Tomcat 是最常用的 JSP/Servlet 容器. Servlet 运行在 Ser ...

  2. JSP+JavaBean+Servlet工作原理实例…

    JSP+JavaBean+Servlet工作原理实例讲解 首先,JavaBean和Servlet虽都是Java程序,但是是完全不同的两个概念.引用mz3226960提出的MVC的概念,即M-model ...

  3. Tomcat Servlet 工作原理

    文章目录 Tomcat Servlet 工作原理 Servlet Tomcat解析Context容器过程及如何构建Servlet Servlet容器启动过程 Web应用初始化工作 创建Servlet实 ...

  4. servlet工作原理_Servlet 生命周期、工作原理

    Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Ser ...

  5. Servlet系列学习笔记1 --- Servlet工作原理和生命周期

    目录 一.Servlet API概述 二.Servlet工作原理 三.Servlet接口 四.Servlet的生命周期 五.ServletRequest 六.ServletResponse Servl ...

  6. Servlet 工作原理解析

    2019独角兽企业重金招聘Python工程师标准>>> 从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servle ...

  7. 【Java】Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  8. Servlet 工作原理解析--转载

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html?ca=drs- Web 技术成为当今主流的互联网 Web 应用 ...

  9. 超详细 Servlet工作原理解析

    Web技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet的工作原理是成为一名合格的 Java Web 技术开发人员的基本 ...

最新文章

  1. android5多窗口,教程 开启 Nexus5 Android M 的多窗口模式。
  2. linux 调试利器gdb, strace, pstack, pstree, lsof
  3. SAP WM初阶之TO报表LX10 - Evaluation of movements per storage type
  4. 局域网交换(交换机三大原理.基本配置)
  5. 「我要出轨了」!伯克利的这个AI,可以预测机器人何时将脱离
  6. python处理表格数据-python通过xrld库读取表格数据
  7. Redis分布式锁---完美实现
  8. c ++向量库_在C ++中对2D向量进行排序
  9. 五:Java+SpringBoot集成SwaggerUI
  10. 经纬度,墨卡托等坐标转换
  11. win7系统下VS2015中CUDA8.0调试程序问题
  12. springboot+dubbo
  13. 部署SpringBoot项目到腾讯云或其他服务器
  14. 运用GRASP原则来做uml交互类图-------pos机实例
  15. H264 视频文件 帧格式
  16. paip.获取当前实际北京时间API
  17. Java反射机制--反射概述
  18. 算法 | 生命游戏 (Game of Life)
  19. 学到了林海峰,武沛齐讲的Day16完
  20. 面试官问你为什么选择做客服_在线客户服务-您的选择

热门文章

  1. Java编程 JDBC连接Oracle数据库
  2. 常见web系统默认口令弱口令总结
  3. 苹果cmsV10响应式大橙子和B站模板源码(带安装教程)
  4. 通过建站学运维(课时10)
  5. 启动DELPHI2007出现 EditorLineEnds.ttr 错误的解决方法
  6. nginx——不同前端项目共用一个端口
  7. PaddleWeekly | ArcFace Paddle全面开源,人脸识别也可以轻松实战
  8. 笔记:基于keras的不同神经网络模型Minst手写体识别
  9. Oracle常用日期计算(年初、月初、本周第一天、当年第几周、当月第几周)
  10. 【Python】太神奇了,一行命令行将Notebook转换成PPT动态网页!