jsp技能作为曾经一度火爆的技能,在最近几年确实利用率越来越低了,这篇文章带你一块探究一下jsp的从生到去世。

jsp技能的出身

在良久良久以前,那时候我们的开拓都是通过servlet来完成的,这个servlet是什么呢?我们先来认识一下:

现在前端不用jsp用什么曾经风光无穷的 JSP为什么如今很少有人应用了 jQuery

servlet用Java措辞编写的做事器端程序。
紧张功能是和浏览器进行交互,天生页面展示。

长下面这个样子:

public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(\"大众text/html\公众); PrintWriter out = response.getWriter; out.println(\"大众<html>\公众); out.println(\公众<head>\"大众); out.println(\"大众<title>Hello World</title>\公众); out.println(\公众</head>\"大众); out.println(\公众<body>\公众); out.println(\"大众<h1>Hello World!</h1>\"大众); out.println(\公众</body>\公众); out.println(\公众</html>\"大众); } }

我们可以看到前端所展示的页面,须要我们servlet去一个标签一个标签去天生,如果一个页面超级繁芜,动不动几千行代码,那这个servlet效率也就太低了。
而且全体servlet代码也会十分臃肿而且可读性非常差。

这时候怎么办呢?sun公司很早就意识到了这个问题,于是便倡导很多公司一块来创建了一种能够动态天生html的新技能,不久之后jsp便出身了。
有效率的办理了上面servlet所涌现的问题。

jsp的发展

既然jsp技能能够办理刚刚servlet代码里面所涌现的技能,我们来看一下是如何办理的:在这里我们举一个小例子,便是前端jsp向做事器servlet发送要求图书页面的功能。

首先我们看一下servlet:

public class List_book extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //声明一个ArrayList.用来存放Book类中的数据 ArrayList<Book> list = new ArrayList<Book>; for(int i=0;i<10;i++){ Book book = new Book; book.setName(res.getString(\"大众name\"大众+i)); book.setAuthor(res.getString(\公众author\"大众+i)); list.add(book); } //将list数据发送到.jap文件中 request.getRequestDispatcher(\公众ListBook.jsp\"大众).forward(request, response); } }

我们会创造,现在的servlet没有一点html代码了。
我们只须要把数据交给jsp。
此时我们的页面展示就交给jsp来做了。
现在我们来看一下jsp长什么样子:

<%@ page language=\"大众java\"大众 import=\"大众java.util.\公众 pageEncoding=\公众utf-8\"大众%><%String path = request.getContextPath;%> <!DOCTYPE HTML PUBLIC \"大众-//W3C//DTD HTML 4.01 Transitional//EN\"大众><html> <head> <meta http-equiv=\"大众pragma\"大众 content=\公众no-cache\"大众> <meta http-equiv=\"大众description\"大众 content=\公众This is my page\"大众> <script></script> </head> <body> <% ArrayList list = (ArrayList) request.getAttribute(\"大众list\"大众); %> <h2 align = \"大众center\"大众>图书列表</h2> <table border = 1px align = \"大众center\"大众> <tr><th>图书名称</th><th>图书作者</th></tr> <!-- 连续利用jsp语句 循环放入存放于list中的Book实体类中的数据 --> <% for(int i = 0;i<list.size;i++){ Book book =(Book) list.get(i);%> <tr><th><%=book.getName %></th><th><%=book.getAuthor%></th><tr> } %> </table> </body> </html>

这便是jsp,我们可以在html页面中写一些java代码。
对付我们程序员来说,在开拓当中静态的页面我们只须要用html和css写一些标签来展示即可,对付那些动态的部分我们就可以利用java代码。

那么jsp和servlet是不是便是这种协作的关系,实质上有什么差异呢?

实在jsp只是servlet的一种分外形式,每一个jsp页面便是一个servlet实例,普通一点的话来说:jsp便是servlet,只不过servlet把一些业务功能剥离开来交给了或者是形成了jsp。
明白了吧。
在我们的项目编译的时候便是把jsp编译成了servlet。

你们会创造,这样做实在挺好的,市场也验证了统统,很快jsp技能盛行开来,可是随着韶光的流逝,业务越来越繁芜,jsp也开始跟不上时期了。

jsp的危急

我们先看一个对话场景:

java程序员:终于写完了功能,是时候在界面上展示了。

前端程序员:你功能写完了,我没有数据,在页面什么没法展示呀

java程序员:数据我写好了,你在jsp中调用XX方法就能获取了,

前端程序员:我已经在jsp中写好了这个方法,你为什么自己写了?

于是乎,无穷无尽的争吵还在连续当中。

这便是jsp的弊端,为什么呢?我们可以来总结一下:

(1)动态和静态资源放在一起,一旦做事器涌近况态,前后台一起玩完,用户体验极差。

(2)一旦jsp涌现了问题,就须要前端后端发开职员一块来剖析办理,效率低。

(3)jsp无法利用nginx等。

(4)jsp页脸庞杂,难以修正。

(5)第一次加载jsp须要编译成servlet,韶光久,而且业务量大的时候,jsp包袱太大。

(6)jsp对付开拓职员切实其实便是一个挥之不去的痛,太难了!


鉴于以上缺陷,于是其余一套机制横空出世了,这便是前后端分离。
什么是前后端分离呢?

前后端分离实在便是后端工程师只关注于后端页面的开拓,不再处理前端问题。
前端工程师只关注于自己的页面开拓。
须要数据交互的时候,两者会有一份接口文档。

就这样这种思想架构很快的盛行开来,这也便是为什么jsp落寞的真正缘故原由。
从此java从jsp转向了restful构造,springMCV也开始盛行开来,并逐渐盘踞了市场。
前后端分离有什么优点呢?我们来总结一下:

(1)动态和静态资源分开存储。

(2)涌现bug能很快定位是前端还是后端。

(3)支持nginx。
在高并发状态下极其精良。

(4)直接要求页面,不用编译,速率效率都提上来了。

(5)从此前端和后端是相亲相爱的一家人了!



jsp的落幕

又随着韶光的推移,jsp的时期基本上一去不复返了,由于我们又走入了移动互联时期,这时候的客户端可不是前端页面了,还包括手机、汽车、电视等等各种设备,这种情形下,前后端必须要分离了。
jsp基本上彻底告别了它的舞台。