JAVA JSP
Java Server Pages
Java Server Pages,简称Java 服务器页面,和Servlet一样,也是Web动态技术!
JSP与HTML的区别:
1、HTML只能提供静态数据
2、JSP中可以嵌入java代码,提供动态数据
为什么会出现JSP动态页面技术:
如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难。
所以JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。
总结:JSP其实就是一个模板引擎,可以想下PHP的smarty模板引擎,起到的作用也是这个,对于后端的数据,模板引擎的功能就是将对应的html中特定解析的代码进行替换
JSP的执行原理
WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP模板引擎就是一个Servlet程序,它负责解释和执行JSP页面。
每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
Tomcat 容器中把为JSP页面创建的Servlet源文件和class类文件放置在<TOMCAT_HOME>\work\Catalina\<主机名>\<应用程序名>\
目录中,Tomcat将JSP页面翻译成的Servlet的包名为org.apache.jsp.<JSP页面在WEB应用程序内的目录名>
其实JSP引擎就是Web容器(这里指的是Tomcat),并且JSP引擎是一个Servlet程序!
原因?继续看来到C:\Users\dell\.IntelliJIdea2019.3\system\tomcat\Unnamed_javaApp2_3\work\Catalina\localhost\s2\org\apache\jsp
,这里拿index_jsp.java文件中的代码举例子分析
首先看如下,index_jsp继承的是一个org.apache.jasper.runtime包中的HttpJspBase类
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
继续看HttpJspBase类,如下所示,继承的是HttpServlet,到这里也就可以知道了为什么JSP也是一个Servlet了,本质就是Servlet类
继续看这个index_jsp.java中的内容,其实就是一个HttpServlet的子类,只是该类是专门在网页对jsp文件进行访问的时候解析的一个子类
JSP在tomcat中的解析过程
所以可以大概做个总结对于访问JSP的流程是怎么样的:
1、客户端进行访问了index.jsp
2、tomcat将JSP文件编译成Servlet源代码
3、 Web容器将产生的源代码进行编译class字节码文件
4、 Web容器加载编译后的class字节码并创建对应的实例class
5、然后调用_jspInit方法
6、Web容器将HttpServletRequest和HttpServletResponse两个对象传递过去,JSP通过_jspService方法进行接收HttpServletRequest和HttpServletResponse两个对象进行处理
7、最后_jspDestroy释放资源