• 乱想(三)


         前面提到了JSP这个玩意儿,也说了JSP的代码实际上是被翻译成了一个servlet,那么其过程又是如何?JSP最终是以servlet的形式在幕后操作,但是和servlet还是有区别的,在JSP中可以有HTML元素,HTML元素是给浏览器看到的,可以这么说,我们上网,浏览器解析的就是HTML,当这两个在一个JSP文件中的时候,又是如何解析的呢?

          不断有问题出现,不断在脑海中回荡,实在难受,我知道只言片语是解释不清楚,就算解释清楚了,我也不知道这个玩意是如何做的,如何实现的,我能做的就是让这个流程走完,至于具体的实现,非我这样的凡夫俗子所能理解。

    如果说HTML元素是给浏览器看的,那么JSP的代码片段肯定是给服务器看的,这一点毋庸置疑,但是浏览器先解析呢还是服务器呢?

    1.先执行JSP代码片段(其实就是Java),即先和服务器交互,把交互后的结构和当前的html页面进行整合,整合成一个新的JSP页面,这个JSP里已没有了Java代码,也就是HTML.
    2.对于这个新的JSP,按照从上到下的顺序执行。

    其实验证的方法很容易,只要查看源文件即可。

    在书籍上我们都可以看到这样的话语:

    客户端发出请求

    Web容器将JSP翻译成servlet源代码

    Web容器将产生的源代码进行编译

    Web容器将加载编译后的代码并执行

    把执行结果响应至客户端

    这个也就是一个翻译-编译-加载的过程(具体实现,我不知道)

    这个过程我们都耳熟能详,那么我们可以继续深究,JSP是和一个页面相关,而Serlvet却没有这个功效,使用Servlet其实就是一个Java类,一般都是和Java代码直接打交道,处理用户的请求和响应请求,,而在JSP中,可以写一些HTML相关的东西,更适合做数据美化和显示,我们就不由的猜测,这个JSP被翻译的东西应该是继承了Servlet。

    JSP的生命周期:

    1.首先由JSP引擎(org.apache.jasper.servlet.JspServlet)将JSP页面翻译成Java代码;

    2.将java代码编译才class字节码文件;

    3.加载到容器;

    4.有容器实例化成对象;

    5.初始化阶段,相关的方法是jspInit();

    6.请求到达,调用服务阶段相关方法_jspService(),客户端每次请求都会调用这个方法;

    7.销毁阶段,相关的方法的jspDestroy()。

    这里冒出来一个jspInit,_jspService,可以联想一下servlet的几个方法Init,Service。其实这些方法来自HttpJspPage接口,而该接口是Servlet的子接口,所以所有的JSP本质都是Servlet,对Tomcat而言,JSP类继承org.apache.jasper.runtime.HttpJspBase类,而该类实现了HttpJspPage接口,所以满足JSP规范。(不同的容器可能实现不一样)

    那么现在整个过程就很清楚了,那么上面的JSP引擎是什么玩意儿?

    我们有的时候将这个称之为JSP容器,我不知道将这个称之为应用服务器为不为过(或者说是应用服务器的一个部分)?之所以有这个,是因为我们的Web容器是不能处理JSP文件的,它只能处理HTML相关的东西,所以说这JSP容器实际是是对Web服务器的一个补充。

    至此整个过程一目了然。

    看来了解一个东西很不容易,有自己的处理手段,有自己的生命周期和流程,一些看起来相似的东西,其背后居然蕴含这么多不可思议的操作。这个算起清楚了,但是让我想起另外一个东西那就是ASPX,ASPX里面也可以写HTML的东西,而且还可以写服务器的控件?其背后又是如何运作的?我现在还不得而知,但是想我这样的人,永远都会剖根问底,只要脑子有疑问,就想法去解决,要不然放在脑子中就是一种负担,喜欢快乐学习,喜欢理解学习,喜欢了解其本质!

  • 相关阅读:
    android loginDemo +WebService用户登录验证
    Integrating Google Sign-In into Your Android App
    Android 应用程序集成Google 登录及二次封装
    facebook 分享
    Android Facebook和Twitter登录和分享完整版
    Android 友盟社会化组件-分享实现
    Android集成友盟社会化分享功能
    c 判断是否为 字母或数字(iswalnum example)
    c 判断字符是否为字母 (iswalpha example)
    下载安装Xocde并创建一个C语言的项目工程
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/3017889.html
Copyright © 2020-2023  润新知