为什么 JSP 说凉就凉了?

JSP&EL表达式&MVC&三层结构综合案例 文章目录JSP1,JSP 概述2,JSP 快速入门2.1 搭建环境2.2 导入 JSP 依赖2.3 创建 jsp 页面2.4 编写代码2.5 测试3,JSP 原理4,JSP 脚本4.1 JSP 脚本分类4.2 案例4.2.1 需求4.2.2 实现4.2.3 成品代码4.2.4 测试4.3 JSP 缺点5,EL 表达式5.1 概述5.2 代码演示5.3 域对象6,JSTL标签6.1 概述6.2 if 标签6.3 forEach 标签6.3.1 用法一6.3.2 用法二7 阅读详情

作者 | 水车
链接 | www.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请求把整个页面包括动+静全部返回过来

这样做的好处是:

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

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

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

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

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

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

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

在大并发情况下,我可以同时水平扩展前后端服务器,比如淘宝的一个首页就需要2000台前端服务器做集群来抗住日均多少亿+的日均pv。

去参加阿里的技术峰会,听他们说他们的web容器都是自己写的,就算他单实例抗10万http并发,2000台是2亿http并发,并且他们还可以根据预知洪峰来无限拓展,很恐怖,就一个首页。

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

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

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

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

注意:

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

chrome的插件postman,service层的测试用例拿junit写。

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

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

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

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

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

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

ES配置教程可以参考:

Spring Boot 《一》开发一个“HelloWorld”的 web 应用

更多阅读:

来一起愉快的开始Python吧

最受欢迎的6大Python IDE和代码编辑器

从 Java 程序员的角度理解加密的那些事

Spring Boot 《一》开发一个“HelloWorld”的 web 应用

欢迎关注公众号 :你说神码,id:info1024Q ,一起交流 和学习技术

JSP基础教程 1、JSP简介 JSP(全称JavaServer Pages),sun公司主导的一种动态网页技术,JSP在服务端运行,可以响应客户端的请求,根据请求内容动态的生成HTML、XML或其他格式文档的Web网页然后返回请求者。在JSP页面可以嵌入Java代码,JSP文件在运行时会被其编译器转换成更原始的Servlet代码,然后再由Java编译器来编译成能快速执行的二进制机器码。 2、JSP的一些特点 ①能以模板化的方式简单、高效地添加动态网页内容。 ②可利用JavaBean和标签库技术复用常用的功能代码。 ③有良 阅读详情

相关推荐

【JSP笔记01】为什么会出现JSP,到底什么是JSP,JSP的本质又是什么,JSP的生命周期介绍

这篇文章开始介绍JSP相关技术知识,首先介绍什么是JSP,为什么会出现JSP,JSP实现的原理。 以前文章列表 目录 一、为什么会出现JSP JSP的诞生是基于Servlet组件的,为什么这么说呢??? 我们之前在编写Servlet程序的时候,如果我们要生成动态网页,首先需要在一个Servlet里面,通过response获取到输出流,然后通过调用【println()】方法,将HTML代码输出给浏览器客户端渲染。 假设我们需要编写一个登录表单,那么通过Servlet就需要编写下面这些代码,代码.

✅ Java 开发工程师 1258

为什么要放弃 JSP ?

作者 |水车链接 |www.cnblogs.com/xuange306前言以前的项目大多数都是Java程序猿又当爹又当妈,既搞前,又搞后端。随着时代的发展,渐渐的许多...

公众号:Java后端 1260

实战复盘:一次绕过WAF的EDUSRC SQL注入漏洞挖掘

本文详细复盘了一次针对教育行业网站的SQL注入漏洞挖掘实战。通过手动信息收集发现可疑点,并利用‘+’号替换空格等技巧,成功绕过WAF(Web应用防火墙)的拦截。文章逐步演示了从判断注入点到手工获取数据结构、最终解密进入后台的完整过程,并总结了手工测试的优势及高级绕过思路,强调了在EDUSRC等授权范围内进行安全测试的重要性。

weixin_28622215的博客 191

什么是jsp?

目录 一、JSP的介绍 二、JSP的本质 三、JSP的常用脚本 1.声明脚本 2.表达式脚本 3. 代码脚本 4、JSP九大内置对象 5、jsp四大域对象 一、JSP的介绍 JSP的全称是Java Server Pages,即Java的服务器页面 JSP的主要作用是代替Servlet程序回传HTML页面的数据 二、JSP的本质 JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览器地址栏输入路径),Tomcat服务...

weixin_48112109的博客 4万+

eNSP-交换机VLAN配置

VLAN

乌托托的博客 8803

IEEE Journal of Biomedical and Health Informatics(JBHI)投稿经验分享

《IEEE Journal of Biomedical and Health Informatics投稿经验分享》详细记录了在影响因子6.7的中科院一区期刊JBHI的投稿历程(2025.1-5月,历时4个月)。文章重点分析:1)审稿特色:4位审稿人差异显著,领域专家意见专业但要求严苛;2)修改要点:需重视大修(补充实验/原理阐述),并注意将回复内容同步至正文;3)期刊特点:送审率高但审稿严格,常规投稿周期约4-5个月;4)实用建议:建议首次大修全力以赴,善用AI工具辅助写作,避免拖延。

LiRongLu_的博客 5071

JavaWeb技术之JSP

目录 1. 什么是JSP 2. JSP为什么会出现 3.JSP中如何嵌套java代码 示例 jsp中的注释 4. JSP的原理 5. JSP的内置对象 1、request对象 2、response对象 3、session对象 4、application对象 5、out 对象 6、pageContext 对象 7、confifig 对象 8、page 对象 9、exception 对象 6. JSP的指令 (1)Page指令 (2) Include指令 (3)Tagli

qq_36279562的博客 7591

【踩坑记录】pandas.to_sql 报 “‘Engine‘ object has no attribute ‘cursor‘”,最后竟然是环境问题

摘要 本文记录了使用pandas+SQLAlchemy+pymysql将数据写入MySQL时遇到的"Engine对象无cursor属性"错误及其解决方案。问题表现为to_sql方法将SQLAlchemy引擎误认为普通DBAPI连接,导致调用cursor()方法失败。经排查发现,这是由于pandas/SQLAlchemy环境损坏所致,而非代码问题。最终通过完全卸载并重新安装pandas(≥2.1)、SQLAlchemy(≥2.0)和pymysql解决了该问题。文章还建议将遗留的read_s

每日出拳老爷子的博客 336

为什么说JSP就是Servlet

Copyright©Zi10ng Jsp和Servlet是学习JavaEE绕不过的弯,那么为什么Jsp就是Servlet呢? 原因 平常在测试代码的时候,我们可能在servlet的派生类中写上这么一行代码: response.getWriter().write("<h1>测试成功<h1>"); 这样字符串中的html语句就会通过servlet输出到浏览器的页面上。 早...

王星星 3665

【红外DDE算法】一种应用于高动态范围红外可视化的算法

【红外DDE算法】一种应用于高动态范围红外可视化的算法 - 这个算法背后的动机 - 展示这个算法的流程 - 然后讨论各个可调参数的意义。

sunwindl91181的博客 1682

高速PCB设计中的一些常用规则

目前,高速PCB产品设计中,高速接口的应用日益普及,对于复杂的设计而言,高速走线就如同“蜘蛛网”一样密布在PCB各处,因此,在进行PCB检查及评审时,必要的高速PCB设计经验法则及规则是工程师开展工作必不可少的知识储备。

一只豌豆象的博客 3413

jsp为什么被淘汰了?

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

zhansan的博客 9401

Windows 上 openclaw onboard --install-daemon 命令的安装位置和启动配置

摘要:Windows系统中,执行openclaw-cnonboard--install-daemon命令会创建计划任务OpenClawGateway,该任务在用户登录时自动运行位于%USERPROFILE%.openclaw\gateway.cmd的脚本文件来启动服务。管理方法包括通过任务计划程序或命令行(schtasks)查看/启停任务,使用openclaw gateway命令操作服务,或通过删除计划任务和脚本文件完全卸载服务。该机制确保OpenClawGateway服务随系统登录自动启动。(149字)

大坡3D软件开发 1369

JSP原理-为什么说JSP就是一个Servlet

Java Server Pages:java服务器端页面,也和Servlet一样,用于动态Web技术 就像在HTML语言中嵌入Java语言,为用户提供动态页面。 浏览器向服务器发送请求,不管访问什么资源,都是在访问Servlet JSP最终也会被转化为一个Java类,JSP本质就是一个Servlet JSP原码: 1.判断请求 public void _jspInit(){ //初始化 } public void _jspDestroy(){ //销毁 } public void _jspService(H

weixin_44976835的博客 687

OmniBox2.0.X版本 一站式影视订阅与多端播放平台文档

OmniBox 是一站式影视订阅与多端播放平台:你可以用 JS 或 Python 按 OmniBox 规范自建爬虫源,在后台把多个爬虫源自由组合成订阅,然后在网页、手机、电视等全平台的客户端里使用。只要客户端支持 TVBox、猫源、UZ、Emby 等协议,即可无缝对接。同时支持电视直播源、六大平台直播间和网盘源视频在线观看,通过 Docker 一键部署。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1896

efm32 入门.pdf

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

为什么说Jsp就是Servlet(底层原理解析)

为什么说Jsp就是Servlet 首先我们来了解下什么是jsp: jsp:Java Server Pages —java服务器端的页面 组成:html代码+jsp代码+java代码 后缀名:.jsp 存放位置和html一致 总结:既能写java代码也可以写html、css、js代码 用来展示服务端的数据 Jsp底层就是servlet,servlet是一个java类,所以jsp也是一个java类 原因:是一个java类就一定会有.java文件 .class文件,我们可以打开tomcat中的work目

大白的博客 1938

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jsp stc_为什么说jsp的本质是servlet?

我们知道,一个实现了servlet接口的java类被称为一个servlet,jsp实现了servlet接口,所以说jsp本质上是一个servlet不过,jsp这个实现接口的方式隐藏得比较深,得从源码上才能看出,接下来将以一个简单例子说明。1.首先我们从一个简单的javaweb的demo项目来看,jsp从内容来看更像一个html文件才对,这和servlet相差甚大 2.接着我们试着运行下这个demo...

weixin_39927378的博客 318

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

为什么说jsp就是servlet

jsp和servlet的区别与联系

weixin_61329725的博客 367

为什么说jsp是servlet?JSP是如何转换成servlet的?

JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。     由于包括大量的HTML标签、大量的静态文本及格式等,导致Servlet的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中,这的确让人不胜其烦。JSP的出现弥补了这种

lizexing1的博客 1138

什么是JSP,为什么要学习JSP?

什么是JSP,为什么要学习JSP?

胡晗靓的Java学习博客 4513

jsp本质是java类_为什么说jsp的本质是servlet?

我们知道,一个实现了servlet接口的java类被称为一个servlet,jsp实现了servlet接口,所以说jsp本质上是一个servlet不过,jsp这个实现接口的方式隐藏得比较深,得从源码上才能看出,接下来将以一个简单例子说明。1.首先我们从一个简单的javaweb的demo项目来看,jsp从内容来看更像一个html文件才对,这和servlet相差甚大2.接着我们试着运行下这个demo项...

weixin_39603265的博客 580

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

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

Evan 的博客 1万+

都说了多少遍,不要再学 JSP 了!

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达一套牛逼的SpringCloud微服务电商实战项目,文档贼全!作者:陈龙zhuanlan.zhihu.com/p/7193749...

公众号-老炮说Java 1861

为何都说jsp就是servlet

众所周知,jsp本质就是servlet。我在一开始就是完全靠死记硬背的,根本不知道其中的缘由。也是最近看一些jsp教学视频才彻底地明白这句话的意思

Royal_js的博客 567
上一篇: 为什么 IDEA 比 Eclipse 更好?
下一篇: 来自小码君的爱
你说神码
博客等级 码龄9年 41粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值