为什么要放弃 JSP ?

ARM的CI-700和Arteris的NoC对比 设计理念:CI-700注重于为移动和客户端SoC提供定制化的互连解决方案,而Arteris的NoC更侧重于提供灵活、可配置的网络互连技术,适用于多种应用场景。性能与功耗:CI-700通过系统级缓存和网状拓扑结构优化性能和功耗,而Arteris的NoC通过物理感知和多协议支持来提升性能和降低功耗。功能安全:Arteris的NoC提供了功能安全支持,这对于汽车和工业应用尤为重要,而CI-700虽然也关注安全性,但未明确提及功能安全支持。互操作性。 阅读详情
小Hub领读:

现在主流前后端分离了,vue都是后端的必懂技能了,想当年,小Hub刚学java的时候,jsp当道,现已物是人非~


来源:水车

cnblogs.com/xuange306

前言

以前的项目大多数都是 Java 程序猿又当爹又当妈,既搞前,又搞后端。

随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会,那么每一样都很难达到精通。

大中型公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,我建议是分开。你要是这辈子就吃 Java 这碗饭,就不要去研究什么 css,js 等等。

把你的精力专注在 Java,JVM 原理,Spring 原理,mysql 锁,事务,多线程,大并发,分布式架构,微服务,以及相关的项目管理等等,这样你的核心竞争力才会越来越高,正所谓你往生活中投入什么,生活就会反馈给你什么。

曾几何时

我们的 Java Web 项目都是使用了若干后台框架进行开发,Spring、Spring MVC、MyBatis、Hibernate 等等。

而且大多数项目在 Java 后端都是分了三层,控制层、业务层、持久层。控制层负责接收参数,调用相关业务层,封装数据,以及路由到 JSP 页面。然后 Jsp 页面上使用各种标签(jstl/el)表达式将后台的数据展现出来。

我们先看上述这种情况,需求定完了,代码写完了,测试测完了,然后发布:

你需要用 maven 或者 eclipse 等工具把你的代码打成一个 war 包,然后把这个 war 包发布到你的生产环境下的 Web 容器里,发布完了之后,你要启动你的 Web 容器,开始提供服务,这时候你通过配置域名,dns 等等相关,你的网站就可以访问了。

那我们来看,你的前后端代码是不是全都在那个 war 包里?包括你的 js,css,图片,各种第三方的库,对吧?

好,下面在浏览器中输入你的网站域名:www.xxx.com,之后发生了什么?

浏览器在通过 ip 路由到你的服务,在 tcp3 次握手之后,通过 tcp 协议开始访问你的 Web 服务器,你的 Web 服务器得到请求后,开始提供服务,接收请求,之后通过 response 返回你的应答给浏览器。

我们先假设你的首页中有 100 张图片,以及一个单表的查询,此时,用户的看似一次 http 请求,其实并不是一次,用户在第一次访问的时候,浏览器中不会有缓存,你的 100 张图片,浏览器要连着请求 100 次 http 请求(有人会跟我说 http 长链短链的问题,不在这里讨论),你的 Web 服务器接收这些请求,都需要耗费内存去创建 socket 来玩 tcp 传输。

重点来了,这样的话,你的 Web 服务器的压力会非常大,因为页面中的所有请求都是只请求到你这台服务器上,如果 1 个人还好,如果 10000 个人并发访问呢(先不聊 web 服务器集群,这里就说是单实例 Web 服务器),那你的服务器能扛住多少个 tcp 链接?你的服务器的内存有多大?你能抗住多少 IO?你给 web 服务器分的内存有多大?会不会宕机?

这就是为什么,越是大中型的 Web 应用,他们越是要解耦。

理论上你可以把你的数据库 + 应用服务 + 消息队列 + 缓存 + 用户上传的文件 + 日志 + 等等都扔在一台主机上,但是这样就好像是你把鸡蛋都放在一个篮子里,隐患非常大。

正常的分布式架构,是都要拆开的,你的应用服务器集群(前,后)+ 文件服务器集群 + 数据库服务器集群 + 消息队列集群 + 缓存集群等等。

步入正题

下面步入正题,首先以后的 Java web 项目都尽量要避免使用 JSP,要搞前后台解耦,玩分布式架构,这样我们的应用架构才更强。

使用 JSP 的痛点:

1、动态资源和静态资源全部耦合在一起,无法做到真正的动静分离。服务器压力大,因为服务器会收到各种 http 请求,例如 css 的 http 请求、js 的、图片的、动态代码的等等。一旦服务器出现状况,前后台一起玩完,用户体验极差。

2、前端工程师做好 html 后,需要由 Java 工程师来将 html 修改成 jsp 页面,出错率较高(因为页面中经常会出现大量的 js 代码),修改问题时需要双方协同开发,效率低下。

3、JSP 必须要在支持 Sava 的 Web 服务器里运行(例如 tomcat 等),无法使用 nginx 等(nginx 据说单实例 http 并发高达 5w,这个优势要用上),性能提不上来。

4、第一次请 JSP,必须要在 web 服务器中编译成 servlet,第一次运行会较慢。

5、每次请求 JSP 都是访问 Servlet 再用输出流输出的 html 页面,效率没有直接使用 html 高。

6、JSP 内有较多标签和表达式,前端工程师在修改页面时会捉襟见肘,遇到很多痛点。

7、如果 JSP 中的内容很多,页面响应会很慢,因为是同步加载。

基于上述的一些痛点,我们应该把整个项目的开发权重往前移,实现前后端真正的解耦!

老的方式:

1、客户端请求

2、服务端的 servlet 或 controller 接收请求(路由规则由后端制定,整个项目开发的权重大部分在后端)

3、调用 service,dao 代码完成业务逻辑

4、返回 JSP

5、jsp 展现一些动态的代码

新的方式:

1、浏览器发送请求

2、直接到达 html 页面(路由规则由前端制定,整个项目开发的权重前移)

3、html 页面负责调用服务端接口产生数据(通过 ajax 等等)

4、填充 html,展现动态效果。

有兴趣的童鞋可以访问一下阿里巴巴等大型网站,然后按一下 F12,监控一下你刷新一次页面,他的 http 是怎么玩的,大多数都是单独请求后台数据,使用 json 传输数据,而不是一个大而全的 http 请求把整个页面包括动 + 静全部返回过来

这样做的好处是:

1、可以实现真正的前后端解耦,前端服务器使用 nginx。

前端服务器放的是 css,js,图片等等一系列静态资源。甚至你还可以 css,js,图片等资源放到特定的文件服务器,例如阿里云的 oss,并使用 cdn 加速,前端服务器负责控制页面引用,跳转,调用后端的接口,后端服务器使用 tomcat。

这里需要使用一些前端工程化的框架比如 nodejs,react,router,react,redux,webpack

2、发现 bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象。

页面逻辑,跳转错误,浏览器兼容性问题,脚本错误,页面样式等问题,全部由前端工程师来负责。

接口数据出错,数据没有提交成功,应答超时等问题,全部由后端工程师来解决。

双方互不干扰,前端与后端是相亲相爱的一家人。

3、在大并发情况下,我可以同时水平扩展前后端服务器,比如淘宝的一个首页就需要 2000 台前端服务器做集群来抗住日均多少亿 + 的日均 pv。去参加阿里的技术峰会,听他们说他们的 web 容器都是自己写的,就算他单实例抗 10 万 http 并发,2000 台是 2 亿 http 并发,并且他们还可以根据预知洪峰来无限拓展,很恐怖,就一个首页。

4、减少后端服务器的并发压力,除了接口以外的其他所有 http 请求全部转移到前端 nginx 上。

5、即使后端服务暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已。

6、也许你也需要有微信相关的轻应用,那样你的接口完全可以共用,如果也有 app 相关的服务,那么只要通过一些代码重构,也可以大量复用接口,提升效率。

7、页面显示的东西再多也不怕,因为是异步加载。

注意:

1、在开需求会议的时候,前后端工程师必须全部参加,并且需要制定好接口文档,后端工程师要写好测试用例,不要让前端工程师充当你的组专职测试,推荐使用chrome 的插件 postman,service 层的测试用例拿 junit 写。

2、上述的接口并不是 java 里的 interface,说白了调用接口就是调用你 controler 里的方法。

3、加重了前端团队的工作量,减轻了后端团队的工作量,提高了性能和可扩展性。

4、我们需要一些前端的框架来解决类似于页面嵌套,分页,页面跳转控制等功能。(上面提到的那些前端框架)。

5、如果你的项目很小,或者是一个单纯的内网项目,那你大可放心,不用任何架构而言,但是如果你的项目是外网项目,呵呵哒。

6、以前还有人在使用类似于 velocity/freemarker 等模板框架来生成静态页面,现在这种做法也被淘汰掉了。

7、这篇文章主要的目的是说 JSP 在大型外网 Java web 项目中被淘汰掉,可没说 JSP 可以完全不学,对于一些学生朋友来说,servlet 等相关的 Java web 基础还是要掌握牢的,不然你以为 Spring MVC 这种框架是基于什么来写的?

西门子与汇川伺服脉冲连接(速度模式) 如何使用西门子PLC与汇川伺服进行脉冲连接 阅读详情

相关推荐

BUPT软件安全实验三

可以看出栈溢出对程序运行的安全性有很大的威胁,如果不对栈进行保护,只要系统中存在栈溢出漏洞,即可令攻击者通过非正当方法获取操作权限。(6)解决思考题,即:在不修改StackOverrun程序源代码的情况下,构造shellcode,通过JMP ESP的方式实现通过记事本打开shellcode.txt(可使用CreateProcessA或WinExec等API)。查看缓冲区信息,可以看到dest指向地址0x0012FAF0,其为数组的存放起始位置,也就是shellcode注入的起始位置。

7xun's space 1967

一文告诉你为什么要放弃 jsp

前戏前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。核心思想是前端html页面通过ajax调用后端的restuful api接...

隐居者 2595

保姆级教程:在Windows 11上用VSCode和Conda搞定Depth-Anything-3(含常见报错修复)

本文提供在Windows 11系统上使用VSCode和Conda配置Depth-Anything-3的完整教程,涵盖环境搭建、依赖安装、常见报错修复及深度图生成实战。特别针对CUDA与PyTorch版本匹配、Hugging Face镜像加速等关键问题提供解决方案,帮助开发者高效实现计算机视觉中的深度估计应用。

weixin_30338481的博客 348

java web项目为什么我们要放弃jsp?

前戏: 以前的项目大多数都是java程序猿又当爹又当妈,又搞前端(ajax/jquery/js/html/css等等),又搞后端(java/mysql/Oracle等等)。 随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只管前端的事情,后端工程师只管后端的事情,正所谓术业有专攻,一个人如果什么都会,那么他毕竟什么都不精。 大中型公司需要专业...

weixin_30496431的博客 2757

电流镜结构实战:从零理解MOS管偏置电路设计(附吴金课程补充)

本文深入解析电流镜结构在MOS管偏置电路设计中的关键作用,从基本原理到实战应用全面覆盖。通过分析偏置电路的核心原理、破解设计难题的实用技巧,以及进阶优化策略,帮助工程师掌握这一模拟电路设计的核心技术。特别适合需要理解电流镜结构和基准电路设计的读者参考学习。

ujm5678901的博客 257

<蓝桥杯软件赛>零基础备赛20周--第16周--GCD和LCM

gcd,lcm

罗勇军的博客 7615

[转]JavaWeb项目前后端分离

前戏 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦, 并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。 这个步骤是系统架构从猿进化成人的必经之路。 核心思想是前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互。 ( 名词解释: 在互联网架构中, web服务器:一...

Ambrose_Ren的博客 715

2026年算法工程师常见面试简答题

本文摘要:文章系统梳理了机器学习与深度学习中的30个核心概念,涵盖模型优化、评估指标、经典算法和大模型应用等关键知识点。主要内容包括:1)过拟合与欠拟合的成因及解决方法;2)偏差-方差权衡原理;3)数据划分与交叉验证策略;4)分类/回归任务评估指标选择;5)逻辑回归、决策树、SVM等传统算法解析;6)梯度下降优化与正则化技术;7)CNN、RNN、Transformer架构对比;8)Embedding表示与RAG技术。特别强调面试高频考点如XGBoost改进、注意力机制原理等,并给出实际工程中的解决方案建议,

不务正业的猿 352

不使用jsp来展示页面

Insert title here helloPost! Select beer light amber brown dark > 可使用html+js+CSS+ajax 例子如上

Angle_wing_wh的博客 495

流体动力学仿真软件:CFX_(10).案例实践:复杂流场分析

在“Phases”选项卡中,定义参与仿真的不同相。例如,如果您要分析气液两相流,可以定义“Air”和“Water”两个相。

kkchenjj的博客 1691

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 377

为什么放弃jsp

在刚进入开发工作的时候,我使用的框架就是SSH,前端用JSP+jquery的方式去渲染去交互.今天我们先说jsp,而jquery放到以后再说. 前端的发展历程先不说太多了,直接进入干货. jsp的痛点 动态资源和静态资源全部耦合在一起,服务器压力大,因为服务器会收到各种http请求,例如css的http请求,js的,图片的等等。一旦服务器出现状况,前后台一起玩完,用户体验极差。 UI出好设计图后...

jave-joe的博客 230

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能。本篇文章主要介绍如何使用xlwings对Excel表格进行多行多列数据设置和操作,并给出相应的源代码。接着,我们可以对这个范围内的所有单元格进行操作,如设置字体颜色、填充颜色、对齐方式等。以上就是使用xlwings对Excel表格进行多行多列数据操作和设置字体颜色、填充色和对齐方式的全部内容。最后,我们可以将数据写入到单元格中,也可以从单元格中读取数据。在Excel中,可以通过。

BUG?不存在的! 714

JavaEE 从入门到放弃(三):为什么要用 JSP?

JSP 和 Servlet 有什么联系?JSP 又有什么样的特性呢?

Evan 的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

为什么要放弃 JSP?他们终于给出了答案

前言 以前的项目大多数都是Java程序猿又当爹又当妈,既搞前,又搞后端。 随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会,那么每一样都很难达到精通。 大中型公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,我建议是分开。你要是这辈子就吃 Java 这碗饭,就不要去研究什么 css,js 等等。 把你的精力专注在 Java,JVM 原理,Spring原理,mysql锁,事务,多线程,大并

weixin_52546522的博客 339

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 从底层原理到调优实战,JVM原来这么有魅力!
下一篇: 几百万数据放入内存会不会把系统撑爆?
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值