编写CGI程序的主要是Perl和C等语言,在程序中输出大片的HTML字符串,可读性和维护性是个大问题。为了处理更复杂的应用,一种方法是把HTML页面中固定的部分存起来(称之为模版),把动态部分打上标记,处理Web请求时,后端程序生成动态的内容然后填充进到模板中去,形成最终返回的HTML。于是1994年PHP诞生了,PHP可以把程序(动态内容)嵌入到HTML(模版)中,不仅能更好的组织Web应用的内容,而且执行效率比CGI还更高。之后96年出现的ASP和98年出现的JSP本质上也都可以看成是一种支持某种脚本语言编程(分别是VB和Java)的模版引擎。
企业应用其实早就该淘汰JSP了。JSP的升级技术是JSF(Java ServerFace),但是由于前端技术的迅速发展,市场早已偏离了SUN/Oracle的预判,JSF从来就没有被大量使用。前端使用Angularjs/Angular/VUE/React,至少用Extjs/easyUI。前后端分离开发分离部署,前后端之间只有HTTP上的JSON通信,服务器端不应该知道界面上的任何东西。前端JS发送AJAX请求调用服务器端提供的Restfull API访问Resrouces,服务器端相应JSON数据。前端拿数据去做什么,怎么展现,用户经过什么样的操作才发送的这个AJAX,服务器统统不关心。我从07-09年用Extjs,09-11年用GWT,这段时间我都做企业应用,应该说早就看出JSP要淘汰了。
JSP 处理
以下步骤表明了 Web 服务器是如何使用JSP来创建网页的:
-
就像其他普通的网页一样,您的浏览器发送一个 HTTP 请求给服务器。
-
Web 服务器识别出这是一个对 JSP 网页的请求,并且将该请求传递给 JSP 引擎。通过使用 URL或者 .jsp 文件来完成。
-
JSP 引擎从磁盘中载入 JSP 文件,然后将它们转化为 Servlet。这种转化只是简单地将所有模板文本改用 println() 语句,并且将所有的 JSP 元素转化成 Java 代码。
-
JSP 引擎将 Servlet 编译成可执行类,并且将原始请求传递给 Servlet 引擎。
-
Web 服务器的某组件将会调用 Servlet 引擎,然后载入并执行 Servlet 类。在执行过程中,Servlet 产生 HTML 格式的输出并将其内嵌于 HTTP response 中上交给 Web 服务器。
-
Web 服务器以静态 HTML 网页的形式将 HTTP response 返回到您的浏览器中。
-
最终,Web 浏览器处理 HTTP response 中动态产生的HTML网页,就好像在处理静态网页一样。
Web应用在Servlet容器中以WAR(Web Application Archive)文件格式作为部署单元。它将JSP、Servlet class、Java class、XML配置文件、静态Web资源(HTML、CSS、JavaScript、Images等等)作为整体打包为一个独立的Web应用。