(六)JSP与Servlet的关系

ops/2024/9/20 9:20:41/ 标签: java, servlet, 开发语言, intellij-idea, idea, intellij idea

JSP与Servlet的关系

JSP(Java Server Pages)是继Servlet后Sun公司推出的新技术。JSP技术在传统的HTML文件中插入Java程序段和JSP标记,从而形成JSP文件(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Windows系统下运行,也能在其他操作系统下运行。

JSP和Servlet都是动态的Web技术,JSP是以Servlet为基础开发的,它被翻译成Servlet再执行,所以在底层运行机制上和Servlet有共同之处。

Servlet与JSP的区别如下:

1. 编程方式不同

    JSP是为了解决Servlet编程相对困难而开发的技术,因此JSP在程序的编写方面比Servlet要容易,Servlet严格遵循Java语言的编程标准,而JSP则遵循脚本语言的标准。JSP是由Servlet技术发展起来的,具备Servlet的功能,但是将生成的内容与显示分离比Servlet优化,更简单易用。

2. 编译执行方式不同

JSP并不需要另外进行编译,JSP Container会自动完成这一工作,而Servlet在每次修改代码之后都需要编译完才能执行。

3. 运行速度不同

由于JSP Container将JSP编译成Servlet需要一些时间,故JSP的运行速度比Servlet要慢一些。不过,如果JSP文件能毫无变化地重复使用,它在第一次以后的调用中运行速度就会和Servlet一样了,这是因为JSP Container接到请求以后会确认传递过来的JSP是否有改动,如果没有改动的话,将直接调用JSP编译过的Servlet类,并提供给客户端解释执行,如果JSP文件有所改变,JSP Container将重新将它编译成Servlet,然后再提交给客户端。

4. 应用范围不同

JSP可以同时负责Web应用的显示任务和业务逻辑,Servlet主要用于处理后台应用。下面的JSP代码实现了和Servlet相同的显示效果。但在实现功能上JSP的代码比Servlet简洁清晰。

<%@ page import=”java.util.*” pageEncoding=”ISO-8859-1”%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

      <title>Hello Servlet</title>

</head>

<body>

  <%out.print(“Hello Servlet”);%>

</body>

</html>

JSP运行机制

1. Web容器(Tomcat等)接收到用户的第一个JSP页面请求时,JSP引擎将这个JSP页面转换为Java源代码(Servlet类),在转换的过程中,如果发现JSP文件有任何的语法错误,转换过程将终止,并向服务器和客户端输出错误信息。

2. 然后JSP引擎用javac编译Java源代码生成class文件。

3. 接着Web容器加载class文件,并从此创建一个新的Servlet对象进行实例化。

4. 然后jspService()方法被调用来处理客户端的请求。

5. 容器创建一个响应文档,将文档发送给用户,若干时间后,用户再次访问这个JSP时,容器会再次创建一个响应文档,直到容器卸载了这个class文件。

6. 当用户卸载了这个class文件后,再次访问时,JSP引擎并不重新转换和编译这个JSP文件,而是对它进行重新初始化,并创建一个响应文档,返回给客户端。

7. 如果JSP文件被修改了,服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则将编译结果取代内存中的Servlet,并继续上述处理过程。
    对每一个请求,Web容器创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。当第一次加载JSP页面时,因为要将JSP文件转换为Servlet类,所以响应速度较慢。当再次请求时,JSP容器就会直接执行第一次请求时产生的Servlet,而不必再重新转换JSP文件,所以其执行速度和Servlet执行速度几乎相同。 


http://www.ppmy.cn/ops/13525.html

相关文章

实验4 数字频率计

实验目的&#xff1a; 1、使用铆孔U7输出一个脉冲&#xff0c;频率不定。 2、使用铆孔V7测量脉冲频率&#xff0c;并在数码管上显示。 实验内容及步骤&#xff1a; 设计原理 测量频率的方法有很多&#xff0c;按照其工作原理分为无源测量法、比较法、示波器法和计数法等。…

es安装中文分词器

下载地址&#xff0c;尽量选择和自己本地es差不多的版本 https://github.com/infinilabs/analysis-ik/releases 下载好&#xff0c;解压&#xff0c;把里面的文件放到es的plugins/ik目录下 把plugin-descriptor.properties文件里的es版本改成自己对应的 再启动es&#xff0c;能…

FinalShell 远程连接 Linux(Ubuntu)系统

Linux 系列教程&#xff1a; VMware 安装配置 Ubuntu&#xff08;最新版、超详细&#xff09;FinalShell 远程连接 Linux&#xff08;Ubuntu&#xff09;系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题&#xff1a;为什么使用 FinalShell 连接&#xff0…

酚酞基聚芳醚酮(PEK-C)应用领域广泛 我国企业具备其自主研发及生产实力

酚酞基聚芳醚酮&#xff08;PEK-C&#xff09;应用领域广泛 我国企业具备其自主研发及生产实力 酚酞基聚芳醚酮&#xff08;PEK-C&#xff09;又称酚酞型聚芳醚酮&#xff0c;指由亚苯基环通过醚键和羰基连接而成的高分子材料。酚酞基聚芳醚酮具有模量高、强度高、抗冲击、热稳…

查看linux的主机配置脚本

废话不说 直接上指令 curl -Lso- bench.sh | bash 等待后&#xff0c;结果如图&#xff1a; 使用后没有问题&#xff0c;看情况使用 出事概不负责 介意勿用&#xff01;&#xff01;&#xff01;

告别互信息:跨模态人员重新识别的变分蒸馏

Farewell to Mutual Information: Variational Distillation for Cross-Modal Person Re-Identification 摘要&#xff1a; 信息瓶颈 (IB) 通过在最小化冗余的同时保留与预测标签相关的所有信息&#xff0c;为表示学习提供了信息论原理。尽管 IB 原理已应用于广泛的应用&…

黄金行情下跌有投资机会吗?

尽管黄金价格的波动常常引起投资者的高度关注&#xff0c;但行情的下跌未必只是警讯&#xff0c;亦可能蕴藏着某些难得的投资机会。总之&#xff0c;答案是肯定的——在黄金行情下跌时&#xff0c;依旧有适宜的投资机会&#xff0c;只是这需要投资者具备相应的应对知识和策略。…

团队协作:如何利用 Gitee 实现多人合作项目的版本控制

文章目录 前言一、名词解释1、Git是什么&#xff1f;2、Gitee、GitHub和GitLab 二、操作步骤1.安装Git2.创建Gitee仓库3.用vscode连接仓库4. 克隆远程仓库 总结 前言 在软件开发中&#xff0c;有效地管理代码是至关重要的。Gitee 是一个功能强大的代码托管平台&#xff0c;提供…

SSRF漏洞

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.SSRF漏洞概述 SSRF是一种常见的安全漏洞&#xff0c;当黑客需要攻击某一内网中的服务器(A) 时&#xff0c;攻击者会利用该漏洞指示该内网中的一台服务器&#xff08;B&#xff09;去攻击 &a…

3. 无重复字符的最长子串/438. 找到字符串中所有字母异位词/560. 和为 K 的子数组

3. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 思路&#xff1a;想象一下我们…

【配电网故障定位】基于二进制粒子群算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#78】

文章目录 【获取资源请见文章第6节&#xff1a;资源获取】1. 配电网故障定位2. 二进制粒子群算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络发生故障…

Pytorch或Tensorflow 深度学习库安装 (简易版)

Tensorflow 2.X安装 0、 pytorch 支持 conda虚拟环境 cuda 和 cudnn1、创建conda环境2、测试GPU是否可用3、在机器上安装cuda 和 cudnnCUDA 安装cudnn 安装 0、 pytorch 支持 conda虚拟环境 cuda 和 cudnn 如果只用pytorch&#xff0c; 只需在虚拟环境安装cuda 和 cudnn即可&am…

蓝桥杯——分巧克力

思路非常简单&#xff0c;就是一个二分法。 注意一下l和r的取值&#xff0c;就可以了。 // 如何进行切分巧克力&#xff1a;横纵除法。例如&#xff1a;一块6*5的&#xff0c;欲切为3*3的小块&#xff0c;横&#xff1a;6/2 3&#xff1b;纵&#xff1a;5/31.所以可以切成3*…

Linux套接字编程详解

Linux套接字编程 预备知识IP地址和MAC地址套接字结构网络字节序 UDP套接字编程服务端代码客服端代码 TCP 套接字守护进程 计算器模块1 日志头文件序列化和反序列化 预备知识 IP地址和MAC地址 MAC地址用来在局域网中标识唯一主机 Ip地址用于在广域网中标识唯一主机 &#xff0…

达梦(DM)数据库管理表

达梦DM数据库管理表 管理表管理表的准则表的存储空间上限表的存储位置 创建表创建普通表指定表的聚集索引查询建表更改表删除表清空表查看表定义查看表空间使用 表是数据库中数据存储的基本单元&#xff0c;是对用户数据进行读和操纵的逻辑实体&#xff0c;表由列和行组成&…

代码随想录算法训练营第三十七天| 738.单调递增的数字、968.监控二叉树

系列文章目录 目录 系列文章目录738.单调递增的数字贪心算法 968.监控二叉树&#xff08;困难题&#xff09;贪心算法 738.单调递增的数字 贪心算法 从后往前遍历&#xff0c;如果前一个数字大于后一个数字chars[i] > chars[i 1]&#xff0c;则后一个数字变为9&#xff0…

C++11 数据结构5 队列的概念,队列的顺序存储,实现,测试

一&#xff0c;队列的概念 队列是一种特殊的受限制的线性表。 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。 队列是一种先进先出的t&#xff08;First In First Out&#xff09;的线性表&#xff0c;简称FIF…

XiaodiSec day011 Learn Note 小迪安全学习笔记

XiaodiSec day011 Learn Note 小迪安全学习笔记 记录得比较凌乱&#xff0c;不尽详细 day11 工具: fofa quake kunyu suize水泽 ari灯塔 of 信息收集 四大引擎 fofaquakeshodanzoomeye fofa 和 quake比较常用 使用引擎搜索信息 得到中间件和操作系统 能够筛选端口 目的是…

计算机三级网络技术考试第3章IP地址规划技术

IP地址为192.168.15.1/27的 子网掩码可以写为&#xff1a;255.255.255.224。 其中27 表示的是子网掩码的长度&#xff0c;也就是说子网掩码是27个1和5个0组成的&#xff0c;即11111111 11111111 11111111 11100000。 网络地址171.22.168.0的子网掩码为&#xff1a;255.255.248…

2024新算法爱情进化算法(LEA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验

简介&#xff1a; 2024新算法爱情进化算法&#xff08;LEA&#xff09;和经典灰狼优化器&#xff08;GWO&#xff09;进行无人机三维路径规划设计实验。 无人机三维路径规划的重要意义在于确保飞行安全、优化飞行路线以节省时间和能源消耗&#xff0c;并使无人机能够适应复杂环…