为什么说jsp的本质是servlet?

  我们知道,一个实现了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代码分离,也使维护起来更省力。

 

 

posted @ 2020-02-25 00:09  茗生  阅读(3220)  评论(0编辑  收藏  举报