这里写目录标题

  • 一级目录
    • 二级目录
      • 三级目录
  • 一在java领域,表现层技术主要有四种:`jsp、freemarker、velocity,themleaf`
    • 1jsp是大家最熟悉的技术
    • 2velocity是较早出现的用于代替jsp的模板语言
    • 3freemarker
    • 4themleaf
  • 二 大前端已成为趋势
  • 三 JSP为什么会被淘汰?真的不用学习JSP技术了么?
    • 1为什么不用jsp了?
    • 2 对于是否能使用JSP来说,是需要针对项目大小而言的
      • 2.1在项目生产中使用 JSP 的痛点:
      • 2.2过去的项目处理客户请求的方式:
      • 2.3过去的项目处理客户请求的方式:
      • 2.4直接通过AJEX处理客户请求的方式的好处:
    • 3 在实际生产中的需求会议对于前端的应用选择
  • 四总结

一级目录

二级目录

三级目录

一在java领域,表现层技术主要有四种:jsp、freemarker、velocity,themleaf

1jsp是大家最熟悉的技术

优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。

2velocity是较早出现的用于代替jsp的模板语言

优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好

3freemarker

优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多

4themleaf

再从java框架springboot来看,默认就是不支持jsp的,后台模板引擎默认是themleaf,但这并不能代表themleaf是未来趋势,因为前端技术在后端技术进步的同时在飞速发展。

二 大前端已成为趋势

我们先来看一下tomcat版本数据:
 
  我们可以看到,从tomcat8之后JSP就再没有新的支持了,tomcat8大概是2013年发布的,也就是说,从2013年开始jsp技术已经实质上不被官方继续维护了。

再从java框架springboot来看,默认就是不支持jsp的,后台模板引擎默认是themleaf,但这并不能代表themleaf是未来趋势,因为前端技术在后端技术进步的同时在飞速发展。

自从JamesGosling开发Java语言,SUN大力推行基于Java的从前端到后端的完整的企业级解决方法(J2EE),发展至今基于服务器端JSP技术地位与处境已经越来越尴尬。JSP技术的兴起与发展得益于WEB技术推广与发展,但是伴随着WEB2.0发展与富客服端应用(RIA)的发展,基于JSPTag的web伪前端技术表现的越来越无力。如今伴随着更多的富客户端技术的发展与不断的走向成熟,其中具有代表性的为Angular、React、Vue等,同时伴随着ajax技术以及HTTP长连接协议Bayeux广泛应用,而且已经成为RFC标准文档之一。而且伴随着各大浏览器厂商对HTML5的大力支持,WEB开发应用新一轮的技术革新已经成为定局。在这种情况下,曾经风云一时的JSP/Tag模板引擎技术没落是不可逆转。

J2EE中传统的前端依靠JSP Tag技术封装,依靠服务器解析,完成页面预编译之后,通过HTTP发送到用户浏览器端。那些数不清的JSP标签库/TAG库,由于缺乏必要的技术规范各大厂商完成的千差万别。很多时候已经成为影响J2EE开发效率的一大死穴。JSP等模板引擎作为伪前端技术(实际上是服务器端技术)有如下弊端:

1. 标签库没有统一标准,各大厂商完成不一,常使开发者晕头转向
  2. 本身不是一种前端与后端分离的技术,不能实现前端与后端各自的语言独立
  3. 不是好的富客户端技术,GWT虽然可以用为富客户端前端技术,但是也是基于Java
  4. 前端与后端数据交换XML/JSON支持不够灵活,不是天生支持Ajax

反观Angular、React、Vue等前端技术,主要有以下显著特点:

1. 前台与后台语言独立,
  2. 内嵌支持Ajax
  3. 灵活的数据交换支持XML/JSON
  4. 前后端独立语言的好处,理论上后端可以支持任何语言

现在很多新开发的WEB应用,Java作用主要在后台,但浏览器端越来越与Java无关是无关的,这个就是WEB2.0的威力,Div + CSS + Json的数据交换以及Javascript库(ExtJS, JQuery)的应用,足以已经使前端开发与后端开发完全分离,这些完全得益于ajax/Bayeux(Comet)等技术助推。伴随着HTML5技术的进一步推广,独自在后端闭门造车的行为变得尤其愚蠢。而且近些年发展迅猛的虚拟Dom技术类框架Angular、React、Vue,配合Redux、dva等数据流方案,使得大前端的时代已然真正的降临。

三 JSP为什么会被淘汰?真的不用学习JSP技术了么?

1为什么不用jsp了?

曾经JavaEE开发前端多数用的是JSP技术,因为在JSP出现之前,程序员基本都是在Servlet端直接通过out.print的方式拼接出一个页面返回,这样的做法严重的违背了MVC分层原则,前端会非常难以维护。Jsp技术出现后,极大的改善了这个问题,在将试图层抽离出来的同时,也充分保证了页面的动态性。但是现在开发却很少用到JSP了。终其原因大概可以归纳为以下几点:

1、JSP底层原理就是Servlet直接out.print的方式运行,在第一次访问JSP时,需要将JSP编译成Servlet的class文件,拖慢运行速度。
2、JSP可以直接嵌入java脚本,实现页面动态化,但是这样就打破了分层的思想,影响整体程序结构,降低JSP页面的可读性。
3、可以使用jstl标签或者el表达式代替Java脚本,增加页面的可读性,但是el表达式底层有一些反射实现,这样会降低页面的渲染速度
4、后续出现了很多优秀的模板技术(velocity、freemarker、thymeleaf等),这些模板技术效率都高于jsp,对于企业和开发者来说,选择变多了。
5、现在很多企业都开始采用前后端分离的项目结构了,后端专注并发、存储等方面,前端通过VUE等框架实现,JSP只能运行在web容器中,无法运行在nginx这样的高效的http服务上,因此慢慢的被时代所遗弃。
6第一,当年废 jsp 提倡用 freemaker 和 velocity 是为了防止工程师在页面里写逻辑
7,springboot 不推荐用 jsp 是因为打成单体 jar 包运行后,需要另外的存储去保存自动生成的 servlet,不安全

2 对于是否能使用JSP来说,是需要针对项目大小而言的

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

2.1在项目生产中使用 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高。
5. JSP 内有较多标签和表达式,前端工程师在修改页面时会捉襟见肘,遇到很多痛点。
6. 如果JSP中的内容很多,页面响应会很慢,因为是同步加载。基于上述的一些痛点,我们应该把整个项目的开发权重往前移,实现前后端真正的解耦!

2.2过去的项目处理客户请求的方式:

1.客户端请求
2. 服务端的servlet或controller接收请求(路由规则由后端制定,整个项目开发的权重大部分在后端)
3. 调用service,dao代码完成业务逻辑
4. 返回JSP
5. jsp展现一些动态的代码

2.3过去的项目处理客户请求的方式:

1 浏览器发送请求
2直接到达html页面(路由规则由前端制定,整个项目开发的权重前移)
3 html页面负责调用服务端接口产生数据(通过ajax等等)
4.填充html,展现动态效果。有兴趣的童鞋可以访问一下阿里巴巴等大型网站,然后按一下F12,监控一下你刷新一次页面,他的http是怎么玩的,大多数都是单独请求后台数据,使用 json传输数据,而不是一个大而全的http请求把整个页面包括动+静全部返回过来

2.4直接通过AJEX处理客户请求的方式的好处:

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页面显示的东西再多也不怕,因为是异步加载。

3 在实际生产中的需求会议对于前端的应用选择

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

2上述的接口并不是java里的interface,说白了调用接口就是调用你controler里的方法。
3加重了前端团队的工作量,减轻了后端团队的工作量,提高了性能和可扩展性。
4 我们需要一些前端的框架来解决类似于页面嵌套,分页,页面跳转控制等功能。(上面提到的那些前端框架)。
5如果你的项目很小,或者是一个单纯的内网项目,那你大可放心,不用任何架构而言,但是如果你的项目是外网项目,呵呵哒。
6以前还有人在使用类似于velocity/freemarker等模板框架来生成静态页面,现在这种做法也被淘汰掉了。

四总结

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

【JAVA企业级开发】浅谈关于在WEB大前端已然降临的时代中,你是否还是在学习jsp、freemarker、velocity、themleaf等模板引擎么?相关推荐

  1. 猿来小课Java视频教程讲师浅谈JAVA体系结构

    猿来小课Java视频教程讲师:Java体系结构中不仅定义了Java的开发编译环境,也定义了Java的运行环境.为运行Java应用程序和applet,计算机上应安装JVM和Java运行时解释器,这两个部 ...

  2. 校园兼职网站php设计,基于PHP+MySql的校园兼职信息平台的开发浅谈

    Data Base Technique 0数据库技术基于PHP+MySqI的校园兼职信息平台的开发浅谈文刘晓智1杨雨锋2李万星2 表1:数据库一蹬表 摘要 首光简要介绍了编程语孬和MySql数据库的主 ...

  3. html的JEE安装,JEE ( Java 企业级开发技术)

    JEE ( Java 企业级开发技术) View 100 Download 2 Embed Size (px) 344 x 292429 x 357514 x 422599 x 487 DESCRIP ...

  4. Java企业级开发概念辨析

    Java企业级开发的概念 什么是Java企业级开发? 大家对Java企业级系统可能没有什么概念,但是大家应该用过选课系统.百度新闻这种系统.这些系统都是一个单位.一个组织才需要的.我们个人每天过日子其 ...

  5. 蛋花花谈怎么区分web的前端与后端

    蛋花花谈怎么区分web的前端与后端!据蛋花花了解在web开发中其实分为web前端与后端,那么两者有什么区别呢?下面蛋花花就来给大家介绍一下怎么区分web的前端与后端. 据蛋花花了解web前端分为网页设 ...

  6. html中单选按钮设置监听事件,浅谈监听单选框radio改变事件(和layui中单选按钮改变事件),单选框radio...

    浅谈监听单选框radio改变事件(和layui中单选按钮改变事件),单选框radio 若是只引用jquery的话,监听单选按钮改变事件如下: 男 女 $(document).ready(functio ...

  7. 02.Web大前端时代之:HTML5+CSS3入门系列~H5结构元素

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 1.结构元素 可以理解为语义话标记,比如:以前这么写&l ...

  8. 04. Web大前端时代之:HTML5+CSS3入门系列~HTML5 表单

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 一.input新增类型: 1.tel:输入类型用于应该包 ...

  9. 手机java软件_浅谈软件开发就业前景

    ​ 我国信息化人才培养还处于发展阶段,导致社会实际需求人才基数远远大于信息化人才的培养基数,使得数以万计的中小企业急需全面系统掌握软件开发基础技能与知识的软件工程师.目前对软件已达20万并且以每年20 ...

最新文章

  1. 逻辑心理测试题:三囚分汤
  2. AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision
  3. 【MFC】MFC消息处理和映射
  4. 洛谷 - P3690 【模板】Link Cut Tree (动态树)(LCT模板)
  5. __asm__ __volatile__(: : :memory);
  6. Python测试开发django3.视图和URL配置
  7. 12.Qt中字符串相关处理
  8. Java 8备受宠爱,HarmonyOS冲刺全球第三大操作系统,全民热议元宇宙|2021十大技术热词
  9. LinkedHashMap介绍
  10. java编译过程_java 程序编译和运行过程详解
  11. 基于TCP的在线词典
  12. thymeleaf 默认选中下拉框(select option)
  13. 基于STM32的计算器
  14. 三度冲刺IPO,负债率超70%的喜相逢能否成功敲钟?
  15. HTML5怎么并排两个表格,如何将任务栏上的两个Excel表格并排显示
  16. word打开老是配置进度_打开word文档显示配置进度怎么办 Word文档提示配置进度解决办法...
  17. 赛诺菲巴斯德宣布建立专属mRNA疫苗卓越中心;​葛兰素史克单片双药艾滋病治疗药物多伟托在中国上市 | 医药健闻...
  18. SpinalNet: Deep Neural Network with Gradual Input
  19. 大学物理实验 基本量的测量
  20. SpringBoot 接口数据加解密实战!

热门文章

  1. 目标检测(二)——SPPNet
  2. 【python】zip函数详解
  3. 写个程序登陆58同城
  4. 录屏软件--ZD Soft Screen Recorder_8.0
  5. Mongod 基础知识 + 命令 + 配置文件
  6. Linux系统编程_进程 获取getpid(子),getppid(父),创建(fork,vfork)
  7. servlet传参给jsp和js与java变量互传(废弃,建议JSP开发使用jstl)
  8. java代码规范总结
  9. 计算机视觉的应用3-批量图片风格迁移之素描图片生成的应用
  10. 一命二运三风水,四积功德五读书,六择业七择偶,八交贵人,九养生