深入了解 JSP 的运行过程

什么是JSP? 1、JSP本质就是Servlet,只不过主要负责页面的展示,数据的展示。 2、JSP: JavaServer Pages【SUN公司制定的另一套规范】基于java语言实现的服务器端页面。 3、动态网页技术:Servlet + Jsp【网页上展示的数据不是固定的,是多变的,当数据库中数据发生变化的时候,页面就随着发生了变化。】 4、怎么开发JSP? * JSP文件的扩展名通常叫做... 阅读详情

什么是 JSP?

JSP(全称JavaServer Pages)是由 Sun Microsystems 公司主导创建的一种==动态==网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成 HTML、XML 或其他格式文档的 Web 网页,然后返回给请求者。

JSP 主要作用

  • 代替 Servlet 程序回传 HTML 页面的数据。

接下来我们去看看 JSP 是如何实现代替 Servlet 的。

JSP 在本质上就是一个 Servlet 程序?

如果我们访问一个 Servlet 程序,让它返回给我们一个前端页面,那么就需要在 JavaWEB 项目下编写一个 HelloServlet 程序:

package com.example.demo;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet("/hello-servlet")
public class HelloServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=utf8");
        // HelloWorld 页面
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html>");
        out.println("<html lang='en'>");
        out.println("<head>");
        out.println("<meta charset='UTF-8'>");
        out.println("<title>Title</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello World!</h1>");
        out.println("</body>");
        out.println("</html>");
    }

}

当我们启动程序,在浏览器访问http://localhost:8080/hello-servlet 时,浏览器会回传显示一个简单的页面

按 F12 进入开发者模式,可以看到 Servlet 程序响应回传了我们在Servlet 程序中拼接的 html 代码。

那么到这里还不能让我们明白 JSP 就是一个 Servlet,再往下看。

我们创建一个JSP 文件 index.jsp,这样启动项目时,自动弹出的首页就是我们的 index.jsp 页面。

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %></h1>
</body>
</html>

我们启动项目

从控制台找到项目部署路径

C:\Users\Jie\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\38d57dfc-4429-4e47-8912-74706f5fff5a

我们直接访问此路径,可以看到目录下存在的文件。

进入work\Catalina\localhost\ROOT\org\apache\jsp 目录,可以看到存在的两个文件【index_jsp.java】和【index_jsp.class】

接着我们将这两个文件删除,同时在浏览器进行刷新页面,可以看到目录下新增了我们刚删除的两个文件【index_jsp.java】和【index_jsp.class】

接着,我们使用 Notepad++ 打开【index_jsp.java】文件,查看编译之后的 Java 文件代码。

可以看到 index.jsp 中 HTML 部分的代码被嵌入在 java 代码中,这和我们一开始在 HelloServlet 中拼接的 HTML 代码一摸一样。

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {
   /*something*/                  
}

查看源码我们可以看见 index_jsp 继承了 org.apache.jasper.runtime.HttpJspBase 类,

package org.apache.jasper.runtime;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.HttpJspPage;

import org.apache.jasper.Constants;
import org.apache.jasper.compiler.Localizer;

/**
 * This is the super class of all JSP-generated servlets.
 *
 * @author Anil K. Vijendran
 */
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
    /*something*/
}

我们继续查看 org.apache.jasper.runtime.HttpJspBase 类的源码,可以发现,HttpJspBase 类直接继承了 HttpServlet类。也就是说,JSP 翻译出来的 index_jsp.java 类,它间接了继承 HttpServlet 类,这和我们直接编写 Servlet 程序继承 HttpServlet 类 是一样的。

因此 JSP 本质就是一个 Servlet 程序。它可以省掉不少我们在 Servlet 中拼接 HTML 代码的时间。不过随着前后端分离的出现,JSP 也逐渐被淘汰。

JSP的执行过程

当我们第一次访问 JSP 页面的时候,Tomcat 服务器主要会帮我们完成:

  1. 把 JSP 页面翻译成为一个 .java 源文件
  2. 对 .java 源文件编译成为 .class 字节码文件
  3. 执行 .class 字节码文件返回结果

当我们第二次访问 JSP 页面的时候,如果未做更改,则使用上次编译的 .class 文件;若修改过,则重新编译。

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包 激光雷达和相机联合标定(一)——ROS同步解包 阅读详情

相关推荐

使用下一代的嵌入式IDE-PlatformIO 教程

1.生成工程 1.1 打开STM32CubeMX: 选择你的MCU,这里我用的是STM32F103RC RCC中开启外部HSE时钟,外部时钟比HSI更稳定些 开启DEBUG 4线 打开串口1用于打印调试信息,波特率115200,校验位0,停止位1 打开串口2用于MODBUS协议,波特率9600,校验位0,停止位1 接入RT-thread:参考官方文档 基于 CubeMX 移植 RT-Thread Nano 根据官方文档,需要1.取消生成HardFault_Handler、PendSV_Handler、Sy

jiladahe1997的博客 3万+

JSP

JSP 文章目录JSP一、JSP的实现原理二、JSP的页面组成2.1 Java脚本2.2 声明2.3 表达式2.4 JSP页面注释2.5 指令2.7内置对象三、EL表达式四、JSTL 一、JSP的实现原理 JSP中包含HTML和Java代码。 JSP不能直接运行,当把JSP放到tomcat容器中,第一次访问该JSP时,会先把JSP转换(转译)成Java(Servlet)源代码,然后编译成字节码,最后才运行。 过程:JSP---->(转换、转译)—>(Servlet)源代码------->

qq_40298175的博客 936

(保姆教程)Spyder 配置Tensorflow(2.5.0)和keras(2.4.3)

(保姆教程)Spyder 配置Tensorflow(2.5.0)和keras(2.4.3)

qq_43102225的博客 1万+

jsp 的运行原理

jsp 的本质 ,其实是一个 Servlet 程序。 一开始 day09 目录还是空目录。 然后,我们在浏览器输入一个 jsp 文件的访问路径访问。 比如 http://127.0.0.1:8080/day09/index.jsp 访问 index.jsp 文件day09 目录马上会生成 org\apache\jsp 目录。 并且在会中有两个文件。 于是,我们关联源代码。去查看一下 HttpJspBase 类的内容。从源码的类注释说明中,我们发现。HttpJspBase 这个 类就是所有 jsp 文件

一个菜鸡的博客 993

本地部署大模型 vs 网页版大模型区别

fill:#333;color:#333;color:#333;fill:none;本地服务器/工作站硬件资源私有化部署GPU集群高速存储模型文件训练框架推理引擎。

Ds-Rag的博 1712

利用setEcoMode优化innovus中的ecoAddRepeater批量操作效率

本文详细介绍了在Cadence Innovus工具中,如何利用setEcoMode命令的batchMode参数,显著提升ecoAddRepeater命令在批量插入buffer或inverter时的操作效率。通过合并重复的初始化和数据库更新开销,该模式可将大规模时序修复操作的执行速度提升数倍,并提供了完整的脚本示例与最佳实践,帮助后端设计工程师优化ECO流程。

mango的博客 514

Jsp简介

Jsp 1. What Java Server Page Java 服务页面 Jsp只能在服务器上运行,不能脱离服务器 可以写Java代码的HTML文件 本质上是一个Servlet;具有构造器 2. Jsp的运行原理 第一次访问index.jsp的时候,JSP引擎会将JSP文件翻译成java文件 保存在 控制台输出第一行 Using CATALINA_BASE对应的目录下的 work 文件夹中,该目录中的cof 存放tomcat的配置信息,是在创建项目时复制的添加的tomcat本地文件保存地址复制过

wy 1346

华为OD新系统机试真题 2026.5.10 - 美观的灯笼

华为OD新系统机试真题【美观的灯笼】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【美观的灯笼】

qq_45776114的博客 642

tjsp

 tjsp

gpyz981的专栏 910

全能媒体工具深度测评(下篇一):AI图文生成+全能解压+图片去文字,一键搞定素材精修

解压50多种格式,文生图,图生图

cs821984831的博客 40

利用R批量计算相关系数

批量求相关系数

weixin_52073820的博客 1458

jsp运行java_jsp文件怎么运行

jsp文件的运行方法:首先客户端发出Request请求,JSP Container将JSP转译成Servlet的源代码;然后将产生的Servlet源代码进行编译,并加载到内存执行;最后把结果Response至客户端即可。当客户端浏览器向服务器发出访问一个JSP页面的请求时,服务器根据该请求加载相应的JSP页面,并对该页面进行编译,然后执行。推荐课程:Java教程。页面的执行过程如下图所示:客户端通...

weixin_42395135的博客 968

unity6000.0.3版本URP下ScriptableRendererFeature如何实现一张自定义贴图效果?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 585

JSP的编译过程

每一个JSP页面都会被Web容器编译成一个Java类,供web容器调用,并且生成HTML叶面回馈给用户。而了解其中的变异方法和规则,对我们学习JSP是非常有好处的,可以说学习好了这个编译原理,就已经学习好了大部分的JSP知识,剩下的工作就只剩下熟记一些tablib和反复应用以使自己更加熟练而已了JSP会被编译成.java放Tomcat/work/Catalina/localh...

weixin_34301132的博客 1192

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JSP运行原理

JSP的运行原理

RegSoleil的博客 668

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

javaweb开发之jsp开发

一、初始jsp 在web开发中前台页面需要使用html,css和js渲染页面展示给用户,之前我们学习了Servlet知道如果想要向前台输出内容需要使用HttpServletResponse对象获取打印流然后在一行一行的输出html标签,这对于开发者来说简直就是噩梦。针对这种情况SUN公司定义了一种用于开发动态web资源的技术也就是jsp。JSP全称是Java Serve...

weixin_30454481的博客 232

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

从源码分析JSP的本质

第一步,在IDEA中写一个JSP文件 <html> <body> <h2>Hello World!</h2> </body> </html> 第二步,找到IDEA配置目录下的Index_jsp.java文件 代码如下 /* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/9.0.38 * Generated at: 202

qq_38933832的博客 277

为什么JSP的内置对象不需要声明

本文将通过对一个JSP运行过程的剖析,深入JSP运行的内幕,并从全新的视角阐述一些JSP中的技术要点。 HelloWorld.jsp 我们以Tomcat 4.1.17服务器为例,来看看最简单的HelloWorld.jsp是怎么运行的。 代码清单1:HelloWorld.jsp HelloWorld.jsp  String message = "Hello World!

Happiness is more than pleasure without pain 691

动态网站开发学习笔记06:JSP技术

目标:了解JSP的概念与特征,能够知道JSP用于做什么1、JSP的概念JSP全名是Java Server Pages,即Java服务器页面。它是Servlet更高级别的扩展。在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。最终,JSP文件会通过Web服务器的Web容器编译成一个Servlet,用来处理各种请求。2、JSP的特征(1)跨平台。

HTML778的博客 601

jsp

一、JSP技术 1、JSP的脚本 (1):内部的java代码会被翻译到service方法内部 (2):会被翻译成service方法内部的out.print() (3):会被翻译成servlet的成员内容 2、JSP中的注释(可见范围不同) (1)html注释:——可见范围:jsp源码、翻译后的servlet(在work工作区间内)、页面显示的html源码 (2)java注释:单行

cccdotaer的博客 300

jsp是java_jsp其实是一个java类

我们打开tomcat的D:\Program_Files\apache-tomcat-8.0.32\work\Catalina\localhost\venus\org\apache\jsp,当我们访问过页面后会发现login.jsp会生成两个文件login_jsp.class和login_jsp.java我们打开java文件其中有这段代码out.write("\r\n");out.write(""-...

weixin_33696476的博客 305

JSP的生命周期

1、解析阶段:Servlet容器解析JSP文件的代码,如果有语法错误,就会向客户端返回错误信息 2、翻译阶段:Servlet容器把JSP文件翻译成Servlet源文件 3、编译阶段:Servlet容器编译Servlet源文件,生成Servlet类 4、初始化阶段:加载与JSP对应的Servlet类,创建其实例,并调用它的初始化方法。 5、运行时阶段:调用

想念的专栏 547

html和jsp的差异

很多人会误以是jsp是网页文件的另一扩展名称,原因如下:同样的html数据内容无论扩展名是jsp还是html,放到tomcat中都可以被访问得到相同的内容,其实这是一个非常大的误解。html文件是存储在服务器中的由网页制作人员编写好的静态数据,服务器只是简单的将其进行传递给浏览器,这一点上看它和一个图片没有太大的差别。jsp文件中的内容是要经过“编译,并在虚拟上执行的”,我...

weixin_34204057的博客 98

jsp练习1

由于jsp由各种脚本组成,所以注释也有各种格式。jsp注释只由开发人员看见,html则会发送到客户端,组成则为动态注释,为了对jsp嵌入的代码起作用。java格式的注释是为了写入大量代码。今天学习了page指令,常用的有import(设置导入的类包),contentType属性(防止产生乱码),language一般是默认的。今天编写时还出现了错误,不小心按了加号还是减号,其中几排被隐藏后怎么都展不开了,运行时出现了灰色,错误提示也比以往复杂了很多,修改难度提升。

kkqmp的博客 116
上一篇: Zookeeper如何网络通信+监听?看一看Watch机制
下一篇: 【算法】子序列问题合集
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值