JSP是Servlet更高級別的擴展,關於JSP的知識主要有JSP的頁面構成、執行過程、字符轉譯、隱式對象等技術。知識點包括:
1、JSP概述 2、JSP頁面技術 3、JSP的執行過程
4、JSP的異常處理 5、JSP的隱式對象 6、JSP的設計模式。
我們今天主要來講解一下JSP的概述和頁面的構成。首先我們先來講解一下JSP的概述:
說到JSP我們不得不先來講一下Servlet,所以我們下面說一說
純粹基於Servlet的方法存在一些弊端:
1、開發者和維護應用程序的成員必須對Java編程知識面有全面的了解,因為處理代碼和處理html元素混合在一塊。
2、如果要改變應用的外觀,或者增加對新客戶類型的支持,則需要對Servlet代碼進行更新和重編譯。
3、在設計應用界面時,很難充分利用Web頁面開發工具。如果這種工具用於開發Web頁面布局,所生成的html就必須手工地嵌入到Servlet代碼中,這個過程相當耗費時間,很容易出錯。
面對上面出現的問題Sun Microsystems公司倡導開發了以Java語言作為腳本語言,建立在Servlet規范提供的功能之上的動態網頁技術,用來在網頁上顯示動態內容的JSP(Java Server Pages)。其網頁是由Java片段或JSP標記等構成JSP網頁,該網頁後綴名為“.jsp”。
JSP技術的應用是一次編寫,就可以在任何符合Java語法結構的環境上運行。因為Sun通過開放源代碼,使許多公司一起參與建立即使標准,JSP應用程序接口(API)毫無疑問已經取得成功,並將隨Java組織不斷開放擴大而繼續完善。
JSP的成功取決於它自身的優點,主要包括:
1、簡單性和有效性 2、程序的獨立性 3、程序的兼容性
4、程序的可重用性
我們說完了JSP的概述,相信大家對JSP有了簡單的認識,下面我們開始講解JSP頁面的構成:
JSP頁面就是帶有JSP元素的常規Web頁面,它由靜態內容和動態內容構成。靜態內容主要是指HTML元素,而動態內容主要是指JSP元素。
其中JSP元素主要包括:指令元素、腳本元素、動作元素、注視等內容。今天我們只來說一下指令元素和腳本元素。
指令元素,它主要用於為轉換階段提供JSP頁面的相關信息,指令不會產生任何輸出到當前的輸出流中,它指定了有關頁面本身的信息,這些信息在請求期間一直保持不變。而且所有的JSP指令元素的作用范圍為當前的JSP頁面。也就是說指令元素只影響它所在的JSP頁面,對其他的JSP頁面沒有影響。
JSP指令的語法如下:
<%@ directive{attr="value"}* %>
在<和%之間,%和@之間不能用空格,%和>之間也不能用空格。
JSP的指令元素有三種:即page、include和taglib。
page指令:該指令用於整個頁面,定義與頁面相關的屬性,它是JSP頁面和容器的通信員。而且該指令可以出現在JSP頁面的任何地方,但是無論在哪,它永遠是作用在整個頁面,所以我們通常將其放於開頭。其語法是:<%@ page 屬性名1="值1" 屬性名2="值2" ... %>。
注意:可以使用多個page指令,但對於每個頁只能聲明給定屬性一次,除了import屬性外。而且屬性名稱是大小寫敏感的。
page的屬性共有13個,最常用的屬性有:
import=“導包列表”:表示當前JSP文件引入需要使用的類或接口。多個類、包名之間用“,”隔開。例如%@page import=”java.util.*,java.i0.*”%或者%@page import=“java.util.*”%
%@page import=“java.io.*”%
import屬性是唯一一個可以在同一個頁面中出現多次的屬性,而且java.lang.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.*。都是已經被隱含的引入,包中的類、接口等不需要引入就可以使用。
language=“scriptingLangeuage”:指定當前的JSP文件中的程序代碼是使用何種編程語言編寫的,目前屬性的值只能是java。
contentType=“ctinfo”:設置當前JSP頁面的向客戶浏覽器輸出內容的MIME類型和字符編碼集。客戶端的浏覽器會根據你在contentType中指定的MIME類型和字符集代碼來顯示Servlet輸出的內容。(MIME類型是設定某種擴展名的文件用一種應用程序來打開的方式類型,該擴展名文件被訪問的時候,浏覽器會自動指定應用程序來打開)。例:<%@page contentType=”text/html;charset=utf-8”%>
pageEncoding =“peingo”:設置當前JSP頁面使用的字符編碼。如果設置了這個屬性,則JSP頁面的字符編碼就是它指定的字符集,如果沒有就使用contentType屬性的值,如果都沒有,頁面默認的是ISO-8859-1。
session=”true|false”:指示當前JSP文件中session隱含對象是否有效,如果為true表示session對象有效,可以使用,否則session對象無效,不能使用
buffer=“none|8kb|sizekb”:指定JSP文件中out對象使用的緩沖區大小。
autoFlush=“true|false”:設置當輸出緩沖區已經滿了是否自動flush。需注意,如果buffer設定為none,則該屬性就不能設成false,否則JSP文件運行時會拋出異常。
errorPage=“relativeURL”:設置當前JSP頁面中代碼出現異常後,專門處理異常的頁面。
isErrorPage=“true|false”:設置當前JSP頁面是否為專門處理異常的頁面,如果為true,則該頁面可以通過exception內置對象,處理其他JSP頁面轉過來的異常。
Include指令:它用於JSP頁面中包含一個文件,該文件可以是HTML網頁、文本文件或一段Java代碼,用它可以簡化頁面代碼,提高代碼的重要性。它的語法:<%@ include file=”相對於當前文件的URL”%>,URL為被包含文件的相對路徑,如果以“/”開始,相對於這個應該的根目錄,如果沒有以”/”開頭,則相對於當前的JSP頁面。(在包含的文件中,最好不要使用<html></html><body></body>等標簽,以為JSP頁面中已經有了這些標簽)。
Taglib指令:它允許頁面使用用戶制定的標簽,語法如下:
<%@taglib (uri="具有唯一標識和前綴相關的標簽描述符地址" prefix="前綴")%>
指令元素我們就說這些,下面我們在講一下腳本元素:
使用JSP腳本元素可以將Java代碼嵌入到JSP頁面中,這些Java代碼將出現在由當前JSP頁面生成的Servlet中,使JSP將靜態內容與動態內容分離出來。
表達式:表達式標簽在JSP請求處理階段進行運算,所得的結果轉換成字符串,與靜態標簽數據組合在一起。表達式在頁面的位置,就是該表達式計算結果顯示的位置。語法:<%=expression%>。
(不能用分號;來作為表達式的結束符;表達式必須是一個合法的Java表達式。表達式必須有一個返回值,且返回值被轉換成字符串。
)。
腳本:它是在<% %>裡嵌入的Java代碼,這裡的Java代碼和一般的Java代碼沒有什麼區別,所以每一條語句同樣要以分號“;”結束,這和表達式是不相同的。語法:<%code%>。
聲明:它用來定義當前JSP頁面中使用的變量和方法,並且它中定義的變臉為JSP頁面的全局變量,在JSP轉化成Servlet後,定義的變量轉化為類變量,方法轉化為Servlet中的方法。
語法如下:<%! String str=“hello”;%>
<%! public static final String DEFAULT_NAME=“World”;%>
<%! public String getName(HttpServletRequest request){
return request.getParameter(“name”);
%>
注意:變量的聲明必須以;結尾,該聲明僅在一個頁面中有效,如果想每個頁面都用到一些聲明,最好把它們寫成一個單獨的文件,然後用<%@include%>或<jsp:include>元素包含進來。
摘自 雪狼小計