jsp技能作为曾经一度火爆的技能,在最近几年确实利用率越来越低了,这篇文章带你一块探究一下jsp的从生到去世。
jsp技能的出身
在良久良久以前,那时候我们的开拓都是通过servlet来完成的,这个servlet是什么呢?我们先来认识一下:
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基本上彻底告别了它的舞台。