(六)Servlet教程——JSP与Servlet的关系

server/2024/9/24 1:16:32/

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/server/27507.html

相关文章

MongoDB聚合运算符:$sqrt

MongoDB聚合运算符&#xff1a;$sqrt 文章目录 MongoDB聚合运算符&#xff1a;$sqrt语法使用举例 $sqrt聚合运算符返回数值的平方根&#xff0c;数值必须为正数&#xff0c;返回值为双精度数。 语法 { $sqrt: <number> }<expression>为可解析为非负数的表达式。 …

Flask 3 保姆级教程(一):快速上手

一、创建项目 PyCharm 中新建项目 创建完成后会出现这么个项目 以下是代码解析&#xff1a; # 导入了 Flask 类 from flask import Flask# 创建了一个 Flask web 应用的实例&#xff0c;并将其赋值给变量 app # __name__ 是一个特殊的 Python 变量&#xff0c;它表示当前模块…

Android如何使用XML自定义属性

1、定义 在res/values文件下定义一个attrs.xml文件&#xff0c;代码如下: 2、使用 在布局中使用&#xff0c; 示例代码如下&#xff1a; 3、获取 最终来到这里&#xff1a;

手机测试之-adb

一、Android Debug Bridge 1.1 Android系统主要的目录 1.2 ADB工具介绍 ADB的全称为Android Debug Bridge,就是起到调试桥的作用,是Android SDK里面一个多用途调试工具,通过它可以和Android设备或模拟器通信,借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多…

vulnhub——DC:8

文章目录 Information collectionPenetration1、sqlmap获取用户名密码2、利用web端反弹shell3、利用Suid提权 Information collection └─# arp-scan -l …

字典及GitHub字典爬取工具

红队API接口Fuzz字典可以用于WEB安全&#xff0c;渗透测试&#xff0c;SRC等场景 完整文件已上传知识星球&#xff0c;需要的朋友可加入查看。

Cache的容量,总容量,行长,字地址位数,cache行位数。

https://blog.csdn.net/Cbelieveyouself/article/details/129691552 另外&#xff0c;cache不会存储行号和组号&#xff0c;节省空间。

图搜索算法详解与示例代码

在计算机科学领域&#xff0c;图搜索算法是一类用于在图数据结构中查找特定节点或路径的算法。图搜索算法在许多领域都有着广泛的应用&#xff0c;包括网络路由、社交网络分析、游戏开发等。本文将详细介绍几种常见的图搜索算法&#xff0c;包括深度优先搜索&#xff08;DFS&am…