JSP學習筆記

来源:http://www.cnblogs.com/shouce/archive/2016/03/10/5260467.html
-Advertisement-
Play Games

什麼是JSP JSP的優勢 JSP的劣勢 JSP與PHP的比較 JSP工作原理 JSP的九大內置對象 JSP的三個編譯指令 JSP的七個動作指令 JSP標準標簽庫:JSTL EL表達式 JSP學習思維導圖 一、什麼是JSP? JSP(JAVA Server Pages)是一種跨平臺的動態網頁技術,在


  • 什麼是JSP
  • JSP的優勢
  • JSP的劣勢
  • JSP與PHP的比較
  • JSP工作原理
  • JSP的九大內置對象
  • JSP的三個編譯指令
  • JSP的七個動作指令
  • JSP標準標簽庫:JSTL 
  • EL表達式
JSP學習思維導圖  

一、什麼是JSP?

    JSP(JAVA Server Pages)是一種跨平臺的動態網頁技術,在靜態網頁中嵌入JAVA代碼和JSP標記(tag),由Web伺服器中的JSP引擎來進行編譯並執行嵌入的JAVA代碼,生成頁面信息返回給客戶端。

二、JSP的優勢

(1) JSP開發的Web應用是跨平臺的,即能在Linux下運行,也能在其他操作系統上運行。 (2) JSP將網頁邏輯與網頁設計和顯示分離,支持可重用的基於組件的設計,使基於Web的應用程式的開發變得迅速和容易。 (3) JSP支持伺服器端組件。JSP可以使用成熟的JAVA BEANS 組件來實現複雜商務功能。 (4) JSP具有強大的可伸縮性。從只有一個小的.Jar文件就可以運行Servlet/JSP,到由多台伺服器進行集群和負載均衡,到多台Application進行事務處理,消息處理。 (5) JSP標簽可擴充性。JSP技術允許開發者擴展JSP標簽,定製JSP標簽庫,所以網頁製作者充分利用與XML相容的標簽技術強大的功能,大大減少對腳本語言的依賴.由於定製標簽技術,使網頁製作者降低了製作網頁的複雜度。

三、JSP的劣勢

(1) 正是由於為了跨平臺的功能,為了極度的伸縮能力,所以極大的增加了產品的複雜性。 (2) java的高效率運行需要占用大量的記憶體和硬碟空間. 一方面,java的高速運行是通過 .class文件常駐記憶體來實現的.另一方面,還需要硬碟空間來存儲一系列的.java 文件和.class文件以及對應的版本文件。

四、JSP與PHP的比較

 

項目 PHP JAVA
可復用性
開發速度
易維護性
可移植性 優-Linux Windows、Unix
Unix 安全性
開發費用
多層架構
資料庫訪問 介面不統一 介面統一
可擴展性
面向對象 差 

 

(1) 語言比較      PHP是解釋執行的伺服器腳本語言,首先php有簡單容易上手的特點。語法和c語言比較象。     JSP需要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程式設計方法。所以java不如php好學。      Java首先要編譯成位元組碼.class文件,然後在java虛擬機上解釋執行。Jsp可以通過servlet和JavaBean的支持產生強大的功能。JavaBean 是一種可復用的、跨平臺的軟體組件。使用javabean可以方便的實現java代碼和html的分離,能夠增強系統的功能和軟體的復用性。    (2) 資料庫訪問比較      Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫。訪問資料庫的介面比較統一。        PHP對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。   (3) 系統設計架構比較      PHP只能實現簡單的分散式兩層或三層的架構,而JAVA在這方面就比較強大,可以實現多層的網路架構。運用MVC的設計模式,可具有更加高效、合理的系統架構。使得系統在可拓展性、需求應變性上更好的適應,而且項目越複雜,其優勢越明顯。而且現在不同的層都已經有一些成熟的開發框架的支持。     採用Java的Web開發技術,需要使用的是面向對象的系統設計方法,而PHP還是採用面向過程的開發方法。     用Java進行開發前期需要做大量的系統分析和設計的工作。   (4) 跨平臺性       Java和PHP都有很好的跨平臺的特性。幾乎都可以在不作任何修改的情況下運行在Linux或者Windows等不同的操作系統上。     (5) 性能比較
  • 算術運算:JSP比PHP快很多(PHP是弱類型)
  • 字元串運算:PHP比JSP快很多(JSP使用對象處理)
  • 文件操作:JSP比PHP快
  • 資料庫操作:JSP比PHP慢很多(存有爭議),但是JAVA使用連接池和PHP使用持久連接(pconnect)性能差不多
    總體來說,PHP與JSP在性能上,差別不了很遠,各有優勢。   (6) 總結     綜上所述,PHP適合於快速開發,中小型應用系統,開發成本低,能夠對變動的需求作出快速的反應。而Java適合於開發大型的應用系統,應用的前景比較廣闊,系統易維護、可復用性較好。還有,同樣功能的系統用Java開發的系統要比PHP開發的系統的價格要高。      儘管Java的數學計算和資料庫訪問都有優勢,架構也相當完美,但是PHP卻可以簡單輕鬆地支持高強度Web訪問,能夠快速開發應用,支持PHP的虛擬主機多如牛毛,使得用PHP開發一個網站比用Java開發一個網站要快得多,容易的多。Java所擁有的優點只適合傳統的以軟體項目為核心的開發模式,而PHP更適合於以客戶為核心的SaaS的開發模式,因此,PHP目前在Web網站開發的優勢完全是因為Web網站開發的特殊性而導致的,並非編程語言特性所決定。

五、JSP工作原理

JSP工作原理   JSP執行過程       WEB容器(Servlet引擎)接收到以.jsp為擴展名的URL的訪問請求時,它將把該訪問請求交給JSP引擎去處理。Tomcat中的JSP引擎就是一個Servlet程式,它負責解釋和執行JSP頁面,具體工作流程如下: (1) 每個JSP 頁面在第一次被訪問時,JSP引擎將它翻譯成一個Servlet源程式,在轉換過程中如果發現JSP文件有語法錯誤,轉換過程將中斷,並向服務端和客戶端輸出出錯信息; (2) 如果轉換成功,JSP引擎用javac把該Java源文件編譯成相應的.class文件並將該.class文件載入到記憶體中。 (3) 創建一個該Servlet的實例,並執行該實例的jspInit()方法(jspInit()方法在Servlet的生命周期中只被執行一次)。 (4) 創建並啟動一個新的線程,新線程調用實例的jspService()方法,Servlet容器會把瀏覽器的請求和對瀏覽器的回應封裝成HttpServletRequest和HttpServletResponse對象作為參數傳遞到jspService()方法中。(對於每一個請求,JSP引擎會創建一個新的線程來處理該請求。如果有多個客戶端同時請求該JSP文件,則JSP引擎會創建多個線程,每個客戶端請求對應一個線程)。

(5) jspService()方法執行後會將HTML內容返回給客戶端。

(6) 如果JSP文件被修改了,伺服器將對該文件進行重新編譯。如果需要重新編譯,則將編譯結果取代記憶體中的Servlet,並繼續上述處理過程。 如果在任何時候由於系統資源不足,JSP引擎將以某種不確定的方式將Servlet從記憶體中移去。當這種情況發生時,先調用jspDestroy()方法, 然後Servlet實例便被標記加入“垃圾收集”處理。

 六、JSP的九大內置對象

(1) 內置對象特點

  • JSP規範提供,不用編寫者實例化。
  • 通過Web容器實現和管理
  • 所有JSP頁面均可使用
  • 只有在腳本元素的表達式或代碼段中才可使用
(2) 常用內置對象
分類 對象
輸出輸入對象 request、response、out
通信控制對象 pageContext、session、application
Servlet對象
page、config
錯誤處理對象 exception

 

作用域 對象
request request
session session
page response、out、pageContext、config、page、exception 
application application、

 

  • request對象:客戶端的請求信息被封裝在request對象中,通過它才能瞭解到客戶的需求,然後做出響應。它是HttpServletRequest類的實例。
  • response對象:此對象封裝了返回到HTTP客戶端的輸出,向頁面作者提供設置響應頭標和狀態碼的方式。經常用來設置HTTP標題,添加cookie,設置響應內容的類型和狀態,發送HTTP重定向和編碼URL。
  • session對象:指的是客戶端與伺服器的一次會話,從客戶連到伺服器的一個WebApplication開始,直到客戶端與伺服器斷開連接為止。它是HttpSession類的實例。
  • out對象:JspWriter類的實例,是向客戶端輸出內容常用的對象。
  • pageContext對象:pageContext對象提供了對JSP頁面內所有的對象及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當於頁面中所有功能的集大成者。
  • config對象:是在一個Servlet初始化時,JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時所要用到的參數(通過屬性名和屬性值構成)以及伺服器的有關信息(通過傳遞一個ServletContext對象)
  • page對象:就是指向當前JSP頁面本身,代表了正在運行的由JSP文件產生的類對象
  • exception對象:代表了JSP文件運行時所產生的例外對象,此對象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用
  • application對象:實現了用戶間數據的共用,可存放全局變數。它開始於伺服器的啟動,直到伺服器的關閉,在此期間,此對象將一直存在;這樣在用戶的前後連接或不同用戶之間的連接中,可以對此對象的同一屬性進行操作;在任何地方對此對象屬性的操作,都將影響到其他用戶對此的訪問。伺服器的啟動和關閉決定了application對象的生命。它是ServletContext類的實例。

七、JSP的三個編譯指令

    JSP編譯指令是通知JSP引擎的消息,在將JSP編譯成 Servlet 時起作用,處理指令通常可替換成 Java腳本,是 JSP腳本的標準化寫法。它不直接生成輸出。編譯指令都有預設值。

    語法格式:<%@ 編譯指令名 屬性名="屬性值"...%>

(1) page指令:該指令是針對當前頁面的指令,對整個頁面有效,主要用來設定一些參數,比如contentType,language等。

(2) include指令:用於指定包含另一個頁面(靜態包含),在進行jsp向servlet轉換之前,首先是將inclue file裡面的內容執行,然後再進行轉換,最終只會轉換成為一個單一的servlet。

(3) taglib指令:用於定義和訪問自定義標簽。

八、JSP的七個動作指令

    動作指令與編譯指令不間,編譯指令是通知 Servlet 引擎的處理消息,而動作指令只是運行時的腳本動作。

(1) forward指令:用於將頁面響應轉發給另外的頁面。既可以轉發給靜態的HTML頁面,也可以轉發到動態的JSP頁面,或者轉發到容器中的Servlet。

    執行forward指令轉發請求時,客戶端的請求參數不會丟失。

    執行forward指令轉發請求時,用戶請求的地址沒有發生變化,但頁面內容完全變為被forward目標頁的內容。

(2) include指令:是一個動態include指令,也用於導入某個頁面,它不會導入被include頁面的編譯指令,僅僅將被導入頁面的body內容插入本頁面。  

    靜態include和動態include的區別:靜態include是把父頁面和包含進來的頁面,代碼合併後,才一起翻譯成servlet,反饋到前臺,形成一個HTML頁面(編譯是發生)。動態include是把父頁面和包含進來的頁面單獨編譯,單獨翻譯成servlet後,在前臺拼成一個HTML頁面(請求時發生)。

(3) useBean指令:表示用來在JSP頁面中創建一個BEAN實例並指定它的名字以及作用範圍。

(4) getProperty指令:表示獲取BEAN的屬性的值並將之轉化為一個字元串,然後將其插入到輸出的頁面中。

(5) setProperty指令:表示用來設置Bean中的屬性值。

(6) plugin指令:表示執行一個applet或Bean,有可能的話還要下載一個Java插件用於執行它。

(7) param指令:用於設置參數值。

九、JSP標準標簽庫:JSTL 

    JSP的標簽函數庫主要分為五大類:

JSTL

前置名稱

URI

範例

核心標簽庫

c

http://java.sun.com/jsp/jstl/core

<c:out>

I18N格式標簽庫

fmt

http://java.sun.com/jsp/jstl/fmt

<fmt:formatDate>

SQL標簽庫

sql

http://java.sun.com/jsp/jstl/sql

<sql:query>

XML標簽庫

Xml

http://java.sun.com/jsp/jstl/xml

<x:forEach>

函數標簽庫

fn

http://java.sun.com/jsp/jstl/functions

<fn:split>

核心標簽庫:

功能分類

標簽名稱

表達式操作

out、set、remove、catch

流程式控制制

if、choose、when、otherwise

迭代操作

forEach、forTokens

URL操作

import、param、url、redirect

十、EL表達式

    所有EL都是以${為起始、以}為結尾的。

    EL 提供 . 和 [ ] 兩種運算符來導航數據。下列兩者所代表的意思是一樣的:${sessionScope.user.sex}等於${sessionScope.user["sex"]}

    . 和 [ ] 也可以同時混合使用:${sessionScope.shoppingCart[0].price}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 國外程式員ziadoz 在Github上收集整理了PHP的各種資源,內容包括模板、框架、資料庫、安全等方面的庫和工具。這篇文章,PHP100彙總了這些PHP資源,供各位PHP學習者和程式員參考。廢話不多說,下麵就是詳細的資料列表。 依賴管理 ——用於依賴管理的包和框架 Composer/Packag
  • 手動刪除webapps下項目,導致Document base D:\Server\apache-tomcat-7.0.61_x64\webapps\XXX does not exist or is not a readable
  • 如何利用php自動執行.sql文件,就是獲取sql文件中的內容,然後將每一句sql語句一次執行。 代碼example: //讀取文件內容 $_sql = file_get_contents('test.sql'); $_arr = explode(';', $_sql); $_mysqli = ne
  • 剛剛學完這兩個框架,就迫不及待的做了一個例子,在整合兩個框架的時候,也碰到了一些小問題,下麵介紹一下配置的步驟: 1.創建一個自定義的struts2和hibernate的類庫 因為之前寫例子都是直接將jar包拖到WEB-INF下的lib包下,但是這裡需要導入兩個框架的jar包,放在一起的話,會很亂,
  • meta基礎知識 常見問題 常用的移動端框架 iscroll.js underscore.js 滑屏框架 FastClick meta基礎知識 H5頁面視窗自動調整到設備寬度,並禁止用戶縮放頁面 <meta name="viewport" content="width=device-width,in
  • 一.Spring核心組件結構 總的來說Spring共有三個核心組件,分別為Core,Context,Bean.三大核心組件的協同工作主要表現在 :Bean是包裝我們應用程式自定義對象Object的,Object中存有數據,而Context就是為了這些數據存放提供一個生存環境,保存各個 bean之間的
  • 正則表達式匹配電話號碼和手機號碼 正則表達式 \d{3}-\d{8}|\d{4}-\d{7} 匹配 0511-4405222 | 021-87888822 不匹配 02-552255 12345-784787 正則表達式 (^\([0]\d{2}|\d{4}\))(\d{6,7}$) 匹配 (021
  • 命名規範 Θ 類文件都以.class.php為尾碼,使用駝峰法命名,並且首字母大寫,例如 Pay.class.php; Θ 類名和目錄_文件名一致。例如:類名Zend_Autoloader的目錄是Zend/Autoloader.class.php; Θ 函數的命名使用小寫字母和下劃線的方式。例如:g
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...