jsp(Java Server Pages)
jsp全称Java Server Pages,是一种动态网页开发技术
.html文件是静态页面
.jsp文件是动态页面
jsp页面允许我们在html代码中嵌入java代码,这样就可以在html中使用java代码来完成功能了。
so jsp =html+java
运行
浏览器可以直接运行html页面但是不可以直接运行jsp页面,jsp也是需要在web容器中运行(tomcat等),因为它本质也是一个Servlet
其中最核心的是有JSP的引擎(jasper.jar),它可以将jsp页面翻译成java程序,并编译成class文件,然后在运行。
所以jsp是运行在服务器端的,运行完之后,把动态生成的html页面再使用io流写回给浏览器,浏览器接收并且解析后再呈现出来效果。
关系
因为JSP页面第一次被访问时,会被tomcat服务器编译成一个java类,这个java类默认继承HttpJspBase类,而HttpJspBase类是HttpServlet的子类,所以JSP其实就是一个servlet程序,所以得和servlet一样运行于web容器中;
jsp页面被tomcat服务器编译成的java文件及其class文件,保存在tomcat服务器里面的work目录中,在这里的代码中,我们还可以看见它是如何使用io流把生成的html页面代码一行一行写回给浏览器的。
/*
\* Generated by the Jasper component of Apache Tomcat
\* Version: Apache Tomcat/8.5.58
\* Generated at: 2020-10-07 01:50:21 UTC
\* Note: The last modified time of this file was set to
\* the last modified time of the source file after
\* generation to assist with modification tracking.
*/
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 {
private static final javax.servlet.jsp.JspFactory _jspxFactory =
javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String,java.lang.Long>
_jspx_dependants;
private static final java.util.Set<java.lang.String> _jspx_imports_packages;
private static final java.util.Set<java.lang.String> _jspx_imports_classes;
static {
_jspx_imports_packages = new java.util.HashSet<>();
_jspx_imports_packages.add("javax.servlet");
_jspx_imports_packages.add("javax.servlet.http");
_jspx_imports_packages.add("javax.servlet.jsp");
_jspx_imports_classes = null;
}
private volatile javax.el.ExpressionFactory _el_expressionfactory;
private volatile org.apache.