關於JSP的思考

對jsp技術的思考:

今天開始做.net系統到java平臺的重寫,發現了寫jsp頁面挺煩的和aspx一樣煩,回來了一晚上就在考慮這個問題。

jsp到底還有沒有需要?jsp過時了嗎?


jsp是頁面展示層的一種技術,jsp也是一個servlet,jsp頁面的所有內容均會變成servlet中的內容被response一句一句的輸出給客戶端。以前是要在jsp中直接書寫邏輯,所以用到了jsp腳本等java代碼,後來覺得不好看,所以改進了,使用el和jstl標籤來控制邏輯,來看這樣一段jsp的代碼:

<html …> <body>
 <div style="padding-top: 50px;">
   <jsp:include page="../menu.jspx"/>
   <c:choose>
     <c:when test="${empty users}">
       Table is empty.
     </c:when>
     <c:otherwise>
      <table>
       <thead>
         <tr>
          <th> First Name </th>
          <th> Last name </th>
         </tr>
        </thead>
        <tbody>
        <c:forEach var="user" items="${users}">
        <tr>
          <td> <c:out value="${user.firstName}"/> </td>
          <td> <c:out value="${user.lastName}"/> </td>
        </tr>
        </c:forEach>
       </tbody>
     </table>
    </c:otherwise>
   </c:choose>
   <jsp:include page="../footer.jspx"/>
  </div>
 </body>
</html>


你覺得這其中的標籤比jsp腳本好多少嗎?反正我是不覺得的,把jsp腳本換成el和jstl標籤時說好處是:前端看不懂jsp腳本,所以換了,我在想:難道這樣的標籤比jsp腳本好多少嗎?這樣就更容易理解了嗎?反正我沒覺得,反而覺得後臺得多學這些東西,明明是可以用其他技術代替的東西。當然,可能是我現在層次不夠,不能理解其中的美。
網上看到的觀點:可以使用 XML+AJAX 代替 服務器數據解析後的結果 發送到客戶端 讓客戶端完成對XML數據的描述,從而對數據和視圖更加好的分離,在開發的時候 前端開發人員和後臺開發人員約定好XML報文格式,就可以同步的開發網站,後期維護網站也比較清晰,只需要修改其中一個點即可,而且 頁面顯示的樣式可以多樣化.即前臺和後臺分離完全。
其實我也覺得挺不錯的,頁面完全和後臺程序分離,這樣不僅可以同時開發,而且後臺就不用再寫jsp了,他們不用再關注頁面怎麼展示,數據怎麼填充,他們所需做的就是將發送數據的接口寫好。這樣前端雖然多了點工作量,但是他們本來不就是要寫js的嗎,再多寫點將數據也展示出來有多大問題呢?關鍵是這樣效率的提高,整體工作效率的提高而不在乎前端後端個別方面的得失。而且這樣職責更清晰了,出問題了可以更快定位到負責人。而且後臺開發這樣的一個接口就夠了,對於不同的客戶端:android、ios……都可以使用這同一個接口,而不用再單獨考慮,這是效率的另一個方面。這是將前臺和後臺完全徹底的分離了,也符合MVC的設計模式:就是分離隔層,減少耦合。這樣所有的人都有個統一的認識:後臺提供數據,前臺展示數據。就算到時候後臺也要做前臺的工作,那讓他再去學點簡單的前端技術就行了,而不是目前的認識混亂,這就是以共識創造效率。
這樣的前臺和後臺完全分離之後,jsp就無所謂了,無所謂jsp、asp、php,,他們都是指一種視圖的表現形式,後臺的接口都是統一的。
再來回顧jsp的發展史,以前是用servlet技術直接在代碼中輸出html,那樣實在太難受了,所以要想辦法改一下,結果只是把servlet改了一下編寫方式,就成了jsp,實質上還是一個servlet(jsp會被相應的引擎翻譯成servlet),只是把以前的在代碼中寫html變成了在html中寫java代碼。在一個jsp中完成從數據庫提取數據 再展現它。 不可避免會造成代碼邏層次混亂,所以出現了struct 等mvc框架,爲了抽象數據層出現了ORM框架,來完成對應用程序的分層,而如果使用jsp完成對bean的展現就會在html 中夾雜 java代碼 對後期維護和調試代碼都是不方便的。既然想到了Struts、orm等框架,那麼爲什麼不再徹底一點呢?爲什麼不將數據與html完全分離開呢?用xml/json代替bean到jsp展現數據,而直接使用xml發送到客戶機,依靠客戶機強大的js庫完成展現,或者客戶機沒有js庫也沒關係(手機端或者其他終端),只要事先定義好統一的數據格式,不管是xml還是json還是以後會出現的新格式,用其他的技術也是可以讀取我從後臺發送過來的數據啊。 這樣子 一張html頁面就是純粹的 js+html+css 頁面,這應該對頁面設計人員有很多便利的地方。
說到手機,又得考慮其他問題:數據傳輸量vs本地數據處理量。前者決定了流量費和傳輸速度(體驗),後者決定了電池壽命。這個就不多說了,也是可以深入考慮的。
反駁觀點:但是以雲計算的思維來說,所有的數據應該是在雲上計算完成後直接發送給客戶端的,而不需要客戶端很強的計算能力,將來所有的客戶機都不需要安裝軟件,只要一個帶瀏覽器的操作系統就可以了,從瀏覽器中與服務器連接,讓server完成所有的事情後發送給Client結果就行了。這樣就與我所考慮的衝突了!怎麼辦,關鍵是現在的客戶機確實是越做越強大了啊,雖然瀏覽器也越來越強大,但是其他軟件的裝機量也在同步上升啊。而且用戶也沒考慮到這樣的情景:讓雲取代所有的本機功能。因爲大家都覺得不靠譜:一個是不安全、二是以目前的網速發展就算再有N多年也不可能達到理想的雲計算服務功能,況且還得考慮我國國情在裏面。到時候又是國家安全、國企與人民撕逼的時候呢。所以這樣看來我的思路還是沒錯的,讓閒置的客戶端處理數據以節約資源。
反駁觀點:到時候客戶機就成了富客戶端,隨之而來的弊端就是客戶端需要有更多的類庫來支持。這個我不說話……
再反駁:技術無所謂過時不過時,根據實際項目需求進行技術構架,合適就可以,例如政府項目的特點就是瀏覽器都是ie6,你非要搞extjs那我就不說到時候會怎麼樣了。
客戶唯一關心的是,東西能不能做出來,對技術選型興趣不大,如果大家都用JSP,那麼客戶就會選JSP
所以jsp技術沒有過時,這樣明確給出結果了:沒有過時!
一切都得按照實際的需求來做,按照客戶的要求來做。所以如果遇到客戶機不允許的情況就得老老實實按着規矩來。
我的這個想法應該是完全可行的,如果自己做,並且也有前端配合的話就可以這個弄了,沒有也沒關係,瞭解點簡單的原理和技術就可以自己寫了,大概當時jsp中數據和展示沒有完全分離也是因爲當時並沒與專業的前端吧,而且也怕前端翹了就沒人做了,還是爲了節約成本——後臺一個人就可以做前後臺所有的事?
我就準備在我的項目中這樣幹了,雖然不完全是這樣做,但是可以一點點的來,然後儘量多的替換掉所有的jsp頁面,那樣我的前端水平是不是也提高了呢~


想到後來,不只是jsp,其他類似的表現層技術如asp不也是這樣的嗎


看一篇相關的文章:http://spring.io/blog/2012/10/30/spring-mvc-from-jsp-and-tiles-to-thymeleaf/


再看一篇十六年前(2000年)的文章:http://www.ibm.com/developerworks/cn/java/w-friend/


才發現別人早就已經想到了並做了深入的思考呀


有人說要:看淘寶UED的系列文章,看完後可以瞭解avalon,vue。誰有這方面的資料發給我瞧瞧唄~


再貼一個面試題:


JSP技術主要缺點和優點有哪些?
缺點:
1. JSP技術極大的增加了產品的複雜性.爲了獲得 系統的跨平臺功能和產品伸縮能力,java系統開發了多種產品,如,JRE,JDK,J2EE,EJB,JSWDK,JavaBeans ,只有有效地將它們組合在一起,才能產生強大的功能.(部署有難度)
2. java的高效率運行需要佔用大量的內存和硬盤空間. 一方面,java的高速運行是通過 .class文件常駐內存來實現的.另一方面,還需要硬盤空間來存儲一系列的.java 文件和.class文件以及對應的版本文件.(硬件要求高)
3. JSP程序調試困難.
JSP頁面執行時, 首先被轉換爲 .java文件(Servlet), 然後將.java文件編譯爲字節碼文件. 這樣,出錯信息實際上指向的是轉換後的那個.java文件(Servlet), 而不是JSP本身. (調試有難度)
優點:
1.JSP代碼跨平臺, 即一次編寫,處處運行
衆所周知,由於微軟的壟斷性,它的產品可移植性做得十分差,ASP也不例外,
2.JSP組件跨平臺
JSP組件(企業JavaBeans,JavaBeans或定製的JSP標籤)都是跨平臺可重用的.企業JavaBeans組件可以訪問傳統的數據庫,並能以分佈式系統模式工作於Solaris,Linux,UNIX和Windows平臺.
3.支持多種網頁格式
目前, JSP技術支持的網頁格式還沒有一個明確的標準.一般來說,JSP技術既可以支持HTML/DHTML的傳統瀏覽器文件格式,又可以支持應用於無線通信設備如移動電話,PDA等設備進行網頁預覽的WML文件格式,還可以支持其他一些B2B電子商務網站應用的XML格式.
4.JSP標籤可擴充性
儘管ASP和JSP都使用標籤與腳本技術來製作動態Web網頁,JSP技術允許開發者擴展JSP標籤,定製JSP標籤庫,所以網頁製作者充分利用與XML兼容的標籤技術強大的功能,大大減少對腳本語言的依賴.由於定製標籤技術,使網頁製作者降低了製作網頁的複雜度.
5.健壯性與安全性
由於JSP頁面使用的腳本語言是java語言, 因此,它就具有java技術的所有好處, 包括健壯的存儲管理和安全性.


來自IT公司面試手冊


剛纔隨手用記事本寫的,直接貼上來了,格式有點難看。



--------------------------<hr>---------------------------------


update:2016-7-18

最近做新項目,提供服務使用的都是restful結構的接口,然後今天查了下REST,這不就是之前我所考慮的分離嗎?但是比我所想的東西多多了~

copy一段:


首先爲什麼要用RESTful結構呢?
大家都知道"古代"網頁都是前端後端融在一起的,比如之前的PHP,JSP等。在之前的桌面時代問題不大,但是近年來移動互聯網的發展,各種類型的Client層出不窮,RESTful可以通過一套統一的接口爲 Web,iOS和Android提供服務。另外對於廣大平臺來說,比如Facebook platform,微博開放平臺,微信公共平臺等,它們不需要有顯式的前端,只需要一套提供服務的接口,於是RESTful更是它們最好的選擇。在RESTful架構下:




作者:覃超
鏈接:https://www.zhihu.com/question/27785028/answer/48096396
來源:知乎
著作權歸作者所有,轉載請聯繫作者獲得授權。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章