当前位置: 首页 > news >正文

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源代码文件通常保存在服务器的临时目录中。

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内容,并将其发送回客户端浏览器。

http://www.lryc.cn/news/486191.html

相关文章:

  • 用python中的tkinter包实现进度条
  • oneplus3t-lineageos-16.1编译-android9
  • VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建
  • LeetCode --- 143周赛
  • [AI] 【提高认知】自动翻译技术的演变:从规则系统到深度学习的崛起
  • python机器人Agent编程——多Agent框架的底层逻辑(上)
  • 渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流
  • 学习日志011--模块,迭代器与生成器,正则表达式
  • ChatGPT 搜索 vs Google 搜索
  • 一文简单了解Android中的input流程
  • 【MySQL】SQL语言
  • 5.4.2-1 编写Java程序在HDFS上创建文件
  • The 3rd Universal CupStage 15: Chengdu, November 2-3, 2024(2024ICPC 成都)
  • 显示微服务间feign调用的日志
  • SOHO场景开局(小型,多子网):AP+管理型交换机+路由器+光猫
  • Android - Pixel 6a 手机OS 由 Android 15 降级到 Android 14 操作记录
  • linux系统kkFileView 配置https预览文件
  • stm32——通用定时器时钟知识点
  • 前端无感刷新token
  • 针对股票评论的情感分类器
  • Day18 Nim游戏
  • 理解反射,学会反射:撬开私有性质(private)的属性与方法
  • Redis在高性能缓存中的应用
  • 菲涅耳全息图
  • STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56
  • POI word转pdf乱码问题处理
  • 【GeekBand】C++设计模式笔记11_Builder_构建器
  • 面试经典 150 题:20、2、228、122
  • SQL面试题——持续增长问题
  • nginx源码安装配置ssl域名