Javaweb学习笔记之JSP(一):JSP 的执行过程(执行原理)

本文深入探讨了JSP与Servlet的关系,揭示了JSP的本质即Servlet,并详细解释了JSP的执行过程,包括翻译、编译及执行阶段,同时对比了JSP与Servlet的生命周期差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01_hello.jsp 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>

<%--
JSP:
  Servlet 的作用:用 java 语言开发动态资源的技术;
  Jsp 的作用:用 java语言 + html语言 开发动态资源的技术;
  Jsp 的本质就是 Servlet;

JSP 的特点:
  1、jsp 的运行由 tomcat 服务器来管理;
  2、jsp 页面既可以写 html 代码,也可以写 java 代码;

JSP 的执行过程:
  地址:http://localhost:8080/04_JSP/01_hello.jsp
  1)、浏览器访问 01_hello.jsp 资源页面,tomcat 识别到是 jsp 文件,就会把 jsp 文件翻译成 java 源文件;(翻译)
  2)、然后 tomcat 服务器又把 java 源文件编译成 class 字节码文件;(编译)
  3)、最后 tomcat 就会执行 class 文件,从而在浏览器上输出 当前时间;(执行)
    IntelliJ JDEA 默认情况下生成的 java 文件和 class 文件的位置为:
    C:\Users\Administrator\.IntelliJIdea 2018.3\system\tomcat\Tomcat_9_0_14_04_JSP\work\Catalina\localhost\04_JSP\org\apache\jsp
  注意:
    第 1 次访问 jsp 的时候,执行 1)、2)、3)步骤;
    第 n 次访问 jsp 的时候,只执行 3)步骤;
    如果 jsp 修改了,则 1)、2)、3)步骤都会重新执行;

为什么说 JSP 就是 Servlet??
  打开 jsp 翻译生成的 java 文件,可以发现生成的 jsp 类继承于 HttpJspBase 类;
    public final class _01_005fhello_jsp extends org.apache.jasper.runtime.HttpJspBase
      implements org.apache.jasper.runtime.JspSourceDependent,
                   org.apache.jasper.runtime.JspSourceImports {}
  在 tomcat\lib 目录下找到 jasper.jar 文件,导入到 idea 后可以看到源码为:
    public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {}

  结论:从 HttpJspBase 类继承于 HttpServlet 类可以得出,jsp 就是一个 Servlet。
  servlet 的技术可以用在 jsp 程序中;
  但是 jsp 的技术并不能全部用于 servlet 程序中;

  Servlet 生命周期:
    1)、构造方法(第一次访问时执行)
    2)、init 方法(第一次访问时执行)
    3)、service 方法
    4)、destroy 方法
  JSP 生命周期:
    1)、jsp 文件翻译成 java 文件
    2)、java 文件编译成 class 文件
    3)、构造方法(第一次访问时执行)
    4)、init 方法(第一次访问时执行):_jspInit
    5)、service 方法:_jspService
    6)、destroy 方法:_jspDestroy
--%>

<html>
  <head>
    <title>第一个jsp页面</title>
  </head>
  <body>
    <%
      // 写 java 代码,获取当前时间
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      String currDate = sdf.format(new Date());
      // 输出内容到浏览器
      out.write("当前时间:" + currDate);
    %>
  </body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值