这个问题其实很好,其实,如果你弄明白了为啥,能帮助你更好的理解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是啊


以前,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后缀的。


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

页面混乱,前端后端代码一起写很乱,不能进行前后端分离开发,不符合目前网站开发的主要趋势与潮流.

关于这个问题,我谈谈自己的理解,如果有不对的地方,欢迎大家留言指正。

首先,你看到的结尾不一定是真的。

如果URL中是叫index.html就一定和jsp没有关系么?不一定的:

  • 首先,这个地址大家一定很常见到吧:"http://localhost:8080/index.jsp"。学名叫做URL,统一资源定位符。【资源】两个字圈起来,知识点,后面要考。

  • 我们实际的代码中,是有index.jsp这个文件的。但是,要注意(敲黑板),URL中的index.jsp是资源,代码中的index.jsp是文件,不是一个概念,两者不能划等号。

  • 大家应该对JSP都很了解了,JSP文件需要放到Servlet容器才能运行,servlet容器接到URL为「index.jsp」的请求时,容器会按照默认的方式去寻找「index.jsp」这个文件。这里的映射是可以自定义的,也就是说,我们修改了映射之后,可以做到让「index.html」去调用「index.jsp」文件,另外一方面,也有可能URL中带有JSP,实际上没有用到JSP。

不过话说回来,JSP用的却是少了。

  • 企业级的老项目,还是有用JSP的,毕竟页面中嵌入Java代码还是很方便的;不过随著业务的复杂,如果将业务逻辑写到JSP中是非常难维护的;

  • 后来慢慢流行MVC的架构,JSP成了其中的View;

  • 现在更多的企业开始使用分散式的架构,进行前后台的分离,前端页面完全是静态页面,通过介面调用后台服务获得数据,因此也减少了JSP的使用;

  • 而且对于互联网的网站,静态页面更有利于SEO,更容易被搜索引擎收录。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


这是个好问题。

首先现代动态网站在真正访问网页前会经过DNS、负载均衡器(nginx、apache)才会真正到达后端的网页服务或api服务,nginx可以对url进行处理和分发,不管以什么结尾的url都可解析后进行转发,所以以html还是jsp结尾不重要。

其次,最好不要以jsp为结尾,因为这会暴露后端的技术栈,容易被人有针对性的进行攻击。

再次,已html为结尾可以留一个口子,方便对网站进行静态化优化,如秒杀或大促时需要对大流量网页进行优化,这时可以将网页托管到CDN进行加速。

最后,其实以html为结尾只是一个比较通用的方案,最好是直接以路径的方式暴露服务路径(如

https://www.xxx.com/path/page

),不加任何结尾,通过负载均衡器来进行分发,这样设计的扩展性更好,方便将网页和api进行统一处理,如接入网关服务、统一限流等。

可以看到,现在有很多种类似于JSP的Html页面,JSP是JAVAEE规范中的Servlet模板引擎!最终是解释为Html文本,通过response输出到浏览器!

如今Web开发的趋势是前后端分离,模块化开发,动静分离!因此很多非Servlet模板引擎出现了,诸如freemark,thymeleaf等等!还有类似于向vue这样渐进式前端框架!这些都属于解释型的模板引擎,JSP之所以用的少了,是因为它不利于前后端分离,去Servlet化又是J2EE的一个趋势,即使性能再高不利于团队开发,最终要被舍弃!

所有的JAVA Web端的开发模板最终都是解释为Html作为页面显示的!


主要是两个原因,第一个原因是静态化,就是本来jsp也好,php也好页面都是动态显示的,对seo不太友好,同时也为了降低伺服器的压力,对网页内容进行了静态化操作,所以页面结尾是html,例如:http://www.a.com/a.html,第二个原因是伪静态,对于一些不方便静态化的东西同时还要对seo友好,就要伪装一下url,也就是伪静态,就是利用php或者jsp程序输出一个对搜索引擎比较友好的url例如:

http://www.a.com/a/a.html

http://www.a.com/a/a

。这样可以最大限度的对搜索引擎友好,同时隐藏程序语言增加安全。


了解几个关键词:静态网页,动态网页,伪静态网页;

不管如何用户在浏览器中打开就是网页,大家在浏览器中输入的网址叫URL;

静态网页就是URL直接指定你要看的HTML网页且这个网页存在于伺服器;

动态网页属于后台语言编写网页但是它们的后缀名是.jsp,.php,.asp,.do等你也可以通过URL直接看,动态语音写网页好处就是使用一个模板处理不同逻辑,弊端是对于web伺服器就不一定安全了;

伪静态:动态伪装成静态的样子只是改变了URL的样子;

现在的技术栈推崇的的前后端分离,前端就是前端语音开发,后端就是后端语音开发,前端动态数据通过api(如:restful api)非同步请求获取;

欢迎大家批评指正 :)


提出这个问题的,和很多回答者都极不专业。不是网站以html结尾,而是网址或者说URL地址。

动态网站方便更新,一般以asp、php、jsp、aspx等为后缀名,绝大多数网站当然是动态的,但动态网站不利于搜索引擎收录,比较占用伺服器资源,所以使用的是伪静态技术,就是更新网站后,自动生成html页面,浏览者看到的就是静态页面。

上述文字是手机一个一个亲自打出来的。


谢谢邀请,大多数网站还是静态网站为主,JSP主要是动态网站,从应用范围上来说还是静态网站多,而且现在php或者Python在动态页面上的展示上也有自己独特的优势,特别是针对中小网站,jsp主要前期积累多,而且在数据分布上占有独特优势,所以也不能说JAVA web不行了。

希望能帮到你。


推荐阅读:
相关文章