JSP學習筆記

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

1、什麼是JSP?

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

2、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兼容的標籤技術強大的功能,大大減小對腳本語言的依賴.因爲定製標籤技術,使網頁製做者下降了製做網頁的複雜度。

3、JSP的劣勢

(1) 正是因爲爲了跨平臺的功能,爲了極度的伸縮能力,因此極大的增長了產品的複雜性。
(2) java的高效率運行須要佔用大量的內存和硬盤空間. 一方面,java的高速運行是經過 .class文件常駐內存來實現的.另外一方面,還須要硬盤空間來存儲一系列的.java 文件和.class文件以及對應的版本文件。

4、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網站開發的特殊性而致使的,並不是編程語言特性所決定。

5、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內容返回給客戶端。php

(6) 若是JSP文件被修改了,服務器將對該文件進行從新編譯。若是須要從新編譯,則將編譯結果取代內存中的Servlet,並繼續上述處理過程。 若是在任什麼時候候因爲系統資源不足,JSP引擎將以某種不肯定的方式將Servlet從內存中移去。當這種狀況發生時,先調用jspDestroy()方法, 而後Servlet實例便被標記加入「垃圾收集」處理。html

 6、JSP的九大內置對象

(1) 內置對象特色java

  • 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類的實例。

7、JSP的三個編譯指令

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

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

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

(2) include指令:用於指定包含另外一個頁面(靜態包含),在進行jsp向servlet轉換以前,首先是將inclue file裏面的內容執行,而後再進行轉換,最終只會轉換成爲一個單一的servlet。設計模式

(3) taglib指令:用於定義和訪問自定義標籤。瀏覽器

8、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指令:用於設置參數值。

9、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

10、EL表達式

    全部EL都是以${爲起始、以}爲結尾的。

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

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

相關文章
相關標籤/搜索