為什麼現在大多數網站是html結尾,很少見以jsp結尾?
這個問題其實很好,其實,如果你弄明白了為啥,能幫助你更好的理解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,更容易被搜索引擎收錄。
這是個好問題。
首先現代動態網站在真正訪問網頁前會經過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不行了。
希望能幫到你。
推薦閱讀:
※jsp+servlet+mysql實現的在線鮮花商城源碼附帶視頻指導運行教程
※jsp之用戶管理系統5
※手把手教你做一個Jsp學生信息、選課、簽到考勤、成績管理系統