我们知道,一个实现了servlet接口的java类被称为一个servlet,jsp实现了servlet接口,所以说jsp本质上是一个servlet
不过,jsp这个实现接口的方式隐藏得比较深,得从源码上才能看出,接下来将以一个简单例子说明。
1.首先我们从一个简单的javaweb的demo项目来看,jsp从内容来看更像一个html文件才对,这和servlet相差甚大
2.接着我们试着运行下这个demo项目
3.我们打开idea的中的tomcat工作空间
4.打开work,点到底我们发现有两个index_jsp为前缀的文件,一个java文件,一个class文件,这个就是刚才demo项目中的index.jsp经过tomcat容器编译后的样子,我们打开java文件
4.点进去我们发现这个类继承了HttpJspBase
5.我们打开HttpJspBase这个类的源码
6.到这里就很清楚了,HttpJspBase继承了HttpServlet,而HttpServlet继承了GenericServlet,GenericServlet类实现了servlet接口
7.所以说jsp本质是一个servlet,这都是源码里写得清清楚楚的。接下来我们修改index.jsp的内容,定义一个java变量,并取出输出到页面
8.我们再打开index_jsp.java文件
我们看html部分的代码,这里的第一行代码设置了页面格式为html,这和在servlet中的设置是一样的,html代码部分jsp自动的使用了out.wirte()和out.print()来输出。
9.所以jsp其实还是一个servlet,只不过它代替了人们以前在servlet中拼接html代码的工作,使得在开发中jsp只用专注于html代码的编写,由于html代码和java代码分离,也使维护起来更省力。