JSP运行原理

1.WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。

2.每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。

3.Tomcat 6.x把为JSP页面创建的Servlet源文件和class类文件放置在“\work\Catalina\<主机名>\<应用程序名>\”目录中,Tomcat将JSP页面翻译成的Servlet的包名为org.apache.jsp. 。

4.JSP规范也没有明确要求JSP中的脚本程序代码必须采用Java语言,JSP中的脚本程序代码可以采用Java语言之外的其他脚本语言来编写,但是,JSP页面最终必须转换成Java Servlet程序。

5.可以在WEB应用程序正式发布之前,将其中的所有JSP页面预先编译成Servlet程序。

教学过程中想要验证JSP的Servlet由来,就先要能够找到My_005fFirst_005fJsp_jsp.java编译文件,路径在D:\tomcat\apache-tomcat-6.0.14\work\Catalina\localhost\JSP_First_Demo\org\apache\jsp\JSP,注意这里是我个人项目的路径,各位要适当修改。

然后再该类中会发现

public final class My_005fFirst_005fJsp_jsp extends org.apache.jasper.runtime.HttpJspBase

implements org.apache.jasper.runtime.JspSourceDependent

JSP继承了org.apache.jasper.runtime.HttpJspBase,实现了org.apache.jasper.runtime.JspSourceDependent

那就要通过HttpJspBase类来考虑了,那我们就需要看一下这个类到底是什么

然后找到对应的src文件,注意这里的src文件是对应tomcat的资源包apache-tomcat-6.0.36-src,然后再包中找到HttpJspBase,路径如下:

E:\JavaWeb\class_09-Servlet和servletContext\资料\apache-tomcat-6.0.36-src\java\org\apache\jasper\runtime

但是如果将tomcat包导入项目以查看源码的话,会报一个冲突错误:

org.apache.jsp.login_jsp._jspInit(login_jsp.java:34)

百度了下,原因是项目jar包和tomcat的jar包冲突了。不兼容。

删除工程里的jsp-api.jar和servlet-api.jar两个jar包,但是删除完这两个jar,可能还是有问题,此时需要仔细查看自己工程里的.classpath文件,特别注意kind=“lib” 是不是引用了jsp-api.jar和servlet-api.jar这两个jar包,可能会引用tomcat里的jar包,如果发现有这种情况,必须删除那两行,重启tomcat,应该就没问题了!

1.如果是直接部署在 tomcat 中的,那么就看看自己的项目的 .classpath 文件,是不是有 对 jsp-api.jar 和 servlet-api.jar 的引用。

2.如果使用的 maven 的工程,那么就把对 这两个 jar 引用的依赖给注释掉即可。

JSP运行原理_第1张图片

介绍两个基础材料

http://blog.csdn.net/sgx425021234/article/details/8158078

http://blog.csdn.net/u013919201/article/details/43276677

你可能感兴趣的:(JSP运行原理)