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的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...
随机推荐
- tensorboard页面显示No dashboards are active for current data set 问题win10系统
如果问题如上所示,可以试下如下方法: 在文件夹中找到你的logs文件, 在空白处按住“shift”键,右键鼠标(注意鼠标不要选中任何文件),点击“Powershell”打开win10powershel ...
- cakephp 中Console / Shell 有什么优点?
Which is the advantage of using CakePHP Console / Shell for programmed tasks ? 查看原文 最近用到了cakephp中的sh ...
- 【NOIP 2012】借教室
题目 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望 ...
- Delphi字符串处理函数
1.Copy 功能说明:该函数用于从字符串中复制指定范围中的字符.该函数有3个参数.第一个参数是数据源(即被复制的字符串),第二个参数是从字符串某一处开始复制,第三个参数是要复制字符串的长度(即个数) ...
- python 学习分享-实战篇选课系统
# 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 # ...
- Linux 必要软件的安装与配置
主要是记录一下,免得下次重装系统后又到处搜索.. 一.必要软件的安装 JDK 下载 tar.gz:http://www.oracle.com/technetwork/java/javase/downl ...
- leetcode NO.7 反转整数 (python实现)
来源 https://leetcode-cn.com/problems/reverse-integer/description/ 题目描述 给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 ...
- IIS是怎么处理同时到来的多个请求的?
假设有一台服务器,它的IIS上部署有一个Web应用程序-S,可以通过浏览器或其他方式进行访问. 假设有A.B.C三台电脑同时访问网站S,IIS接收到3个HTTP请求,然后分别为三个请求 ...
- [Gym101138G][容斥原理]LCM-er
[Gym101138G][容斥原理]LCM-er 题意描述 给定\(n,a,b,x\)四个数字,需要计数满足如下条件序列的个数(答案对\(10^9+7\)取模),条件如下. \[ {a \le A_1 ...
- ES6箭头函数及模版字符串
var f = v => v; 等同于: var f = function(v) { return v; }; 箭头函数可以与变量解构结合使用: const full = ({ first, l ...