JSP(全称JavaServer Pages)是由 Sun Microsystems 公司主导创建的一种==动态==网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成 HTML、XML 或其他格式文档的 Web 网页,然后返回给请求者。
JSP 主要作用
接下来我们去看看 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 页面的时候,Tomcat 服务器主要会帮我们完成:
当我们第二次访问 JSP 页面的时候,如果未做更改,则使用上次编译的 .class 文件;若修改过,则重新编译。
各位善信,今日吾来为汝等详解门口放何物可聚财最旺。此乃关乎家宅财运之关键,不可不察。先言盆栽。盆栽者,常见家居装饰物也。置于门口,既能美化环境,又具聚财之效。如富贵竹,实乃上佳之选。其寓意招财进宝,家中摆放数盆,可增祥瑞之气。另有铜钱草,亦为聚财之植物。此等盆栽,不仅赏心悦目,更能为家宅带来财气。然
2025-01-20 05:03:58
看着各家银行五花八门的银行卡,有个问题让我一直十分困惑。银行是怎么穿过我坚硬的外壳,看清我每个月能偿还多少钱的贷款呢?为什么有些人可以拿到10万元额度,而我却只有几千元呢?下面我们就来了解一下,银行到底是根据什么决定授信额度的。信用卡授信额度,是指银行在批准信用卡时,给予持卡人刷卡消费的最高透支限额
2025-01-20 04:16:29
问:现金分期、账单分期、消费分期,你可弄得清?使用信用卡,经常会接触“分期”这两个字眼。 如果你没有申请过,甚至都没有了解过,这三种分期可能让你傻傻分不清: 现金分期、账单分期、消费分期,到底有什么区别??要了解有什么不同,我们就要先从概念入手: 一、什么是现金分期? 答曰:现金分期由信用卡持卡人申
2025-01-20 02:04:20
律师解答12378受理范围有:(一)对全国银行业和保险业实行统一监督管理,维护银行业和保险业合法、稳健运行,对派出机构实行垂直领导。(二)对银行业和保险业改革开放和监管有效性开展系统性研究。参与拟订金融业改革发展战略规划,参与起草银行业和保险业重要法律法规草案以及审慎监管和金融消费者保护基本制度。法
2025-01-20 01:21:44
大家听说过芥子气吗?它可比生化危机里的丧尸病毒恐怖多了。为啥这么说?因为它可是有个称号叫“毒气之王”,杀人于无形,只要沾上一点,身体就会被溶解,一辈子都好不了。是不是毛骨悚然?想知道这芥子气到底有多可怕?咱们不妨一起往下看看。齐齐哈尔事件,揭开芥子气的面目2003年8月,正值盛夏,事情还得从一片正在
2025-01-19 06:19:55
原神久岐忍最强武器选择攻略,原神游戏中有很多的玩法,其中很多人在游戏中不知道久岐忍的武器应该怎么去选择,下面跟着小编一起来看看吧,希望此文章能帮到你。原神久岐忍最强武器选择攻略1:久岐忍武器最好是选择苍谷自由之翼,磐岩结绿,铁蜂刺,匣里龙吟这四个武器是最好的;2:然后苍谷自由之翼还有磐岩结绿都是五星
2025-01-19 05:36:57