布条百科 手机版
首页 > 生活 >

如何打开jsp文件(深入了解 JSP 的运行过程)

265次浏览     发布时间:2023-02-08 15:20:03    

什么是 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 文件;若修改过,则重新编译。

相关文章

慈恩寺谜案小说全集免费免费试读(李金霍游)

李金拿着那块宽二十多公分,长不足五十公分的木板,又重又凉,却看不出是什么材质。她往旁边一块泰山石上敲了敲,声音清脆,“二十,现金。”摊主咬牙:“姑娘,我要价是三千!算了,你走吧!”估

2025-09-22 17:44:10

快手心跳轨迹—当记忆成为最甜的毒药小说全本章节大结局

林夕打开保险柜,里面只有一支胰岛素注射笔和一张泛黄的照片——照片上穿着白大褂的沈医生正对着她微笑,背后写着一行字:“即使你忘记全世界,我也会让你重新爱上我。”---1神秘

2025-09-22 17:23:12

全本资源在线阅读耕云种玉秦述荆芥

那尖酸刻薄的声音像一把冰冷的锥子,瞬间刺破了土屋里刚刚升起的那点微弱的暖意。秦恒和丫丫的脸色“唰”地一下变得惨白,眼神里瞬间充满了恐惧,下意识地朝秦述身边缩去。丫丫

2025-09-22 16:53:12

精品《笔仙,前世今生,我不是你的情人》小说在线阅读 江叹怜姚玄小说全集无删减全文

三句话概括:可怜的直男被玩弄于男鬼和道士之间。笔仙与我竟是前世今生的情人?不,是前世囚禁未果的痴情人。不爱我,那就沉沦虚假;爱我,就重回现实。————江叹怜因作业没写,半夜突

2025-09-22 16:21:51

迦萝陆御霆林蔓青是哪本小说主角 红眼追妻火葬场双宝黑客炸翻全球免费全章节阅读

正文第1章离婚夜·孕检单藏进手包(≈1500字)夜雨砸在落地窗,像无数碎钻崩裂。顾迦萝把孕检单折成小小一块,塞进手包最里层。对面,陆御霆指节敲着“离婚协议”,声音比雨还冷。“她

2025-09-22 15:53:07

何人可依免费章节何人可依点我搜索全章节小说

火车到站了,李凤英手拉着儿子,下了火车,跟着滚滚的人流往外走。出站口有很多接站的。李凤英知道她的老公不会来接她。因为她的老公根本不愿意她来。但她一定要来的。一定要弄

2025-09-22 15:33:13