码迷,mamicode.com
首页 > Web开发 > 详细

jsp的执行过程

时间:2015-07-13 18:55:26      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:public   服务器   源文件   java   

今天我们要弄懂两个问题:

    第一个就是jsp的运行原理,第二个就是为什么说jsp就是一个servlet

一、jsp的运行原理

    1.访问jsp页面,首先tomcat服务器会去扫描jsp文件,把它翻译成java源文件

    2、tomcat服务器翻译完jsp页面后,会对其java源文件进行编译成class字节码文件

    3、tomcat服务器会构造这个jsp的类对象

    4、tomcat服务器会调用这个jsp类对象里面的方法


二、jsp其实就是一个servlet,为什么呢?

    1、在tomcat服务器的word文件上,存放着jsp文件对应的tomcat翻译的java源文件和编译的class文件

    2、打开这个文件,看其继承的类,如下图

public final class _05_guess_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

    他继承了HttpJspBase这个类

    3.我们再看看这个HttpJspBase这个类是继承了什么类呢?

    在tomcat的源代码中,我们在jaspert.jar包中找到下面这里类

org.apache.jasper.runtime.HttpJspBase

    看看该类继承的是哪个类:

public abstract class org.apache.jasper.runtime.HttpJspBase extends 
javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {


    现在我们看到,他们的继承关系了吧,tomcat服务器把jsp翻译的文件继承了HttpJspBase类,而该类又继承了HttpServlet类,所以得到的一个结论就是,其实jsp就是一个servlet


    既然jsp就是一个servlet了,那么他们的生命周期又是怎么样的呢?

    

    jsp的生命周期:

    1、翻译(jsp文件->java文件)

    2、编译(java源文件->class字节码文件(servlet程序))

    3、构造函数  (第一次运行)

    4、调用init方法  (第一次运行)   -- 对应jsp编译的java文件的方法就是_jspInit()

    5、调用service方法  --对应jsp编译的java文件的方法就是_jspService()

    6、调用destroy方法    --对应jsp编译的java文件的方法就是_jspDestroy()


    三、针对jsp的运行原理中的四个步骤,平常程序里是怎么运行的呢?

        他分为两种情况,第一次运行和第n次运行

    1、第一次运行的顺序:

    走的是(1)->(2)->(3)->(4)


    2、第n次运行的顺序:

    走的是(4)


    在这里,大家就要思考了,为什么除了第一次运行走(1)、(2)、(3)步骤,第n次就走这个步骤的呢?

    大家想一下,第一次进来的时候,tomcat服务器扫描到了jsp文件,他就会在tomcat的安装目录下的work文件夹下面生成了对应的java源文件和编译好的class字节码文件,(注意了)在没有jsp文件没有改动的情况下,tomcat服务器是不会把这个翻译好编译好的文件删除掉重新编译一次的,所以就出现了第n次访问的时候,他在没有改动jsp文件的前提下,他就不会跑第一步和第二步了,这样大家明白了吧!

    

    那为什么它连第三步创建类对象也不走了呢?

    那就得从jsp的生命周期去说了,在jsp生命周期中的第三步创建构造函数和第四步调用init初始化方法的时候,他就创建了类对象,下次再进来的时候他就不需要再创建类对象了,所以第(3)步不用走的原因就再这里了。


    写了一个多钟,希望可以帮到兄弟姐妹们!!!技术分享




本文出自 “记录学习web的过程” 博客,请务必保留此出处http://4785585.blog.51cto.com/4775585/1673828

jsp的执行过程

标签:public   服务器   源文件   java   

原文地址:http://4785585.blog.51cto.com/4775585/1673828

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!