App下載

為什么要學(xué)JSP?學(xué)JSP有用嗎?

猿友 2021-06-17 16:56:14 瀏覽數(shù) (4234)
反饋

首先先介紹一下JSP是什么,JSP全稱(chēng)java server pages(java服務(wù)器頁(yè)面)。它是一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn),說(shuō)簡(jiǎn)單點(diǎn)就是服務(wù)器用來(lái)動(dòng)態(tài)生成HTML頁(yè)面的。聽(tīng)著是不是很熟悉?沒(méi)錯(cuò),還有另一門(mén)語(yǔ)言專(zhuān)門(mén)從事動(dòng)態(tài)生成HTML頁(yè)面,這門(mén)語(yǔ)言叫PHP。

沒(méi)有JSP的時(shí)代

在SUN公司剛開(kāi)始做java web方面的設(shè)計(jì)的時(shí)候,他們?cè)O(shè)計(jì)了servlet來(lái)作為服務(wù)器應(yīng)用處理請(qǐng)求和響應(yīng),通過(guò)動(dòng)態(tài)輸出HTML代碼的方式來(lái)向用戶(hù)范圍HTML頁(yè)面,如下圖所示:

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");
        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>W3Cschool618有課程優(yōu)惠啦快來(lái)看看吧</h1>");
        out.println("</body></html>");
    }

但是這種方法并不合理。首先,做過(guò)前端開(kāi)發(fā)的小伙伴都知道,一個(gè)前端頁(yè)面動(dòng)輒幾百行代碼,如果像上圖一樣進(jìn)行輸出,后端程序員就得一直復(fù)制黏貼這些前端代碼,一個(gè)?doGet()? 方法里面將會(huì)有很多這樣的代碼,影響代碼的整潔,容易擾亂程序員的邏輯,而且有些符號(hào)會(huì)被java編譯器錯(cuò)誤識(shí)別,這樣的錯(cuò)誤需要花費(fèi)時(shí)間去調(diào)教(比如HTML文本中有雙引號(hào)會(huì)導(dǎo)致字符串輸出提前結(jié)束,后面的代碼編譯器編譯不了,會(huì)拋出一堆錯(cuò)誤)。這種在java代碼里寫(xiě)html代碼的方式飽受程序員詬病,恰逢P(guān)HP和ASP.Net的出現(xiàn),他們使用更簡(jiǎn)單的方式來(lái)輸出HTML代碼(在HTML代碼中嵌入響應(yīng)語(yǔ)言來(lái)引入動(dòng)態(tài)數(shù)據(jù)),很多程序員因此轉(zhuǎn)而使用這兩種語(yǔ)言,java也因此流失了一部分程序員。

JSP誕生

SUN公司在看到了PHP等語(yǔ)言的成功經(jīng)歷后也搞了一個(gè)類(lèi)似的技術(shù),就是接下來(lái)要介紹的JSP。JSP的設(shè)計(jì)理念與servlet截然相反,servlet是在java代碼中輸出HTML頁(yè)面,而JSP則是在HTML代碼中嵌入java代碼。使用JSP之后web開(kāi)發(fā)者就不用將HTML頁(yè)面復(fù)制到servlet了,這樣既減少了servlet的代碼量,使代碼更加簡(jiǎn)潔易懂,而且也不用擔(dān)心html中的符號(hào)被Java編譯器錯(cuò)誤識(shí)別了(下方代碼應(yīng)為?.jsp?后綴)。

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1>  <% out.println("Hello World!");%>
</h1>
<br/>
<h2>學(xué)習(xí)jsp,就到j(luò)ava編程獅</h2>
</body>
</html>

相比于PHP而言,JSP可謂是背靠java這種大山,因?yàn)镴SP在編譯時(shí)會(huì)被編譯成servlet,所以本質(zhì)上它也是servlet,是解決了servlet的HTML輸出的servlet。因?yàn)槭莝ervlet,所以在性能上比PHP這種動(dòng)態(tài)類(lèi)型語(yǔ)言更加優(yōu)秀,也具有更高的易用性。

JSP的衰落

隨著Ajax的提出,使用Ajax來(lái)進(jìn)行靜態(tài)頁(yè)面的動(dòng)態(tài)數(shù)據(jù)渲染逐漸成為主流。因?yàn)椴还苁荘HP還是servlet,他們生成頁(yè)面的速度永遠(yuǎn)沒(méi)有靜態(tài)的Apache服務(wù)器派發(fā)靜態(tài)頁(yè)面的速度快,而一個(gè)頁(yè)面往往需要渲染的數(shù)據(jù)只有一小部分,這時(shí)候聰明的開(kāi)發(fā)者提出了一種新想法:先讓Apache服務(wù)器派發(fā)一個(gè)靜態(tài)的頁(yè)面,然后這個(gè)靜態(tài)頁(yè)面通過(guò)Ajax請(qǐng)求向服務(wù)器獲取這部分需要渲染的數(shù)據(jù),然后在瀏覽器進(jìn)行渲染。以往服務(wù)器要生成一整個(gè)HTML頁(yè)面,現(xiàn)在只需要生成這部分?jǐn)?shù)據(jù)并以指定格式返回即可,大大減小了服務(wù)器的壓力。然后很多小伙伴們會(huì)發(fā)現(xiàn),返回指定格式的數(shù)據(jù)用servlet就能輕易做到,而HTML靜態(tài)頁(yè)面直接用html文件存放在靜態(tài)的Apache服務(wù)器上,JSP需要做的工作,沒(méi)有了。沒(méi)錯(cuò),這種操作促進(jìn)了前后端的分離,也導(dǎo)致了JSP的衰落。

小結(jié)

所以呢,學(xué)JSP有用嗎?在沒(méi)有前后端分離的年代里,學(xué)JSP可以降低你的代碼量,讓你的項(xiàng)目有更好的結(jié)構(gòu),但是現(xiàn)在JSP已經(jīng)被淘汰了,所以可以不學(xué)JSP,不過(guò)作為后端的一種技術(shù),了解一下JSP也是有好處的。

點(diǎn)擊這里前往JSP學(xué)習(xí)手冊(cè)


0 人點(diǎn)贊