ChenZhen 搜索
首页 标签 归档 留言板 友链 关于我

文章标题

Welcome to my website ——by 陈震 (Chen Zhen)

出处:见文章最下方

版权:本文版权归原作者所有

本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除。


想知道现在jsp有没有学习的必要,首先我们需要知道的是什么是jsp?

jsp能干什么?

jsp是一种动态网页技术标准。jsp是JavaServerPages的缩写。jsp部署在网络的服务器中,能够响应客户端发送的请求,且按照请求的内容动态生成XML、HTML或者别的格式文档的Web网页,再返回给请求者。

其实jsp就是一个模板引擎,还有以前用的比较多的freemarker,包括SpringBoot给我们推荐的Thymeleaf,模板引擎有非常多,但再多的模板引擎,他们的思想都是一样的。

模板引擎的作用就是我们来写一个页面模板,比如有些值呢,是动态的,我们写一些表达式。而这些值,从哪来呢,我们来组装一些数据,我们把这些数据找到。然后把这个模板和这个数据交给我们模板引擎,模板引擎按照我们这个数据帮你把这表达式解析、填充到我们指定的位置,然后把这个数据最终生成一个我们想要的内容给我们写出去,这就是我们这个模板引擎,不管是jsp还是其他模板引擎,都是这个思想。只不过呢,就是说不同模板引擎之间,他们可能语法有点不一样。①

jsp的缺点

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

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

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

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

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

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

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

jsp作为一个后端渲染技术,已经不符合现在前后端严格分离的主流设计思路,任何人或事物都无法抵御时代的洪流,早期如日中天的Struts框架,现在也早已被SpringMVC替代, 纵使现在仍然有部分企业和项目还在使用jsp,但是它的没落已经是注定了。并且现在SpringBoot官方已经默认不支持jsp了。

那这种开发模式非常影响项目开发效率,怎么办?那就解耦。“高内聚,低耦合”是永远不变的定理。

jsp就是一个典型的前后端耦合在一起的技术,套个模板可以把大家套的死去活来的,但是在以前互联网发展还没那么繁荣的时代发挥着巨大的作用,因为页面不是那么复杂,而且使用也比较简单。你们会发现,这样做其实挺好的,市场也验证了一切,很快jsp技术流行开来,可是随着时间的流逝,业务越来越复杂,jsp已经开始跟不上时代了。解耦势在必行,前端的责任逐渐从后端人员身上拿掉,逐渐形成了一个单独的岗位及责任领域,前端也开始逐渐像后端一样开始工程化,模块化、项目化。

于是另外一套机制横空出世了,这就是前后端分离。什么是前后端分离呢?

前后端分离

现在是前后端分离的时代

把前端与后端独立起来去开发,放在两个不同的服务器,独立部署。两个不同的工程,两个不同的代码库,不同的开发人员,前后端工程师只需要沟通好接口规范就可以实现同步开发。开发结束后进行独立部署,前端通过接口来调用调用后端的API,前端只需要关注页面的样式与动态数据的解析和渲染,而后端专注于具体业务逻辑,站在本身做后端的角度,我用Java也好,PHP也罢,不用管我怎么实现的,最终给前端的只是一串协商好的接口数据,也可以给多个类型前端去用,比如web,手机网页,小程序等等。一次开发,处处使用。站在前端的角度来看,我需要的数据完全可以去从mock服务器去拿,不能傻呵呵的等你后端给我数据。

自此前后端分离彻底分离

前端就主要负责写页面了,至于那些需要被后台数据给动态渲染的地方呢?那就到时候用到了以后,给后端发请求,找后端要数据然后动态渲染就行了。 反观后端呢?后端就只负责接受请求,然后处理请求,查询数据库,处理数据,然后把前端想要的数据返回就行了,至于数据怎么渲染?那也我和后端没关系了。

前后端分离的优点是什么?

1、彻底解放前端。前端不再需要向后台提供模板或是后台在前端HTML中嵌入后台代。

2、提高工作效率,分工更加明确。前端只关注前端的事,后台只关心后台的活,两者开发可以同时进行,在后台还没有时间提供接口的时候,前端可以先将数据写死或者调用本地的JSON文件即可,页面的增加和路由的修改也不必再去麻烦后台,开发更加灵活。

3、局部性能提升。通过前端路由的配置,我们可以实现页面的按需加载,无需一开始加载首页便加载网站的所有的资源,服务器也不再需要解析前端页面,在页面交互及用户体验上有所提升。

4、降低维护成本。通过目前主流的前端MVC框架,我们可以非常快速的定位及发现问题的所在,客户端的问题不再需要后台人员参与及调试,代码重构及可维护性增强。

5、实现高内聚低耦合,减少后端(应用)服务器的并发/负载压力。

6、即使后端服务暂时超时或者宕机了,前端页面也会正常访问,但无法提供数据。

7、可以使后台能更好的追求高并发、高可用、高性能,使前端能更好的追求页面表现、速度流畅、兼容性、用户体验等。③

jsp的替代品

但是前后端分离也不是是单纯的技术问题。需要考虑成本、人力、开发,工具,部署等等方面。处理不善只会带来麻烦,而不是便利。

而对于小项目而言,前后端分离的弊是大于利的。那如果没有了jsp,用什么来代替他呢?毕竟如果是自己个人独立开发,自己搞前后端分离不累吗?

虽然 jsp 基本被淘汰了,但是它的技术替代品如雨后春笋,层不出穷。

模板引擎技术就是其中的代表。

现在大部分的模板引擎freemarker、Thymeleaf、Velocity,已经能够完全代替jsp,而且对开发者更友好,再加上现在前端能做的事更多了,jsp这种前后端混合的交互模式已经显得多余甚至是反面教材了。现在都是前后端分离或者是SpringBoot+轻量级模版引擎的系统了。

我们都知道传统的页⾯开发通常采⽤ HTML+ JS 技术,⽽现在⼤部分⽹站都采⽤标签化 + 模块化的设计。

模板引擎技术就是根据这种⽅式,使⽤户界⾯与业务数据分离⽽产⽣的。

它可以⽣成特定格式的⽂档,⽤于⽹站的模板引擎就会⽣成⼀个标准的 HTML ⽂档在原有的 HTML 页⾯中来填充数据,最终达到渲染页⾯的⽬的。

模板引擎技术说白了就是把数据和页⾯整合在⼀起的技术。④

image

这里推荐我自己也在使用的一款模板引擎Thymeleaf,也是springboot官方推荐使用的一款模板引擎。

Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。

这是由于它支持 html 原型,然后在html标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以thymeleaf的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

可以使得模板不破坏html原有的语法结构,这样就获得了其他模板引擎没有的一个重要特性:thymeleaf定义的模板是可以被正常渲染的。

换而言之就是thymeleaf的模板仍然是一个html页面,你可以随时打开它改模板和测试样式。而不是一个.jsp文件,必须由服务器解析才能看到效果

如果你是一个年轻的学生,我的建议还是用Thymeleaf来代替jsp,跟着时代走不会有问题。

当然,如果你还没学习JSP,我建议还是可以了解一下,不需要深入去学习JSP的各种内容,但可以了解一下。至少别人说起JSP的时候,你能知道什么是JSP,能看懂JSP的代码。

有句话我很喜欢:学习jsp,就是为了了解为什么jsp千万不要去学。

jsp已经没有深入学习的必要了,除了维护老项目能用上一些,基本属于被淘汰的边缘了。

上面我所说的一切只是针对jsp这个渲染引擎而言,而不是说Servlet已经过时,Servlet 是前后端交互的基石,是javaweb的必学内容,不学Servlet你永远不知道前端请求是如何发送到后端的,你也不知道 Web 容器的工作机制是怎样的。

spring mvc ,structs2等大部分javaweb框架都是基于Servlet体系来构建的。ServletApi是这些上层框架的基石。比起jsp更应该学好javaweb最重要的知识Servlet、HTTP、Session作用域、转发以及重定向、过滤器、监听器、MVC架构。

事实上,作为一个技术面试官,在这两年的前端面试中,我已经不再问任何与Jsp有关的知识了。

道理非常简单。公司这两年的所有项目,都遵循严格的前后端分离。Jsp已经从公司的技术栈中彻底剔除了。

至于有人说,多学点东西总是有益的。单说道理肯定没错,但关键是要付出的成本

Jsp的技术栈,要完全掌握和理解,并不简单。

除了Jsp特有的技术(例如jstl)。因为是后端渲染技术,所以还要学习java。再叠加前端工程师的基本技能(例如html/css/js等)。所以,要完全掌握Jsp,所要付出的成本是很高的。

而付出巨大的努力之后,最终你还发现,自己所获的,不过是一个行将朽木的技术。

如果说学习也是一门买卖,付出时间和金钱,换取技能(最终还是金钱)。那么,后来者学习jsp就是一门彻底的亏本买卖。

但jsp目前还没在业界彻底消失,尤其是一些老项目的维护。因此,在特定条件下,程序员确实需要了解。

但是,对程序员来说,对Jsp技术,直到到用时再了解不迟。而且不必精通,“浅尝辄止”即可。

请务必记住。Jsp是严重过时的技术,行将进入坟墓。因此,对投入学习时间的程序员来说,几乎没有成长性,反而要付出巨大的机会成本。

所以,一定把握好度!

作者:沈世钧

链接:https://www.zhihu.com/question/328020258/answer/706542257

来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

引用来源 ①:https://www.zhihu.com/answer/2061016947

②:https://blog.csdn.net/xuaman/article/details/78296871?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-0&spm=1001.2101.3001.4242

https://zhuanlan.zhihu.com/p/360164724

③:https://zhuanlan.zhihu.com/p/115016903

④:https://blog.csdn.net/m0_72533993/article/details/125586251

© 版权声明
😀😃😄😁😆😅🤣😂🙂🙃😉😊😇🥰😍🤩😘😗😚😙😋😛😜🤪😝🤑🤗🤭🤫🤔🤐🤨😐😑😶😏😒🙄😬🤥😌😔😪🤤😴😷🤒🤕🤢🤮🤧🥵🥶🥴😵🤯🤠🥳😎🤓🧐😕😟🙁☹️😮😯😲😳🥺😦😧😨😰😥😢😭😱😖😣😞😓😩😫🥱😤😡😠🤬