選單

經典技術回顧和借鑑-JSP程式設計

前言:在CGI(通用閘道器介面)程式設計風行的日子,人們紛紛尋思簡化並讓其更加靈活的新方法和新技術,包括PHP、JSP、ASP。1997年SUN公司推出了servlet,1999年初,SUN公司推出了JSP,實際上在servlet基礎上修改而成。JSP即Java伺服器頁面(Java Server Page),將HTML和JAVA程式碼使用某種方式結合起來,完成前後端的有效互動。本文透過JSP歷史回顧和應用總結來審視過去和開拓未來。

1。從例項專案入手

其實,從現在看來JSP依然極具魅力,據瞭解很多JSP老專案還在維護。下面使用STS作為IDE構建一個例項專案,先體驗其效果。

1。1 動態web專案模板

如下圖,使用new dynamic web project建立專案:

經典技術回顧和借鑑-JSP程式設計

1。2修改檔案編碼

進入preferences修改JSP檔案的編碼:

經典技術回顧和借鑑-JSP程式設計

1。3 編寫簡單的JSP檔案

新增一個JSP檔案到WebContent目錄,如下

經典技術回顧和借鑑-JSP程式設計

然後檢查並修改編碼,應該都是UTF-8,如下圖:

經典技術回顧和借鑑-JSP程式設計

如果不是,就修改。

1。4執行和測試

選中專案名稱,點郵件選單的Run as 。。。——>Run on server

經典技術回顧和借鑑-JSP程式設計

之後出現如下介面:

經典技術回顧和借鑑-JSP程式設計

若沒有現存的tomcat server,就自己加一個。點Finish。然後自動呼叫chrome,介面如下:

經典技術回顧和借鑑-JSP程式設計

自動呼叫瀏覽器設定的地方是windows——>Web browser選單:

經典技術回顧和借鑑-JSP程式設計

1。5增加功能:顯示IP地址

(1)顯示ip地址:getRemoteAddr

經典技術回顧和借鑑-JSP程式設計

(2)變數宣告<%! %>

經典技術回顧和借鑑-JSP程式設計

(3)表示式<%=%>

經典技術回顧和借鑑-JSP程式設計

2。JSP語言介紹

2。1語法

語法

描述

<%—— 註釋 ——%>

JSP註釋,註釋內容不會被髮送至瀏覽器甚至不會被編譯

<!—— 註釋 ——>

HTML註釋,透過瀏覽器檢視網頁原始碼時可以看見註釋內容

<\%

代表靜態 <%常量

%\>

代表靜態 %> 常量

\‘

在屬性中使用的單引號

\“

在屬性中使用的雙引號

2。2指令

指令

描述

<%@ page 。。。 %>

定義頁面的依賴屬性,比如指令碼語言、error頁面、快取需求等等

<%@ include 。。。 %>

包含其他檔案

<%@ taglib 。。。 %>

引入標籤庫的定義,可以是自定義標籤

2。3Page指令屬性

屬性

描述

buffer

指定out物件使用緩衝區的大小

autoFlush

控制out物件的 快取區

contentType

指定當前JSP頁面的MIME型別和字元編碼

errorPage

指定當JSP頁面發生異常時需要轉向的錯誤處理頁面

isErrorPage

指定當前頁面是否可以作為另一個JSP頁面的錯誤處理頁面

extends

指定servlet從哪一個類繼承

import

匯入要使用的Java類

info

定義JSP頁面的描述資訊

isThreadSafe

指定對JSP頁面的訪問是否為執行緒安全

language

定義JSP頁面所用的指令碼語言,預設是Java

session

指定JSP頁面是否使用session

isELIgnored

指定是否執行EL表示式

isScriptingEnabled

確定指令碼元素能否被使用

2。4行為標籤

行為標籤語法:

語法

描述

jsp:include

用於在當前頁面中包含靜態或動態資源

jsp:useBean

尋找和初始化一個JavaBean元件

jsp:setProperty

設定 JavaBean元件的值

jsp:getProperty

將 JavaBean元件的值插入到 output中

jsp:forward

從一個JSP檔案向另一個檔案傳遞一個包含使用者請求的request物件

jsp:plugin

用於在生成的HTML頁面中包含Applet和JavaBean物件

jsp:element

動態建立一個XML元素

jsp:attribute

定義動態建立的XML元素的屬性

jsp:body

定義動態建立的XML元素的主體

jsp:text

用於封裝模板資料

使用bean是最好用的行為標籤,例如,我們建立一個java類:

經典技術回顧和借鑑-JSP程式設計

然後,在JSP中使用useBea/setProperty/getProperty三個行為標籤:

經典技術回顧和借鑑-JSP程式設計

測試:

經典技術回顧和借鑑-JSP程式設計

2。5隱含物件(預設建立的物件)

物件

描述

request

HttpServletRequest

類的例項

response

HttpServletResponse

類的例項

out

PrintWriter

類的例項,用於把結果輸出至網頁上

session

HttpSession

類的例項

application

ServletContext

類的例項,與應用上下文有關

config

ServletConfig

類的例項

pageContext

PageContext

類的例項,提供對JSP頁面所有物件以及名稱空間的訪問

page

類似於Java類中的this關鍵字

Exception

Exception

類的物件,代表發生錯誤的JSP頁面中對應的異常物件

2。6判斷語句

判斷語句包括兩種:if else和switch case

示例如下:

經典技術回顧和借鑑-JSP程式設計

2。7迴圈語句

迴圈語句包括兩種:for和while

示例如下:

經典技術回顧和借鑑-JSP程式設計

2。8運算子

類別

運算子

結合性

字尾

() [] 。 (點運算子)

左到右

一元

++ - - ! ~

右到左

可乘性

* / %

左到右

可加性

+ -

左到右

移位

>> >>> <<

左到右

關係

> >= < <=

左到右

相等/不等

== !=

左到右

位與

&

左到右

位異或

^

左到右

位或

|

左到右

邏輯與

&&

左到右

邏輯或

||

左到右

條件判斷

?:

右到左

賦值

= += -= *= /= %= >>= <<= &= ^= |=

右到左

逗號

左到右

2。9變數型別

布林值(boolean):true 和 false;

整型(int):與 Java 中的一樣;

浮點型(float):與 Java 中的一樣;

字串(string):以單引號或雙引號開始和結束;

Null:null。

2。10表單處理

以下提供一個例子來說明:

(1)建立FormProcess。jsp檔案:

經典技術回顧和借鑑-JSP程式設計

其中提供了兩個input輸入框。

(2)再建立FormProcessMain。jsp檔案,如下:

經典技術回顧和借鑑-JSP程式設計

其中使用request物件的getParameter方法來獲取Get引數。

2。11過濾器

JSP過濾器實際上和Servlet過濾器一樣。

經典技術回顧和借鑑-JSP程式設計

以下透過示例來說明:

(1)在web。xml中增加一個過濾器:

經典技術回顧和借鑑-JSP程式設計

(2)然後建立過濾器處理類com。hunting。LogFilter,如下:

經典技術回顧和借鑑-JSP程式設計

2。12JSTL(JSP標準標籤庫)

(1)核心標籤:

標籤

描述

用於在JSP中顯示資料,就像<%= 。。。 >

用於儲存資料

用於刪除資料

用來處理產生錯誤的異常狀況,並且將錯誤資訊儲存起來

與我們在一般程式中用的if一樣

本身只當做的父標籤

的子標籤,用來判斷條件是否成立

的子標籤,接在標籤後,當標籤判斷為false時被執行

檢索一個絕對或相對 URL,然後將其內容暴露給頁面

基礎迭代標籤,接受多種集合型別

根據指定的分隔符來分隔內容並迭代輸出

用來給包含或重定向的頁面傳遞引數

重定向至一個新的URL。

使用可選的查詢引數來創造一個URL

(2)格式化標籤:

標籤

描述

使用指定的格式或精度格式化數字

解析一個代表著數字,貨幣或百分比的字串

使用指定的風格或模式格式化日期和時間

解析一個代表著日期或時間的字串

繫結資源

指定地區

繫結資源

指定時區

指定時區

顯示資源配置檔案資訊

設定request的字元編碼

(3)SQL標籤:

標籤

描述

指定資料來源

執行SQL查詢語句

執行SQL更新語句

將SQL語句中的引數設為指定值

將SQL語句中的日期引數設為指定的java。util。Date 物件值

在共享資料庫連線中提供巢狀的資料庫行為元素,將所有語句以一個事務的形式來執行

(4)XML標籤:

標籤

描述

與<%= 。。。 >,類似,不過只用於XPath表示式

解析 XML 資料

設定XPath表示式

判斷XPath表示式,若為真,則執行本體中的內容,否則跳過本體

迭代XML文件中的節點

的父標籤

的子標籤,用來進行條件判斷

的子標籤,當判斷為false時被執行

將XSL轉換應用在XML文件中

共同使用,用於設定XSL樣式表

3。JSP歷史

下面從前後端分離角度展現JSP的產生和發展脈絡。

3。1網際網路的產生

1957年美國國防部(DoD)組建了高階研究計劃局(ARPA)。1961年7月,MIT工程師Leonard Kleinrock發表Information Flow in Large Communication Nets論文。1962年8月, MIT工程師J。C。R。 Licklider和W。 Clark發表On-Line Man Computer Communication論文。1967 2月,在ARPA IPTO PI會議上,Larry Roberts組織了有關ARPANET設計方案的討論。網際網路雛形ARPANET由此產生。

網際網路最初的目的是訪問和複製檔案從一臺計算機到另一臺遠端計算機,兩臺計算機之間有網路,但速度慢,而且經常專用於大學或者研究機構是昂貴的,不支援大規模使用者。1970年,ARPANET主機開始使用網路控制協議(NCP),這就是後來的傳輸控制協議(TCP)的雛形。

人們基於TCP/IP構建了更快的網路,其中應用層檔案傳輸協議(FTP)規範提供了交換這些檔案的標準方法。1973年,檔案傳輸協議(FTP)推出,用於在異構系統之間交換檔案。FTP傳輸的檔案並不能有效檢視,因此發明了超文字標記語言(HTML),使我們能夠在網際網路上看到文件。

3。2全球資訊網的產生

1989年蒂姆伯納斯-李寫了一份關於建立一個透過網路傳輸超文本系統的報告,其中建立了單行 HTTP 協議,這個協議在1991年被命名為HTTP/0。9,全球資訊網由此產生,1996年超文字傳送協議HTTP 1。0釋出。

儘管FTP可以傳輸HTML檔案,但是並沒有提供有效小檔案傳輸機制和無狀態管理能力,超文字傳輸協議(HTTP)才被髮明出來專門用於傳輸HTML文件,HTTP是一種無連線/無狀態協議,這使得許多短連線更加有效,而且可以不使用密碼就可以獲取HTML文件,這讓全球資訊網真正到來,真正體現了網際網路的快捷、免費思維。

3。3通用閘道器介面的產生

上面提到了TCP/IP,HTTP,FTP都是通訊管道,後來大家把注意力轉向內容。我們感興趣的檔案隨著IT技術的發展而快速爆發,例如資料庫快速發展導致各種應用系統快速發展。同時,資料的更新頻度更加快速,這種即時資訊推動了網際網路流量快速增長。透過基於HTTP的HTML,終端使用者可以瀏覽位於遠端伺服器上的檔案。

當時,遠端伺服器屬於區域網,區域網連線到網際網路需要專用裝置,可惜的是這種專用裝置並不好用(直到後來路由器和交換機被思科發明出來),因此通用閘道器介面(CGI)規範被制定出來,它允許Web伺服器超越檔案伺服器並從內部資料庫中獲取資料,並動態更改HTML。

最初,CGI是在1993年由美國國家超級電腦應用中心(NCSA)為NCSA HTTPd Web伺服器開發的,當年NCSA內部有一份簡單的CGI規範說明,後來在1997年Ken Coar領導的團隊制定了CGI1。1規範,並提交RFC。CGI規範是Web應用程式開發中的一個重大突破,確保了相同的CGI程式在不同的Web伺服器上工作。

CGI成為傳遞動態內容的最常用手段。只是網際網路發展太快了,CGI的效能無法跟上,每個對CGI指令碼的請求都會產生一個單獨的程序。這種設計讓CGI在高峰負載時也消耗大量資源。解決方案非常多,功能性和可伸縮性成為關鍵。

許多CGI替代者都採用伺服器端程式設計技術來實現業務邏輯,包括ASP、ColdFusion、PHP和Perl等等,其中至今仍然在大量使用的是PHP ,PHP 繼承自一個老的工程,名叫 PHP/FI,PHP/FI 在 1995 年由 Rasmus Lerdorf 建立,最初只是一套簡單的 Perl 指令碼,用來跟蹤訪問他主頁的人。然後,即使是PHP,最終由於可移植性和麵向物件的程式設計設計,Java超越了PHP和其他CGI平臺。

3。4 JSP的產生

Java自1991年誕生以來已經走過了很長的一段路,當時Sun公司推出了“綠色計劃”,試圖整合數字消費裝置,如電視機、CD播放機和計算機。OAK(名字來自高斯林窗外的一棵橡樹!)誕生了,但直到出現HotJava和小程式,才開始活躍起來。1995年,Sun釋出了開源Java,向微軟發起了挑戰,反響巨大。這促使Java深入到伺服器端開發領域。

Sun在Java中加入了Internet功能,並在1997年6月釋出了servlet介面。servlet以CGI替代為目標。與CGI為每個請求啟動一個程序不同,servlet使用更細粒度的執行緒在單個程序中執行。servlet採用了更有效的體系架構,能夠應對網際網路上的複雜情況。Java servlet為開發Java Web元件提供了基礎。servlet優點是每個額外的併發請求帶來的額外開銷非常小。

servlet技術需要真正的Java程式設計技能才能有效應用,外觀和良好體驗為web應用帶來了巨大方便,但是影象支援還不是那麼良好。於是Sun公司在1998年釋出了JavaServer Pages (JSP),這來自於微軟ASP的啟發,也有些人說是複製的,它使得編寫動態HTML頁面變得容易。

使用JSP的使用非常簡單,有些工具(例如Dreamweaver)能讓非程式設計師來構建WWW網站前端頁面,當然要servlet帶動後端伺服器程式碼(例如javabean)才能完成完整的WWW網站構建工作,這樣構建的WWW網站具有模組化、可維護、可伸縮和可移植優點,從而完成簡單網站到複雜Web應用程式的轉變,從而實現前後端分離。

JSP官方版本1。0和1。1都出現在1999年,都很受歡迎,版本1。2出現於2001年,是目前最流行的實現。

3。5 Node的產生

JSP終究還是含有Java程式碼,前後端沒有徹底分離,因此人們在2009年發明了node-js,這讓前端開發人員崛起,他們單純使用HTML+CSS+JavaScript前端語言就能完成前端頁面的開發,而不需要使用含有各種後端互動印記的標籤。

於是,基於node-js的React、Angela、VUE框架成為潮流。