文章目录
一、Jsp本质
JSP 本质上就是一个 Servlet
JSP 在被访问时,由JSP容器(Tomcat)将其转换为 Java文件(Servlet),在由JSP容器(Tomcat)将其编译,最终对外提供服务的其实就是这个字节码文件(第一次访问时才会进行编译)
<%--
Created by IntelliJ IDEA.
User: hebinyang
Date: 2022/11/14
Time: 9:21 上午
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>01_hello_Jsp</title>
</head>
<body>
<h1>html代码</h1>
<%
out.println("java代码");
%>
</body>
</html>
1.当Tomcat启动的时候,会看到一个CATALINA_BASE的目录
2.进入这个目录找到work目录下面对应的模块名称,可以看到Tomcat把jsp页面转换后的java文件。
注:需要访问一次Jsp页面之后这个目录才会生成。
3.这里可以看到转换后的java文件继承了HttpJspBase
4.这时候就可以看Tomcat的源码HttpJspBase文件,这里可以看见HttpJspBase继承了HttpServlet,说明HttpJspBase就是一个Servlet,jsp转换后的java也是一个Servlet。
5.查看子类重写的_jspService方法就可以看到Jsp页面的结构,是通过一个输出流向页面输出的。
二、Jsp脚本
2.1 <%…%>:内容会直接放到_jspService()方法之中
相当于局部变量定义
2.2 <%=…%>:内容会放到out.print()中,作为out.print()的参数
相当于输出局部变量
2.3 <%!…%>:内容会放到_jspService()方法之外,被类直接包含
相当于定义成员变量和方法