前言

随着信息技术的发展,Web系统做得越来越大,承载的业务也越来越复杂和庞大。Web系统开发工作越来越细分。最典型的是前端开发与后端开发分开进行。

  • 前端工程师负责前端开发,他们工作中用到的技术一般有HTML、CSS、JS技术
  • 后端工程师负责后端(即服务端)开发,他们用的技术比较多且复杂,主要解决高并发、负载均衡等性能问题和业务问题,使用到的技术很多,如java、JVM原理、事务、多线程、高并发、分布式架构、微服务等。

前后端分离

Java Web项目后端按照作用来分,可以分为:

  • 控制层:负责接收数据,并调用相关业务,封装数据和路由到JSP页面,技术框架一般使用到Struts2。在JSP页面上使用各种标签表达式,将后台数据展现出来。
  • 业务层:用来处理业务逻辑的,技术框架一般使用到Spring、Spring MVC。
  • 持久层:将数据保存到磁盘,如保存到数据库,使用到框架技术有MyBatis、Hibernate等。

JSP项目可以用maven、intelliJ IDEA、eclipse、myeclipse等工具打包(格式为.war),然后将war包复制到生产环境的Web容器(如Tomcat的webapp里,在tomcat启动时会自动解压)里,然后启动Web容器,就可以开始提供服务了,网站就可以被访问了。

war包里有js、css、html、图片、各种第三方库,在大型web系统这种大集中方式会带来一些问题:

  1. 动态资源和静态资源全部耦合在一起,无法做到真正的动静分离。
  2. 服务器压力会增大,因为服务器会收到各种http请求,例如css的、js的、图片的、动态代码的http请求等。服务器万一出问题,前后台一起玩完,用户体验极差。
  3. 前台做好的页面,需要由Java工程师对html进行修改,使其转成jsp页面,这样的合作出错率较高,修改问题时需要双方协同开发,效率低下。
  4. JSP 内有较多标签和表达式,前端工程师修改也很困难。
  5. Jsp必须在支持Java的web服务器(如tomcat)里运行。
  6. 被首次访问的jsp页面,必须要在web服务器中编译成servlet,因此第一次运行都会较慢。
  7. 每次请求JSP都是访问Servlet,再用输出流输出的html页面,效率没有直接使用html高。
  8. 请求的jsp页面,在响应时,是同步加载的,所以页面会加载得很慢。

前后端分离带来的好处:

  1. 实现真正意义上的前后端解耦,做到真正的动静分离。因为前端服务器可以使用nginx,后端服务器可以使用tomcat。前端服务器负责控制页面引用、跳转、调用后端的接口 。前端服务器放的是css,js,图片等静态资源,甚至可以将静态资源放到特定的文件服务器(如阿里云的oss,并使用cdn加速)。前端工程化的框架有nodejs,react,vue、router,react,redux,webpack等。
  2. 减少后端服务器的并发压力,除了接口以外的其他所有http请求全部转移到前端nginx服务器上。
  3. 如果后端服务超时或者宕机了,前端页面也可以正常访问,只不过数据加载不出来而已。用户体验极大提高了。
  4. 前后端合作更加畅顺,后端只管向前端提供接口,前端只管调用接口,互不干涉。
  5. 排错容易。可以快速定位出现问题的地方。页面逻辑、跳转错误、浏览器兼容性问题、脚本错误、页面样式等问题,由前端工程师来负责。接口数据出错、数据没有提交成功、应答超时等问题,由后端工程师来解决。
  6. 在高并发的情况下,可以同时水平扩展前后端服务器。
  7. 可以大量复用接口,提升效率。
  8. 提高了性能和可扩展性。

前后端分离情况的网络请求模型

JSP网站的网络请求过程:

  1. 客户端(浏览器)发起请求
  2. 服务端的servlet或controller接收请求
  3. 调用service,dao代码完成业务逻辑
  4. 返回JSP

前后端分离的请求过程

  1. 客户端(浏览器)发起请求
  2. 直接到达html页面
  3. html页面负责调用服务端接口产生数据(一般通过ajax技术等)
  4. 填充html,展现动态效果

总结

JSP在大型Java web项目中已经被淘汰了,淘宝、京东等大型Web网站都纷纷采用前后分离的开发模式,自然就不会选择jsp来做。

备注:

  • 后端接口测试可以用postman工具来完成。
  • 在开需求会议时,前后端工程师要参加,并制定好接口文档,因为它们清楚前端需要什么数据,实际工作,前端会告诉后端他们需要什么数据,但他们一般不清楚数据库中的表,所以接口文档一般都由后端提供。后端工程师要写好测试用例,证明接口是通的、可用的。

谢谢阅读!