天天看點

java怎麼将圖檔檔案轉流并在jsp前端顯示_曾經風光無限的jsp技術,為什麼現在很少有人用了呢?

jsp技術作為曾經一度火爆的技術,在最近幾年确實使用率越來越低了,這篇文章帶你一塊探究一下jsp的從生到死。

一、jsp技術的誕生

在很久很久以前,那時候我們的開發都是通過servlet來完成的,這個servlet是什麼呢?我們先來認識一下:

servlet用Java語言編寫的伺服器端程式。主要功能是和浏覽器進行互動,生成頁面展示。
java怎麼将圖檔檔案轉流并在jsp前端顯示_曾經風光無限的jsp技術,為什麼現在很少有人用了呢?

長下面這個樣子:

public class HelloWorld extends HttpServlet {  
        public void doGet(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException {  
            response.setContentType("text/html");  
            PrintWriter out = response.getWriter();  
            out.println("<html>");  
            out.println("<head>");  
            out.println("<title>Hello World</title>");  
            out.println("</head>");  
            out.println("<body>");  
            out.println("<h1>Hello World!</h1>");  
            out.println("</body>");  
            out.println("</html>");  
        } 
    }  
           

我們可以看到前端所展示的頁面,需要我們servlet去一個标簽一個标簽去生成,如果一個頁面超級複雜,動不動幾千行代碼,那這個servlet效率也就太低了。而且整個servlet代碼也會十分臃腫而且可讀性非常差。

這時候怎麼辦呢?sun公司很早就意識到了這個問題,于是便倡導很多公司一塊來建立了一種能夠動态生成html的新技術,不久之後jsp便誕生了。有效率的解決了上面servlet所出現的問題。

java怎麼将圖檔檔案轉流并在jsp前端顯示_曾經風光無限的jsp技術,為什麼現在很少有人用了呢?
二、jsp的發展

既然jsp技術能夠解決剛剛servlet代碼裡面所出現的技術,我們來看一下是如何解決的:在這裡我們舉一個小例子,就是前端jsp向伺服器servlet發送請求圖書頁面的功能。

首先我們看一下servlet:

public class List_book extends HttpServlet {          
     public void doGet(HttpServletRequest request, HttpServletResponse response)  
             throws ServletException, IOException {  
        //聲明一個ArrayList.用來存放Book類中的資料  
         ArrayList<Book> list = new ArrayList<Book>(); 
         for(int i=0;i<10;i++){
                      Book book = new Book();  
         book.setName(res.getString("name"+i));  
         book.setAuthor(res.getString("author"+i));  
         list.add(book);  
         }
         //将list資料發送到.jap檔案中  
         request.getRequestDispatcher("ListBook.jsp").forward(request, response);  
     }  
}  
           

我們會發現,現在的servlet沒有一點html代碼了。我們隻需要把資料交給jsp。此時我們的頁面展示就交給jsp來做了。現在我們來看一下jsp長什麼樣子:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  
    <head>   
         <meta http-equiv="pragma" content="no-cache">  
         <meta http-equiv="description" content="This is my page">  
        <script></script> 
    </head>  
     <body>       
         <% ArrayList list = (ArrayList) request.getAttribute("list");  %>      
         <h2 align = "center">圖書清單</h2>  
         <table border = 1px align = "center">      
             <tr><th>圖書名稱</th><th>圖書作者</th></tr>    
            <!-- 繼續使用jsp語句 循環放入存放于list中的Book實體類中的資料 -->     
            <%              
             for(int i = 0;i<list.size();i++){      
                 Book book =(Book) 
                list.get(i);%>          
                <tr><th><%=book.getName() %></th><th><%=book.getAuthor()%></th><tr> 
             }
            %>  
         </table>  
    </body>
 </html>
           

這就是jsp,我們可以在html頁面中寫一些java代碼。對于我們程式員來說,在開發當中靜态的頁面我們隻需要用html和css寫一些标簽來展示即可,對于那些動态的部分我們就可以使用java代碼。

那麼jsp和servlet是不是就是這種協作的關系,本質上有什麼差別呢?

其實jsp隻是servlet的一種特殊形式,每一個jsp頁面就是一個servlet執行個體,通俗一點的話來說:jsp就是servlet,隻不過servlet把一些業務功能剝離開來交給了或者是形成了jsp。明白了吧。在我們的項目編譯的時候就是把jsp編譯成了servlet。

你們會發現,這樣做其實挺好的,市場也驗證了一切,很快jsp技術流行開來,可是随着時間的流逝,業務越來越複雜,jsp也開始跟不上時代了。

三、jsp的危機

我們先看一個對話場景:

java程式員:終于寫完了功能,是時候在界面上展示了。

前端程式員:你功能寫完了,我沒有資料,在頁面什麼沒法展示呀

java程式員:資料我寫好了,你在jsp中調用XX方法就能擷取了,

前端程式員:我已經在jsp中寫好了這個方法,你為什麼自己寫了?

于是乎,無窮無盡的争吵還在繼續當中。

java怎麼将圖檔檔案轉流并在jsp前端顯示_曾經風光無限的jsp技術,為什麼現在很少有人用了呢?

這就是jsp的弊端,為什麼呢?我們可以來總結一下:

(1)動态和靜态資源放在一起,一旦伺服器出現狀況,前背景一起玩完,使用者體驗極差。

(2)一旦jsp出現了問題,就需要前端後端發開人員一塊來分析解決,效率低。

(3)jsp無法使用nginx等。

(4)jsp頁面複雜,難以修改。

(5)第一次加載jsp需要編譯成servlet,時間久,而且業務量大的時候,jsp負擔太大。

(6)jsp對于開發人員簡直就是一個揮之不去的痛,太難了!!!

鑒于以上缺點,于是另外一套機制橫空出世了,這就是

前後端分離

。什麼是前後端分離呢?

前後端分離其實就是後端工程師隻關注于後端頁面的開發,不再處理前端問題。前端工程師隻關注于自己的頁面開發。需要資料互動的時候,兩者會有一份接口文檔。

就這樣這種思想架構很快的流行開來,這也就是為什麼jsp落寞的真正原因。從此java從jsp轉向了restful結構,springMCV也開始流行開來,并逐漸占領了市場。前後端分離有什麼優點呢?我們來總結一下:

(1)動态和靜态資源分開存儲。

(2)出現bug能很快定位是前端還是後端。

(3)支援nginx。在高并發狀态下極其優秀。

(4)直接請求頁面,不用編譯,速度效率都提上來了。

(5)從此前端和後端是相親相愛的一家人了!!!!

java怎麼将圖檔檔案轉流并在jsp前端顯示_曾經風光無限的jsp技術,為什麼現在很少有人用了呢?
四、jsp的落幕

又随着時間的推移,jsp的時代基本上一去不複返了,因為我們又走入了移動互聯時代,這時候的用戶端可不是前端頁面了,還包括手機、汽車、電視等等各種裝置,這種情況下,前後端必須要分離了。jsp基本上徹底告别了它的舞台。

java怎麼将圖檔檔案轉流并在jsp前端顯示_曾經風光無限的jsp技術,為什麼現在很少有人用了呢?

技術總是在不斷地發展和完善,隻有技術的革新才會帶來社會的進步。

java怎麼将圖檔檔案轉流并在jsp前端顯示_曾經風光無限的jsp技術,為什麼現在很少有人用了呢?

繼續閱讀