作者:码思客
链接:https://zhuanlan.zhihu.com/p/37612412
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本篇文章,我们来讲讲技术,系统演进的过程对我们java开发带来的影响。本文可能会涉及到一些技术名词,不懂没有关系,先混个眼熟,我们后面会一个个详细介绍。下面会列举三个不同时期的技术,因为同时期也会有各种各样的技术,所以我们只介绍java的技术演进。

混合开发时代

天地初开,万物混沌,这是一个让人既兴奋又无奈的时代。因为JSP的流行,所以大量的公司采用JSP来开发系统。兴奋,因为他确实比较方便,特别是有了struts2的加持,使得jsp如虎添翼。但是,struts2的架构虽然优秀,可是显得非常的臃肿,繁杂,业务简单的系统还好,稍微复杂点的系统,光是配置文件就能整的你没有脾气。撇开配置文件不说,更让人头疼的是前后端代码在一起,要么一个后端程序员把前端任务都做了,但是效果不好,因为后端程序员与专业前端技能上还是有差距的。要么后端做完给前端,出问题再还给后端,这个给项目的正常推进以及项目管理带来十分大的困难。

我们看看JSP带来的问题

java工程师:我这个功能写完了,你把前端效果调一下呗
前端工程师:我看了一下拿不到数据啊,我怎么调
java工程师:数据我给了啊
前端工程师:那为什么显示不出来
java工程师:我写了个逻辑控制啊,你需要传递XX参数就能看到了啊
前端工程师:这个逻辑前端就能做啊,为啥要到后端处理再给我?
java工程师:#¥@#¥¥%##¥%.....
前端工程师:$%^$%@#$......

其实,最根本的原因就是,JSP在MVC(了解即可,后面单独介绍)结构中属于展示层,但是在JSP又可以写业务甚至做数据层的事,这就造成了设计上的困难与开发中的混乱。在这种情况下,亟需一种能够将展示层与业务分离开的技术,这样才能加快软件开发的进度,并且更加容易设计和维护系统。

前后分离时代

为了解决以上问题,技术在前后端不断的进化。

springmvc

java从jsp转向了restful结构,springMCV一跃而起,将struts2远远抛在身后,springMVC最大的方便就是配置文件大大降低,甚至已经做到了0配置。通过注解替代配置确实是一个令人兴奋的做法。前后端不再需要往同一个文件里写逻辑,而是通过json的方式传输数据。java工程师可以不需要再去处理前端问题,而将工作重点转向了业务的编写。一般来说,后端开发的过程中会有接口文档,告诉前端人员如何获取数据,数据结构是什么样的,这样可以极大的方便前端人员开发。

前端技术也在不断的演进之中,与后端进行分离以后,采用ajax技术对服务器进行请求,而基于restful风格的项目也能够很好的处理前端的请求,前端也可以专注于自己的组件化,工程化改造。

我们嗯看看前后分离的效果

前端工程师:我页面做完了需要数据
java工程师:好的,文档已经写好,你照着文档上的路径去获取数据就行了

这样的结构无疑大大提升了工作效率和降低了沟通成本。

移动应用时代

到了移动应用时代,后端不再单单为WEB提供数据接口了,因为会有各种客户端都会请求服务器,比如手机,pad等。到了这个时候,已经是必须将前端和后端分开,因为现在的前端不仅仅包含WEB页面了。

由于现在的企业级应用,规模在不断的扩大,架构也越来越复杂,所以到目前,又出现了新的前后端技术来接受挑战。比如spring的spring boot 这个简直就是打开了新世界的大门,让开发过程更加便捷,比如开发一个项目会需要很多jar包,很多包又会有不同的版本,每次组织一次开发工具都会劳民伤财,累觉不爱,spring boot出现以后你就不怎么需要去管理这些基础设施了,当然他还有很多其他厉害的功能,我们后面再说。总的说来,你可以更加的专注于业务的开发,而不是将大把的时间拿去调整项目的配置。

angular - react - vue

前端也出现了很多革命性的框架,比如拥抱经典的VUE,一切都是JavaScript 的react,他们带来的是构建大型工程的便利以及极高的性能。

看完这个,很多人觉得我是不是可以不用学习jsp了?其实如果你想深入的学习下去,jsp还是很有必要的,因为jsp与servlet密不可分,但是你知不知道spring mvc 是基于servlet 实现的?所以学习的时候还是有要科学的方法和步骤,这样不但能学到东西,还能学的扎实。

JSP-Servlet-SpringMVC的更多相关文章

  1. 软件架构设计学习总结(18):MVC三层架构在各框架(jsp+servlet + Struts1+ Struts2+ springMVC)中的特征

    1.基于web开发中最原始的jsp+Servlet   图形化理解jsp+servlet结构: 1.从结构上分析jsp+servlet图解原理: 在基于mvc设计模式下的最原始的jsp+Servlet ...

  2. Spring MVC 使用问题与解决--HTTP Status 500 - Servlet.init() for servlet springmvc threw exception

    1.HTTP Status 500 - Servlet.init() for servlet springmvc threw exception 解决 使用jre1.7 Spring4.3 2.spr ...

  3. Servlet.init() for servlet [springmvc] threw exception

    项目还没开始做,就碰到那么多问题.. 报错一:/oa/news/%E6%A0%8F%E7%9B%AE%E7%AE%A1%E7%90%86.jsp 1.一开始是jsp的页面名称为中文,改了 2.接着仍然 ...

  4. JSP+Spring+SpringMVC+Hibernate+Mysql实现的校园失物招领网站

    项目简介 项目来源于:https://github.com/wenlongup/LostAndFound 因原github仓库无数据库文件,经过本人修改,现将该仓库重新上传至个人gitee仓库. ht ...

  5. 基于jsp+servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  6. JS.中文乱码,Jsp\Servlet端的解决办法

    JS.中文乱码,Jsp\Servlet端的解决办法 2010-03-08 15:18:21|  分类: Extjs |  标签:encodeuricomponent  乱码  urldecoder   ...

  7. 最简单的jsp+servlet的增删改查代码

    package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...

  8. JSP+Servlet中使用jspsmartupload.jar进行图片上传下载

    JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post&quo ...

  9. jsp+servlet+mysql 实现简单的银行登录转账功能

    jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...

  10. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

随机推荐

  1. WPF实现QQ群文件列表动画(二)

    上篇(WPF实现QQ群文件列表动画(一))介绍了WPF实现QQ群文件列表动画的大致思路,结合我之前讲过的WPF里ItemsControl的分组实现,实现起来问题不大,以下是效果图: 其实就是个List ...

  2. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 19: ordinal not in range(128)

    解决方案: 1: 在网上找到的解决方案是: 在调用import matplotlib.pyplot as plt前 import sys sys.setdefaultencoding(“gbk”) 让 ...

  3. 03012_会话技术Cookie&Session

    1.会话技术简介 (1)存储客户端的技术 网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识 ...

  4. 使用数组的splice方法以及循环嵌套来实现数组去重

    javascript代码如下   <script type="text/javascript"> var arr = [1,2,3,4,5,6,5,4,3,7,8,9, ...

  5. scripts

    Shell Script:================================================================ 示例1:[root@server0 ~]# ...

  6. PostgreSQL 安装完成后的一些配置

    设置数据目录,一般使用环境变量 PGDATA 指向数据目录的根目录.目录的初始化是使用 initdb 来完成的,-D 后面加上自定义目录的路径 initdb -D /tmp/testpostgres2 ...

  7. MQ、JMS以及ActiveMQ的了解和认识

    新加入的公司中,架构用到了activeMq,对于以前只了解nginx.tomcat的我有点懵逼,所以在网上找点资料看看,了解下什么是MQ,activemq.具体作用是什么 MQ MQ简介: MQ全称为 ...

  8. Android数据储存之SharedPreferences

    Android中SharedPreferences通常与Editor连用 接口SharedPreferences常用方法: boolean contains(String str):判断SharedP ...

  9. 【转】Using Raycasts and Dynamically Generated Geometry to Create a Line of Sight on Unity3D

    http://www.linkedin.com/pulse/using-raycasts-dynamically-generated-geometry-create-line-thomas José ...

  10. java同步器__学习笔记

    参照:http://ifeve.com/introduce-abstractqueuedsynchronizer/ 前言: 在java.util.concurrent.locks包中有很多Lock的实 ...