JSP/Servlet工作原理
当客户端浏览器向服务器请求一个 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工作原理相关推荐
- JSP/Servlet 工作原理
Servlet Servlet Servlet 没有 main 方法,不能够独立的运行,它的运行需要容器的支持,Tomcat 是最常用的 JSP/Servlet 容器. Servlet 运行在 Ser ...
- JSP+JavaBean+Servlet工作原理实例…
JSP+JavaBean+Servlet工作原理实例讲解 首先,JavaBean和Servlet虽都是Java程序,但是是完全不同的两个概念.引用mz3226960提出的MVC的概念,即M-model ...
- Tomcat Servlet 工作原理
文章目录 Tomcat Servlet 工作原理 Servlet Tomcat解析Context容器过程及如何构建Servlet Servlet容器启动过程 Web应用初始化工作 创建Servlet实 ...
- servlet工作原理_Servlet 生命周期、工作原理
Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Ser ...
- Servlet系列学习笔记1 --- Servlet工作原理和生命周期
目录 一.Servlet API概述 二.Servlet工作原理 三.Servlet接口 四.Servlet的生命周期 五.ServletRequest 六.ServletResponse Servl ...
- Servlet 工作原理解析
2019独角兽企业重金招聘Python工程师标准>>> 从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servle ...
- 【Java】Servlet 工作原理解析
Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...
- Servlet 工作原理解析--转载
原文:http://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html?ca=drs- Web 技术成为当今主流的互联网 Web 应用 ...
- 超详细 Servlet工作原理解析
Web技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet的工作原理是成为一名合格的 Java Web 技术开发人员的基本 ...
最新文章
- android5多窗口,教程 开启 Nexus5 Android M 的多窗口模式。
- linux 调试利器gdb, strace, pstack, pstree, lsof
- SAP WM初阶之TO报表LX10 - Evaluation of movements per storage type
- 局域网交换(交换机三大原理.基本配置)
- 「我要出轨了」!伯克利的这个AI,可以预测机器人何时将脱离
- python处理表格数据-python通过xrld库读取表格数据
- Redis分布式锁---完美实现
- c ++向量库_在C ++中对2D向量进行排序
- 五:Java+SpringBoot集成SwaggerUI
- 经纬度,墨卡托等坐标转换
- win7系统下VS2015中CUDA8.0调试程序问题
- springboot+dubbo
- 部署SpringBoot项目到腾讯云或其他服务器
- 运用GRASP原则来做uml交互类图-------pos机实例
- H264 视频文件 帧格式
- paip.获取当前实际北京时间API
- Java反射机制--反射概述
- 算法 | 生命游戏 (Game of Life)
- 学到了林海峰,武沛齐讲的Day16完
- 面试官问你为什么选择做客服_在线客户服务-您的选择
热门文章
- Java编程 JDBC连接Oracle数据库
- 常见web系统默认口令弱口令总结
- 苹果cmsV10响应式大橙子和B站模板源码(带安装教程)
- 通过建站学运维(课时10)
- 启动DELPHI2007出现 EditorLineEnds.ttr 错误的解决方法
- nginx——不同前端项目共用一个端口
- PaddleWeekly | ArcFace Paddle全面开源,人脸识别也可以轻松实战
- 笔记:基于keras的不同神经网络模型Minst手写体识别
- Oracle常用日期计算(年初、月初、本周第一天、当年第几周、当月第几周)
- 【Python】太神奇了,一行命令行将Notebook转换成PPT动态网页!