JSP是如何被执行的?
JSP(JavaServer Pages)是一种用于构建动态Web页面的技术,它允许开发者在HTML、XML或其他文本格式的文档中嵌入Java代码。JSP页面在服务器端被编译成Servlet,然后由Servlet容器(如Tomcat)执行。以下是JSP页面的执行过程:
1. 请求到达
- 当客户端(通常是浏览器)发送一个HTTP请求到Web服务器时,服务器会根据请求的URL确定请求的资源类型。
- 如果请求的资源是一个JSP文件(通常以
.jsp
为扩展名),服务器会将请求转发给JSP引擎(也称为JSP容器)。
2. JSP页面转换为Servlet
- 首次请求:如果这是第一次请求该JSP页面,JSP引擎会读取JSP文件的内容,并将其转换为一个Java Servlet源代码文件。
- 转换过程:
- JSP页面中的静态内容(如HTML标记)会被转换为
out.println()
语句。 - JSP页面中的Java代码(如脚本片段、声明和表达式)会被直接嵌入到生成的Servlet中。
- 生成的Servlet源代码文件通常保存在服务器的临时目录中。
- JSP页面中的静态内容(如HTML标记)会被转换为
3. 编译Servlet
- 生成的Servlet源代码文件会被编译成字节码文件(
.class
文件)。 - 编译过程由JSP引擎调用Java编译器(
javac
)完成。
4. 加载和初始化Servlet
- 编译后的Servlet类会被加载到内存中。
- Servlet容器会调用Servlet的
init()
方法进行初始化。在这个阶段,可以进行一些初始化操作,如加载配置文件、建立数据库连接等。
5. 执行Servlet
- 当Servlet准备好后,Servlet容器会调用Servlet的
service()
方法来处理客户端请求。 service()
方法会根据请求的HTTP方法(如GET、POST)调用相应的doGet()
或doPost()
方法。- 在这些方法中,生成的Servlet会执行嵌入的Java代码,处理业务逻辑,并生成动态的HTML内容。
6. 生成响应
- 生成的HTML内容会被发送回客户端浏览器。
- 浏览器会解析并显示这些HTML内容。
7. 重复使用或销毁Servlet
- 对于后续的请求,如果JSP页面没有发生变化,Servlet容器可以直接使用已经编译好的Servlet来处理请求,而不需要再次进行转换和编译。
- 如果JSP页面发生了变化(如文件被修改),JSP引擎会重新执行上述步骤,重新转换、编译和加载新的Servlet。
8.示例
假设有一个简单的JSP页面index.jsp
,内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>JSP Example</title>
</head>
<body><h1>Hello, JSP!</h1><p>Current Time: <%= new java.util.Date() %></p>
</body>
</html>
转换后的Servlet源代码(伪代码):
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;public class index_jsp extends HttpServlet {public void init(ServletConfig config) throws ServletException {super.init(config);}public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html>");out.println("<head>");out.println("<title>JSP Example</title>");out.println("</head>");out.println("<body>");out.println("<h1>Hello, JSP!</h1>");out.println("<p>Current Time: " + new java.util.Date() + "</p>");out.println("</body>");out.println("</html>");}
}
.9.总结
JSP页面的执行过程主要包括请求到达、JSP页面转换为Servlet、编译Servlet、加载和初始化Servlet、执行Servlet、生成响应和重复使用或销毁Servlet。通过这种方式,JSP技术能够高效地生成动态的Web内容。
在JSP页面的执行过程中,以下操作是在服务器端完成的:
- 请求的接收和转发
- JSP页面的读取和转换为Servlet源代码
- Servlet源代码的编译
- Servlet类的加载和初始化
- Servlet的执行,包括处理请求和生成动态内容
- 生成的HTML内容的发送
- Servlet的缓存和重新编译
这些操作确保了JSP页面能够高效地生成动态的Web内容,并将其发送回客户端浏览器。
相关文章:
JSP是如何被执行的?
JSP(JavaServer Pages)是一种用于构建动态Web页面的技术,它允许开发者在HTML、XML或其他文本格式的文档中嵌入Java代码。JSP页面在服务器端被编译成Servlet,然后由Servlet容器(如Tomcat)执行。以下是JSP页面…...

用python中的tkinter包实现进度条
python中的tkinter包是一种常见的设计程序的GUI界面用的包。本文主要介绍这里面的一个组件:进度条(Progressbar)。Tkinter Progressbar里面对进度条组件已经做了一定的介绍,但比较抽象。本文以另一种方式介绍这个组件及其常用用法…...
oneplus3t-lineageos-16.1编译-android9
本仓库开发已经完毕,使用请直接从4.2开始 ** LineageOS16_oneplus3t仓库群克隆 、 编译 、 刷机** 编译过程若ctrlc强制终止,请重新从头编译 LineageOS16_oneplus3t仓库群克隆过程 LineageOS16_oneplus3t仓库群克隆过程描述: LineageOS16_oneplus3t_gitRepoLs_c…...

VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建
VSCodeESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建 1.开发环境搭建(安装ESP-IDF)2.开发环境搭建(安装VS Code)3.开发环境搭建(VSCode中安装ESP-IDF插件及配置) 1.开发环境搭建&am…...

LeetCode --- 143周赛
题目列表 3345. 最小可整除数位乘积 I 3346. 执行操作后元素的最高频率 I 3347. 执行操作后元素的最高频率 II 3348. 最小可整除数位乘积 II 一、最小可整除数位成绩I 由于本题的数据范围比较小,我们直接暴力枚举即可,代码如下 class Solution { p…...
[AI] 【提高认知】自动翻译技术的演变:从规则系统到深度学习的崛起
机器自动翻译 (MT) 是人工智能历史上最早的应用之一,尤其是在英语和俄语之间的翻译应用。自诞生以来,自动翻译技术从符号系统逐步演化到依赖大数据和深度学习的先进模型。本文将深入探讨机器翻译的早期方法、统计方法和现代神经网络方法的演变过程,帮助大家了解自动翻译技术…...

python机器人Agent编程——多Agent框架的底层逻辑(上)
目录 一、前言二、两个核心概念2.1 Routines(1)清晰的Prompt(2)工具调用json schema自动生成(3)解析模型的toolcall指令(4)单Agent的循环决策与输出 PS.扩展阅读ps1.六自由度机器人相…...

渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流
11月14日,渑池县人大副主任、工商联主席杨航率县中药材产业党委代表团一行13人,莅临河南广宇集团参观交流。河南广宇集团总经理王峰、副总经理王培等领导热情接待并陪同参观、座谈。 代表团一行首先参观了集团旗下郑州美信中医院(庚贤堂中医药…...

学习日志011--模块,迭代器与生成器,正则表达式
一、python模块 在之前学习c语言时,我们学了分文件编辑,那么在python中是否存在类似的编写方式?答案是肯定的。python中同样可以实现分文件编辑。甚至还有更多的好处: 提高代码的可维护性:当代码被分成多个文件时…...

ChatGPT 搜索 vs Google 搜索
原文:Amanda Caswell - 2024.11.01 随着 OpenAI 推出的实时搜索功能,ChatGPT 正在逐步成为像 Google 这样的传统搜索引擎的竞争对手。ChatGPT 以其对话式的回答方式而闻名,它能够在没有广告干扰的情况下提供实时的上下文信息。 我迫不及待地…...

一文简单了解Android中的input流程
在 Android 中,输入事件(例如触摸、按键)从硬件传递到应用程序并最终由应用层消费。整个过程涉及多个系统层次,包括硬件层、Linux 内核、Native 层、Framework 层和应用层。我们将深入解析这一流程,并结合代码逐步了解…...

【MySQL】SQL语言
【MySQL】SQL语言 文章目录 【MySQL】SQL语言前言一、SQL的通用语法二、SQL的分类三、SQLDDLDMLDQLDCL 总结 前言 本篇文章将讲到SQL语言,包括SQL的通用语法,SQL的分类,以及SQL语言的DDL,DML,DQL,DCL。 一、SQL的通用语法 在学习具体的SQL语句之前,先来…...

5.4.2-1 编写Java程序在HDFS上创建文件
本次实战涉及使用Java操作Hadoop HDFS,包括创建文件、判断文件存在性及异常处理。通过手动添加依赖、启动HDFS服务,成功在HDFS上创建和检查文件。进一步探索了文件操作的最佳实践,如检查文件存在性以避免重复创建,以及处理HDFS安全…...
The 3rd Universal CupStage 15: Chengdu, November 2-3, 2024(2024ICPC 成都)
Problem L. Recover Statistics 题目意思: 给定a, b, c三个值,确保构造的数列中包含满足题目的数量 解题思路: 100 中 选择a 50个, b45个, c4个。 #include <iostream>using namespace std;using ll long …...

显示微服务间feign调用的日志
第一步 package com.niuniu.common.config;import com.niuniu.common.CommonConstant; import com.niuniu.common.utils.UserContext; import feign.Logger; import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.context.annotation.…...

SOHO场景开局(小型,多子网):AP+管理型交换机+路由器+光猫
业务需求 1. 实现除光猫外,整网设备通过APP进行开局,开局部署完成后,能够通过APP远程运维。 2. 需要单独划分访客、办公、视频监控3个子网,其中访客子网供顾客无线上网使用,办公子网用于接入无线和有线办公终端&#x…...

Android - Pixel 6a 手机OS 由 Android 15 降级到 Android 14 操作记录
Pixel 6a 手机由 Android 14 升级到 Android 15了,但是由于一些原因又想降级回 Android 14, 能降吗?该怎么降级呢?本篇文章来记述实际操作过程,希望能给想做相同操作的人一些帮助。 答案当然是能降,而且我…...
linux系统kkFileView 配置https预览文件
思路: 1.kkfile的 context全局路径可以修改 context-path,比如:server.servlet.context-path 2.使用nginx反向代理 /kkfile 转发到 kkfile路径上 官网教程 kkFileView - 在线文件预览 1、配置config/application.properties. server.se…...

stm32——通用定时器时钟知识点
(该图来自小破站 铁头山羊老师的stm32标准库教学)...

前端无感刷新token
摘要: Axios 无感知刷新令牌是一种在前端应用中实现自动刷新访问令牌(access token)的技术,确保用户在进行 API 请求时不会因为令牌过期而中断操作 目录概览 XMLHttpRequestAxiosFetch APIJQuni.request注意事项: 访问…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...

ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...