为何都说jsp就是servlet

 众所周知,jsp本质就是servlet。我在一开始就是完全靠死记硬背的,根本不知道其中的缘由。也是最近看一些jsp教学视频才彻底地明白这句话的意思。所以编写这篇文章,希望可以帮助还不知道的小伙伴。

1、jsp编译后的格式及存储的位置

 我们都知道当程序进行编译后会将java文件编译成class文件。那么jsp格式的文件会编译成什么样式呢?又会存储到哪里呢?首先,我们服务器使用的是Tomcat,jsp文件就使用最基本的index.jsp。当一个项目部署到Tomcat后,运行时会在Tomcat根目录下面的\webapps\ROOT下面生成我们项目对应的war包(解压后)。在项目war包下可以看到index.jsp文件,很显然这不是我们要找的。真正的index.jsp其实是被编译到Tomcat根目录下的\work\Catalina\localhost\ROOT\org\apache\jsp目录下,在这里我们可以看到index_jsp.java和index_jsp.class2个文件
在这里插入图片描述
 我们打开.java文件看看里面到底是如何实现。

//index_jsp类继承了HttpJspBase,实现了JspSourceDependent和JspSourceImports 接口
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports 

 同时还有2个方法比较熟悉,分别是初始化_jspInit()和销毁_jspDestroy(),看到这2个方法小伙伴们是否觉得很熟悉呢?

public void _jspInit() {
 }

 public void _jspDestroy() {
 }

 没错,它还有_jspService()方法,看到这里就更熟悉了,这。。这。。这不就是跟Servlet接口里的方法一样嘛。

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
}

2、证明jsp就是Servlet

 根据上面继承的HttpJspBase就可以找到jsp就是Servlet的铁证,首先我们要先导入org.apache.jasper.runtime.HttpJspBase的jar包,那么我们就可以偷窥人家的代码,一探究竟啦!

<!--  这个就是HttpJspBase的坐标   -->
<dependency>
    <groupId>tomcat</groupId>
    <artifactId>jasper-runtime</artifactId>
    <version>5.5.23</version>
</dependency>

 我们点击HttpJspBase中可以看到该类继承了HttpServlet,有的小伙伴看到这里已经明白了,为啥jsp就是Servlet啦。但是做事有始有终,说是Servlet那么就必须见到Servlet这个接口。

public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
}

 那么它来啦,带着礼物走来啦。根据以下的代码就可以清楚看到Servlet这个接口

// 别问,问就是往里点
public abstract class HttpServlet extends GenericServlet{
}

// 我点,我点,我点点点
public abstract class GenericServlet 
    implements Servlet, ServletConfig, java.io.Serializable{
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值