jsp是什么?JSP的运行原理是什么?


在动态Web项目的开发中 , 经常需要动态生成HTML 。内容(如系统中的当前在线人数需要动态生成) 。如果使用Servlet实现HTML页面数据的统计 , 则需要使用大量的输出语句 。同时 , 如果静态内容和动态内容混合在一起 , 那么也将导致程序非常臃肿 。为了克服Servlet的这些缺点 , Oracle( Sun)公司推出了JSP技术 。
JSP(Java Server Pages)是建立在Servlet规范之上的动态网页开发技术 , 其实质是一个简化的Servlet , 在JSP文件中 , HTML代码与Java代码共同存在 , 其中 , HTML代码用于实现网页中静态内容的显示 , Java代码用于实现网页中动态内容的显示 。为了与传统HTML有所区别 , JSP文件的扩展名为jsp 。
JSP技术所开发的Web应用程序是基于Java的 , 其使用具有如下几点特征 。

1、预编译
预编译指在用户第一次通过浏览器访问JSP页面时 , 服务器将对JSP页面代码进行编译 , 并且仅执行一次编译 。编译好的代码将被保存 , 在用户下一次访问时会直接执行编译好的代码 。这样不仅节约了服务器的CPU资源 , 还大幅度提升了客户端的访问速度 。
2、业务代码相分离
在使用JSP技术开发Web应用时 , 可以将界面的开发与应用程序的开发分离 , 
3、组件重用
JSP可以使用JavaBean编写业务组件 , 也就是使用一个JavaBean类封装业务处理代码或者将其作为一个数据存储模型 , 在JSP页面甚至整个项目中 , 都可以重复使用这个JavaBean , 同时 , JavaBean也可以应用到其他Java应用程序中
4、跨平台
由于JSP是基于Java语言的 , 它可以使用Java API , 所以它也是跨平台的 , 可以应用于不同的系统 , 如 Windows和Linux等 。
JSP运行原理
JSP的工作模式是请求/响应模式 , 客户端首先发出HTTP请求 , JSP程序收到请求后将进行处理并返回处理结果 。在一个JSP文件第一次被请求时 , JSP引擎(容器)把该JSP文件转换成一个Servlet , 而这个引擎本身也是一个Servlet ,  JSP的运行原理如下图:

jsp是什么?JSP的运行原理是什么?

文章插图
JSP的运行过程具体如下 。
(1) 客户端发出请求 , 请求访问JSP文件 。
(2) JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序) , 在转换过程中 , 如果发现JSP文件中存在任何语法错误 , 则中断转换过程 , 并向服务端和客户端返回出错信息 。
(3) 如果转换成功 , 则JSP容器会将生成的Java源文件编译成相应的字节码文件*.class 。该class文件就是一个Servlet , Servlet容器会像处理其他Servlet一样处理它 。
(4) 由Servlet容器加载转换后的Servlet类(class文件)创建一个该ServletJSP页面的转换结果)的实例 , 并执行Servlet的jsplnit()方法 。jspInit()方法在Servlet的整个生命周期中只会执行一次 。
(5) 执行jspService()方法处理客户端的请求 。对于每一个请求 , JSP容器都会创建个新的线程处理它 。如果多个客户端同时请求该JSP文件 , 则JSP容器会创建多个线程 , 使每个客户请求都对应一个线程 。
(6) 如果JSP文件被修改了 , 则服务器将根据设置决定是否对该文件重新进行编译 , 果需要重新编译 , 则使用重新编译后的结果取代内存中的Servlet , 并继续上述处理过在需要注意的是 , 虽然JSP效率很高 , 但在第一次调用时往往由于需要转换和编译 , 所以会生一些轻微的延迟 。
(7) 如果系统出现资源不足等问题 , JSP容器可能会以某种不确定的方式将Servlet从内存中移除 , 发生这种情况时 , 首先会调用jspDestroy ()方法 , 然后Servlet实例会被作为“垃圾”进行处理 。
【jsp是什么?JSP的运行原理是什么?】(8) 当请求处理完成后 , 响应对象由JSP容器接收 , 并将HTML格式的响应信息发送回客户端 。