这个问题其实很好,其实,如果你弄明白了为啥,能帮助你更好的理解web。
谈为什么之前,我们先简单说一http工作的原理。当你在浏览器中输入网址的时候,实际上相当于输入了一条命令,格式如下。
协议://主机名[:端口] +参数
这个命令的意思是。用标注的协议所指定的方法,去链接主机的相应端口,参数是参数。
比如,当你输入 /
这个时候,在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是啊
大概会有这些步骤 1、注册域名,100元左右1年, 2、购买空间,虚拟主机,要求不高的话,500元左右一年, 3、购买CMS程序,如果是非商业用途,可以不用购买。 4、设计网页模板,如果不自己...
首先回答第一个问题,直接通过ip是可以访问网站的,这个在购买时候进行可以提前咨询客服,问清楚后购买。 以个人的经验,如果你买的是虚拟主机,一般需要另外在购买一个独立ip,因为虚拟主机默认的是共享ip(...
段落对不齐的原因应该是前后的段落是不同的格式的,在这种情况下,要在想要的段落样式那里选择格式刷,直接把格式刷给其他段落就可以了,这样应该就可以对齐了。还有的时候,文字不能完全对齐,可以选择相应段落,将...
谢谢邀请。樱桃番茄对于这个问题没有办法专业回答,因为自己不是属于这个领域的。这边在网上找了一些资料大家可以参考一下~ PPT的制作,你有没有这样的经历,内容和逻辑都没有问题,但是设计出来的PPT总是感...
1、手机连接WIFI后,点击“设置”按钮,进入“设置”界面。 2、进入“设置”界面后,点击“WI-FI”菜单,进入“WI-FI”设置界面。 3、进入“WI-FI”设置界面后,点击已连上WI...
首先要对于我们自媒体来说,侵权的范围一般来说就是三类:视频类,图片类,字体配乐类。独角shou就因为字体侵权被索赔十几万,损失惨重。不过知名度不高的账号的话,一般不会收到音乐字体类的侵权律师函,但是我...
脑回路清奇的我下意识想到的是ProcessOn: 这是个在线作图的工具,集合了目前工作中最常见的作图产品,包括流程图、思维导图、原型图、网络拓扑图、UML图等,页面很是小清新,放几张图让大家瞅瞅 支...
根据我所知道的回答一下这个问题。 百度的服务器肯定在百度的IDC机房,互联网公司(腾讯、百度、阿里巴巴)刚开始的时候使用的可能是运营商或者第三方的IDC机房存放自己的服务器、存储设备。但是,随着公司规...
没有必要出现。第三 /hello.jsp仅仅是传递的一个字符串参数,实际上我可以用任何程序来处理。比如我可以很容易用python写出 结尾是.jsp的网站。/hello.jsp可以完全是一个python网站。所以网址中的扩展名是没有必要存在的。你看到网站不是.jsp,
xxx 已经不代表真实目录和真实文件了。所以逻辑上没有必要出现.jsp 。第二 现代MVC构架的网站,网址都是自己设计的,使用/hello.jsp 和使用 /hello是没有区别的,那为什么不用更短的。hello.
访问/hello 时,会执行hello方法,而hello方法的返回值是 字符串"hello",所以客户端会收到hello这个字符串。不过,当你正确配置springMVC的时候,程序会自动在/WEB-INF/jsp/ 中寻找hello.jsp,然后返回。(注意,这得JSP和前