谢谢邀请,大多数网站还是静态网站为主,JSP主要是动态网站,从应用范围上来说还是静态网站多,而且现在php或者Python在动态页面上的展示上也有自己独特的优势,特别是针对中小网站,jsp主要前期积累多,而且在数据分布上占有独特优势,所以也不能说JAVA web不行了。
希望能帮到你。
不要听别人瞎扯,这个跟语句有关系,但不是绝对必然的关系。
国外的quora就是python写的,国内的豆瓣也是python写的,facebook是php写的,后来为了追求性能,把php预先编译了(现在facebook是不是php写的,不清楚)。
语言就只有语法等,还需要编译器、工具、容器等,比如提供预编译php功能的容器或编译器,语言以及围绕语言构建的整个生态体系才是至关重要的,比如python是脚本语言,速度很慢,但是可以考虑使用PyPy、cpython等!
请记住,java语言的一些特性导致了java没有脚本语言灵活,写起代码来非常费劲,产出率很低,这就是为什么很多互联网企业在某部分甚至整个部分抛弃它的原因(有那么多人对这句话进行嘲讽,我就再说两句,国内互联网公司还是极大部分采用java,不过已经不是只有java了)。
html结尾并不代表什么这是这个问题的url,它不以任何后缀结尾,所以不要通过后缀名来判断网站使用的技术。
现在有很多重写重定位的技术,可以把后缀去掉或者替换。
HTML结尾利于SEO百度是别人去适应它而不是它去适应别人!
HTML结尾的网页百度以前会认为是静态网页,不会变动,收录会比较好,而jsp很明显是动态网页,内容会随着用户不同而有所变动,对收录不友好。
以前一个朋友老是对我说可以静态化吗?可以静态化吗?说的就是这个问题。
java在互联网行业展现端使用是有缩降低的很多人都是纠结这个问题,我都烦了。请看下图:
你们认为万能的java就是在这一层被替换掉的,有人觉得替换成php很不可思议?真的吗?php的特点是什么,快快快!
java技术太重了,不适合需要快速反应的互联网行业展现端,单单是那一大堆的框架,比如spring,struts等等,就让我心烦,那么多的配置,那么多的技术,那么多的知识,在一个互联网公司中是不大适合的,因为进去的人都需要一段不短的适应时间。
现在越来越多的互联网公司在展现端采用了python、nodejs、php等技术,已达到快速应对市场的需要。
互联网企业的网站一般都对大众开放,能够看到的网址大部分是这些公司的,所以它们在前端减少使用java,自然也会导致jsp后缀的网页减少。
java在企业领域独占风骚不过对于财大气粗的传统企业领域,java还是独占鳌头,我很少看都有哪些企业应用抛弃java,为什么?
java要得起价钱,这么多年来利润那么多,不会有那个企业愿意放弃java技术。
可惜大部分不对大众开放。
上一次我看到的是移动的搞活动的网页,不过打开那个网页很不流畅。
随着时代的发展,现在的站点的功能交互越来越丰富和复杂,加载的数据也比以前多很多,为了提高网站的性能和用户体验,原有的技术比如JSP其本质还是一个Servlet,运行还得经过编译,故而在性能上没有HTML静态页面高(局部通过AJAX请求后端API),随着用户请求的增多,对服务器的压力会更大。如果你看到的页面非 jsp后缀结尾的页面,主要是因为他们可能进行了以下一项或者几项技术处理,有的我可能没有提及到,欢迎大家留言补充。
现在网站分工越来越精细化,一些成熟的产品开发团队,都采用前后端分类的技术,前端更专注界面的展现和用户的交互,后端专注业务的数据处理,这样不仅能做出性能好的产品,更有利于团队开发和管理,因此你会看到不带JSP结尾的页面,有可能是html后缀,有可能是不带后缀的,直接以斜杠结尾的,主要因为前端框架进行了路由处理。
虽然网站性能有所提升,但是对SEO并不是那么友好了,如果你们的产品对 SEO 有要求的话,建议选用服务端渲染技术。顺便附带一张比较系统的前后端分离的工作流程,方便你对前后端工作的理解:
对于数据不会经常变化的内容,比如新闻、专题、小说文章等,几乎没有交互内容(如果有浏览量、点赞数等局部动态数据可以做成AJAX数据请求),我们可能会通过后台技术批量生成静态页面,然后通过CDN技术,加快这些页面的访问速度,这样做的好处降低了服务器的压力。
比如国内比较成熟的CMS系统,都有这样静态化的功能,一是有利于搜索引擎收录,二是有利于减轻服务器压力。你也许会困惑,这么多页面是不是很占空间,但是对于今天技术的发展,这点存储真的不算什么,我们可以购买各种云的文件静态存储服务,价格还很便宜。
虽然前后端技术分离,但是通过框架做出来的单页面应用,对搜索引擎来说不太利于收录,因此类似Vue,React 这些框架都有了自己的服务端渲染技术,简称 ssr 技术(大部分需要搭建Node服务进行渲染),就是在服务端拼接好用户请求的静态页面,直接返回给客户端,客户端激活这些静态页面,让他们变成动态的,并且能够响应后续的数据变化。
这样做的好处除了对SEO友好外,还会带来更好的用户体验,更快的首屏渲染更快的内容到达时间(time-to-content),特别是对于缓慢的网络情况或运行缓慢的设备。无需等待所有的 JavaScript 都完成下载并执行,才显示服务器渲染的标记,所以你的用户将会更快速地看到完整渲染的页面。
前端框架可以ssr服务端渲,但对 Java,PHP, C#这些服务端语言天生具备,为了更让网站对搜索引擎更加友好,它们就利于各自的路由映射技术,把文件名后缀转换成html后缀、其它后缀或者没有后缀。国外大名鼎鼎的 CMS系统 Wordpress 就是应用了服务端的路由映射技术,你可以很方便的自定义自己想要文件路径。
在现在的JAVA项目开发中,因为在实际的应用开发中并不会单独使用jsp开发,而是结合其他的mvc框架,如SpringMVC,SpringBoot 、Struts2等来构建项目,通过其他方式来拦截处理请求,然后再对页面内容进行渲染。请求的拓展名可以自定义,比如struts2结尾一般是是.action和.do,有的直接无拓展名,甚至有些拓展名是html的页面实际上可能就是jsp页面渲染出来的;还比如PHP的 Laravel 框架,你只要设定好了路由路径、模板路径,就会很快的实现功能页面的服务端渲染。
因此你看到的界面,如果没有后缀,其实有可能还是动态页面,只是运用了服务端的路由映射而已。
关于问题的看法,我就分享到这里,由于经验水平有限,欢迎大家补充和指正哦,今天是中秋佳节,在这里祝大家中秋快乐。
提问的你,应该是一个很注意细节的人,作为一个不是行业内的你,能发现这个问题,一来可以说明你的年纪应该是30+以上,那么现在我来回答你的问题,这是一个涉及到,web开发的一个变革,在2005年的时候,谷歌公司出了一个技术叫ajax,核心技术是XMLhttprequest这个东西,你可能并不知道,但是百度一下,大概也会得到一些答案,这个东西可以让静态网页和服务器进行数据交互,在这个之前,我们在做开发的时候必须是在使用服务端脚本需要进行数据交互,使用数据页面的渲染重载,但是这个东西在当时出现了,国内还是延后了,只有当时的大公司在用,大概在2010年之后,国内中小型公司,加上各类人才的崛起,慢慢的开始使用!下面省略一万字加,因为靠打字实在是说不清楚,但是有一天得明确,看不到了绝不是技术落后,只是普通用户看不到了,但是在普通用户看不到的地方,这些技术,比如java一直处于开发语言排名的前三位,如果真的想要知道,这个地方的回答不能给你答案,你需要找一个真正专业的人来给你解答,至少是你的朋友或是你朋友的朋友,是这个行业内的人!
JSP已经是一种淘汰的技术,故而使用少,目前存在的JSP网站主要以老项目居多,银行,电信等行业,现在开发提倡前后端分离,JSP技术做不到前后端分离.
JSP淘汰的主要原因:
1.JSP
的页面既可以写Java代码,又可以写Java后端代码,这个听起来很高端,其实就是一个垃圾的设计,前端代码都已经够多的了,在往里面添加Java代码,看起来很难受,缺乏逻辑性,影响开发.2.JSP
的本质还是一个Servlet,运行还得经过编译为一个Servlet,故而在效率上比不过静态化的Html页面(直接Ajax等前后端异步交互处理),在资源消耗上JSP相比较Html页面消耗资源要多上许多.3.JSP
是一个动态页面,页面内容不可控,影响搜索引擎SEO优化,在网站排名上搜索引擎有限排Html今天太页面,其次排JSP(动态不可控,可能会出现色情,暴力等不适内容),流量和广告是网站生存的根本,故而大部分网站淘汰了JSP技术改用HTML静态页面.4.JSP
页面混乱,前端后端代码一起写很乱,不能进行前后端分离开发,不符合目前网站开发的主要趋势与潮流.提出这个问题的,和很多回答者都极不专业。不是网站以html结尾,而是网址或者说URL地址。
动态网站方便更新,一般以asp、php、jsp、aspx等为后缀名,绝大多数网站当然是动态的,但动态网站不利于搜索引擎收录,比较占用服务器资源,所以使用的是伪静态技术,就是更新网站后,自动生成html页面,浏览者看到的就是静态页面。
上述文字是手机一个一个亲自打出来的。
以前,jsp,asp,aspx等很流行,那是因为当时前端网页与后端代码混合开发。HTML只负责静态网页,其他的脚本负责实现动态网页。对于动态网页,写几行HTML,再插几句ASP、JSP代码,然后再写几行HTML,再写几行jsp,里面还打印几行HTML内容……很难阅读,也很难调试。写一个网页既要懂网页设计:字体、颜色、布局、动画,又要懂代码编程、数据库、业务逻辑。那时开发网站的,基本都是“全栈工程师”。
现在,有了各种前段框架(JQuery,Ajax,Angular,Vue,Bootstrap,React,……),前后端代码分开开发。前端使用HTML和js来完成各种复杂的动态效果,重新刷新和加载后端数据,而不需要向后端索要整个网页内容。前端负责html、css、js,主要是美编、设计、图片处理、js程序员进行开发。而后端只负责业务及数据处理,各种语言都能实现,以java、.net、php、python等语言为主。这些后端数据URL可以自己定义后缀名,只要后端增加一个路由解析就可以了。所以,呈现在浏览器上的URL基本都是HTML后缀的。但是,如果调试的话就会发现有很多内部数据交互的URL并不是HTML后缀的。
这是个好问题。
首先现代动态网站在真正访问网页前会经过DNS、负载均衡器(nginx、apache)才会真正到达后端的网页服务或api服务,nginx可以对url进行处理和分发,不管以什么结尾的url都可解析后进行转发,所以以html还是jsp结尾不重要。
其次,最好不要以jsp为结尾,因为这会暴露后端的技术栈,容易被人有针对性的进行攻击。
再次,已html为结尾可以留一个口子,方便对网站进行静态化优化,如秒杀或大促时需要对大流量网页进行优化,这时可以将网页托管到CDN进行加速。
最后,其实以html为结尾只是一个比较通用的方案,最好是直接以路径的方式暴露服务路径(如
),不加任何结尾,通过负载均衡器来进行分发,这样设计的扩展性更好,方便将网页和api进行统一处理,如接入网关服务、统一限流等。这个问题其实很好,其实,如果你弄明白了为啥,能帮助你更好的理解web。
谈为什么之前,我们先简单说一http工作的原理。当你在浏览器中输入网址的时候,实际上相当于输入了一条命令,格式如下。
协议://主机名[:端口] +参数
这个命令的意思是。用标注的协议所指定的方法,去链接主机的相应端口,参数是参数。
比如,当你输入http://www.google.com/ 的时候,实际是告诉浏览器用http的get 方法,去访问www.google.com主机的80端口,参数是"/", 也就是 get /
这个时候,在googl的服务器上,必须有一个程序来随时监听客户端发来的消息,然后给出相应的返回值。比如,当接受到get /时,应该返回什么。
所以,在以前还没有动态网站的时候,web服务程序(比如IIS)会把参数和指定目录(网站根目录)下的文件一一对应起来。比如 get / 会直接返回根目录下的index.php
同理,当你访问/hello.html的时候,实际上是把字符串"/hello.html"传送到了服务器web程序,web程序会根据提前设定的网站根目录去寻找hello.html文件,并把这个文件返回给客户端。
这样通过文件夹组织结构,就形成了静态网站。但是后来我们需要用程序语言来处理复杂的逻辑怎么办。最初的解决办法就是在html文件中插入特殊的标签,并且保存成相应的扩展名。
比如我在html中插入java语句,并保存成hello.jsp,放在网站根目录下。
这个时候,当你 get /hello.jsp的时候,tomcat程序会自动调用java来处理中间的语句,并且把整个.jsp转换成html,再返回到客户端。
这就是.jsp .php .asp这类网站的工作原理。
但是,你一定要明白一个事实,web服务程序返回相应的 .jsp .html .php文件,一定要这样做吗。
当然不是,我前面说了,返回文件实际上是人为定义去做的。作为一个程序,你可以return任何东西。
我可以任意设计程序,让程序返回任何我想要的东西。
比如,我可以让 get "/hello.html" 返回 字符串"hello world",而这个时候我的服务器上根本不存在hello.html这个文件。
基于这样的原因,我们实际上可以用程序任意设计url,这个就叫做路由。而告诉程序某一个路由返回什么的过程,就叫路由绑定。
现代的web程序构架,你是根本无法直接访问html文件的,而是必须把路由绑定到某一个视图上去。因为这样可以把原来嵌入到html的java代码分离出来,写到特定的类中去,而不用混写。这样逻辑更清醒,维护更方便。这样的就叫做mvc.
以著名的springMVC举例,我们看一个小程序。
@RequestMapping("/hello"),就是路由绑定,他代表 当你访问/hello 时,会执行hello方法,而hello方法的返回值是 字符串"hello",所以客户端会收到hello这个字符串。
不过,当你正确配置springMVC的时候,程序会自动在/WEB-INF/jsp/ 中寻找hello.jsp,然后返回。(注意,这得JSP和前面例子中的jsp有很大不同,详细请学习springMVC)。
这时你应该明白,如何返回完全是我自定义的。我完全可以修改程序@RequestMapping("/hello.jsp"),这样就像传统一样,通过/hello.jsp 来返回hello.jsp,我也可以@RequestMapping("/a.jsp"),当你方向/a.jsp时,返回hello.jsp,我甚至可以令/hello.html 返回hello.jsp .
所以,你现在应该明白为啥现在基本上看不到.jsp了吧。
第一 现代符合MVC构架的网站 ,网址中的/x/xxx.xxx 已经不代表真实目录和真实文件了。所以逻辑上没有必要出现.jsp 。
第二 现代MVC构架的网站,网址都是自己设计的,使用/hello.jsp 和使用 /hello是没有区别的,那为什么不用更短的。hello.jsp没有必要出现。
第三 /hello.jsp仅仅是传递的一个字符串参数,实际上我可以用任何程序来处理。比如我可以很容易用python写出 结尾是.jsp的网站。/hello.jsp可以完全是一个python网站。所以网址中的扩展名是没有必要存在的。你看到网站不是.jsp,但是他的后台可能仍然是java。
现代大多数网站,不管用什么语言,大多遵循了MVC的结构。所以,你基本上越来越看不到以n.jsp是啊