JSP-Servlet-SpringMVC
链接: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的更多相关文章
- 软件架构设计学习总结(18):MVC三层架构在各框架(jsp+servlet + Struts1+ Struts2+ springMVC)中的特征
1.基于web开发中最原始的jsp+Servlet 图形化理解jsp+servlet结构: 1.从结构上分析jsp+servlet图解原理: 在基于mvc设计模式下的最原始的jsp+Servlet ...
- 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 ...
- 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.接着仍然 ...
- JSP+Spring+SpringMVC+Hibernate+Mysql实现的校园失物招领网站
项目简介 项目来源于:https://github.com/wenlongup/LostAndFound 因原github仓库无数据库文件,经过本人修改,现将该仓库重新上传至个人gitee仓库. ht ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- JS.中文乱码,Jsp\Servlet端的解决办法
JS.中文乱码,Jsp\Servlet端的解决办法 2010-03-08 15:18:21| 分类: Extjs | 标签:encodeuricomponent 乱码 urldecoder ...
- 最简单的jsp+servlet的增删改查代码
package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...
- JSP+Servlet中使用jspsmartupload.jar进行图片上传下载
JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post&quo ...
- jsp+servlet+mysql 实现简单的银行登录转账功能
jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...
- 使用jsp/servlet简单实现文件上传与下载
使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...
随机推荐
- 爬虫工程师常用的 Chrome 插件
做多了爬虫都知道,写一个爬虫大部分时间不是在代码上,而是在分析网页上,所有有一套好用的工具可以极大节省劳动力,这里把平时积累的一些 Chrome 插件分享出来,均来自本人和同事推荐,并不定时更新,欢迎 ...
- border,border-width不支持百分比
1.border-width不支持百分比 原因:不会因为设备大就按比例变大 同样的,outline,box-shadow,text-shadow也不支持百分比 也就是border不支持百分比 2.bo ...
- 【Remove Nth Node From End of List】cpp
题目: Given a linked list, remove the nth node from the end of list and return its head. For example, ...
- Leetcode 599.两个列表的最小索引总和
两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答 ...
- sqlserver2008链接服务器中执行存储过程配置过程
参考:http://www.cnblogs.com/ycsfwhh/archive/2010/12/15/1906507.html 1.双方启动MSDTC服务MSDTC(分布式交易协调器),协调跨多个 ...
- Mysql Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
Mysql update error: Error Code: 1175. You are using safe update mode and you tried to update a table ...
- Linux下librtmp使用及编程实战
最近想做rtmp的推流.直播的小项目,不想直接使用FFmpeg进行推流,FFmpeg进行推流特别简单,因为它已经将编码以及librtmp都集成好了,没啥意思.FFmpeg推流的例子,在雷神的博客里可以 ...
- 关于mybitis的异常总结
由于原项目中系统登录用户表中新添加了字段来关联其他表,但原来的mapper和bean就得重新再逆向出来,逆向后,就参照着原来你mapper来添加一些自定义在mapper的方法,那么接下来就爆出异常了 ...
- java-dispose方法
今天在编一道JAVA例题时,看到 dispose 这个方法,在程序中是用来关闭一个GUI页面的.这也让我想到了setVisible(false)方法.在网上查了意思,dispose()即释放所有本机屏 ...
- VS2015 +.NETMVC5 +EF实践
-- 当做笔记,以上图片按照顺序来的. 跟着 http://www.cnblogs.com/sanshi/ 一步步来的