jsp已经淘汰了吗,jsp淘汰了为什么还有人用
之前的项目大多是java程徐苑的爸爸妈妈,搞前端(ajax/jquery/js/html/css等。)和后端(java/mysql/Oracle等。).
随着时代的发展,很多大中小公司逐渐开始让前台和后台的界限越来越清晰。前端工程师只管前端的事,后端工程师只管后端的事。正所谓术业有专攻。如果一个人什么都懂,那他终究什么都不会。
推荐课程:Java教程。
如何解决写爬虫IP受阻的问题?立即使用。
大中型公司需要专业人才,小公司需要多面手。但是对于个人职业发展,我建议分开。如果一辈子吃java,就不要去学css,js之类的。
把精力集中在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架构,微服务,以及相关项目管理等方面。这样你的核心竞争力就会越来越高。俗话说,你投入生活的东西,生活会回馈给你。
(满满的正能量:
一旦你成为行业精英,相信我,到时候,车、房、女人、钱、机会都会找上门来。别担心,真的。
做java程真的很简单。你知道的知识越多,你就会有越多的钱。当然,你需要有一定的情商。
你的能力越强,你创造的价值就会比别人多。你会为公司创造价值,公司会给你各种福利。双赢!)
我们的java web项目曾经使用过几个后台框架,比如Spring MVC/Struts Spring Spring JDBC/Hibernate/MyBatis等等。
大多数项目在java后端分为三层,即控制层(控制器/动作)、业务层(服务/管理)和持久层(dao)。
控制层负责接收参数,调用相关业务层,封装数据,路由到jsp页面。然后,在jsp页面上使用各种标签(jstl/el)或手写java(%=%)来显示背景数据。
正确
我们先来看看这个情况。需求定好了,代码写好了,测试完成了,然后呢?它会被释放吗?
你需要用maven或者eclipse之类的工具把你的代码做成一个war包,然后把这个war包发布到你生产环境中的web容器(Tomcat/JBoss/WebLogic/WebSphere/Jetty/resin)上,对吧?
发布之后,您必须启动您的web容器并开始提供服务。这时候你就可以通过配置域名,dns等等(假设你是网站)来访问你的网站了。
让我看看,你所有的前后码都在那个警告包里吗?包括你的js,css,图片,还有各种第三方库吧?
好了,现在在浏览器中输入你的网站域名(www.xxx.com)。之后会发生什么?(这个问题也是很多公司的面试问题)
我拿起干的。基础差的童鞋请搜一下。
浏览器通过ip路由到你的服务后,与tcp三次握手后,开始通过TCP协议访问你的web服务器。你的web服务器得到请求后,开始提供服务,接收请求,然后通过response把你的响应返回给浏览器。
我们来看看。我们先假设你的首页有100张图片,一个单表查询。此时,用户的请求看起来像是http请求,但实际上不是。当用户第一次访问时,浏览器中不会有缓存。对于你的100张图片,浏览器要连续请求100个http请求(会有人跟我说http链长短的问题,这里就不讨论了),你的web服务器会收到。
重点来了。在这种情况下,你的web服务器的压力会非常大,因为页面中的所有请求都只针对你的服务器。一个人没问题,一万个人并发访问怎么办(先不说web服务器集群,这里就说是单实例web服务器)?你的服务器能容纳多少个tcp链接?你的服务器内存有多大?你能抵抗多少木卫一?你给网络服务器分配了多少内存?会不会下来?
这就是为什么,越是大中型的web应用,越想解耦。
理论上,你可以抛出你的数据库应用服务消息队列,缓存用户上传的文件日志等。在一台主机上,但这就像你孤注一掷,有很大的隐患。
正常的分布式架构需要拆解,比如你的应用服务器集群(前台和后台)、文件服务器集群、数据库服务器集群、消息队列集群、缓存集群等等。
让我们言归正传。首先,未来所有的java web项目都要尽量避免使用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里面有很多内容,页面响应会比较慢,因为是同步加载。
基于上述痛点,要把整个项目的开发重心前移,实现前后端真正的解耦!
老方法是:
1.客户请求
2.服务器的servlet或控制器接收请求(路由规则由后端制定,整个项目开发的重要部分在后端)
3.调用服务,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,服务层的测试用例是用junit写的。
2.上面的接口不是java里的接口。说白了,调用接口就是调用你控制器里的方法。
3.前端团队工作量增加,后端团队工作量减少,性能和可扩展性提高。
4.我们需要一些前端框架来解决像页面嵌套、分页、页面跳转控制等功能。(上面提到的那些前端框架)。
5.如果你的项目很小,或者是简单的内网项目,那么你可以放心,没有任何架构,但是如果你的项目是外网项目,呜呼。
6.以前有人用velocity/freemarker之类的模板框架生成静态页面,现在这种做法已经被淘汰了。
以上这篇文章主要的目的是说jsp在大型外网java web项目中被淘汰掉,可没说jsp可以完全不学,对于一些学生朋友来说,jsp/servlet等相关的java web基础还是要掌握牢的,不然你以为springmvc这种框架是基于什么来写的?是jsp为什么被淘汰的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。