JSP網頁編程初解
JSP是當今Web開發中最重要的部分之一,它是直接和客戶界面的部分。對於商業軟件來說,JSP顯得尤其重要。
1、JSP簡介
JSP是JavaServer Pages的縮寫,是右Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標准。在HTML文件中加入Java程序代碼就構成了JSP網頁。Web服務器在遇到訪問JSP網頁的請求時,首先執行其中的Java程序代碼,然後將執行結果以HTML姓氏返回給客戶。Java程序運行在服務器端,客戶端只用於顯示。
1)、主流Web技術介紹
JSP技術並不是唯一的動態網頁技術,在JSP技術出現之前就有幾種比較好用的動態網頁技術,這些技術主要有一下幾種。
>CGI:英文全稱Common GatewayInterface,通常翻譯為通用網關接口。是HTTP服務器與機器上的其他程序進行通信的一個接口。它的出現使網頁從靜態變成了動態。但是因為要生成一個動態網頁,當HTTP服務器收到對CGI程序的請求時,每一個請求都將啟動一個新的進程。當有大量用戶請求調用CGI應用程序時,多個CGI應用程序的執行將導致服務器的大量負載,會嚴重影響服務器系統性能。
>ASP:英文全稱Active ServerPage,它是Microsoft公司開發的一種處理動態頁面的技術,同時它可以在HTML中內嵌一些腳本語言,如JavaScript。它將Web上的請求轉入到服務器中,在服務器中對所有的ASP腳本語言進行解釋執行。ASP是一種比較好用的技術,但它的缺點是只能在微軟公司的Windows NT平台中支持IIS服務器。
>PHP:英文全稱Personal HomePage,PHP是一種跨平台的服務器端的嵌入式腳本語言。它大量地借用C、Java和Perl語言的語法,並耦合PHP自己的特性,使Web開發者能夠快速地寫出動態頁面。它支持目前絕大多數數據庫。還有PHP是完全免費的,可以自由下載。而且用戶可以不受限制地獲得源碼,甚至可以加入自己需要的特色。對於小項目,它是一個之分適合的編程語言。但是對於較大的和更為復雜的項目,PHP就顯得薄弱了。
>JSP:英文全稱Java Server Pages。JSP與上面幾種技術相比,主要具有如下優點:
>>運行速度快:僅在第一次請求時進行編譯、加載;
>>內容的生成和顯示是分離的;
>>平台無關性:基本上可以在所有平台上的任意環境中開發;
>>具有Java的所有的強大功能;
>>將內容的產生和顯示進行分離;
>>用標識簡化頁面開發;
>>強調可重用的群組件。
2)、JSP的運行環境介紹
從最開始的JSWDK到現在的Tomcat、WebLogic等,JSP的運行環境在逐漸改變,出現了很多優秀的JSP容器。常用的JSP容器有Tomcat、WebLogic、WebSphere
3)、安裝和啟動JSP運行環境
在安裝JSP運行環境之前,首先要安裝JDK,這個太簡單不叨叨了。接下來要安裝Tomcat,下載網址為:http://tomcat.apache.org/。下載完畢按照默認設置進行安裝即可。在系統環境變量中新建一個名為TOMCAT_HOME的系統變量,將其值設置為Tomcat安裝的目錄即可(我的是D:\Apache Software Foundation\Tomcat7.0_SingerFive)。
2、JSP程序演示
下面就從最簡單的入門開始介紹,先體驗一下JSP,了解什麼是JSP,開始的時候可能會認為很簡單,但隨著學習的不斷深入,你會越來越感覺到JSP的強大。
1)、體驗JSP
下面編寫一個簡單的JSP程序,它的內容和HTML文件是一樣的,唯一的區別的是他的文件名後綴是.jsp,而不是.html。
[html]
<html>
<head>
<meta http-equlv=”Content-Type” content=”text/html;charset=GBK”>
<title>一個簡單的JSP例子</title>
</head>
<body>
這是一個JSP的例子
</body>
</html>
<html>
<head>
<meta http-equlv=”Content-Type” content=”text/html;charset=GBK”>
<title>一個簡單的JSP例子</title>
</head>
<body>
這是一個JSP的例子
</body>
</html>
如果將上述代碼存為.html,則可以直接使用浏覽器打開該文件,否則以.jsp為後綴則不可以直接雙擊該文件來查看實際的運行效果,而需要把它部署到JSP容器中(Tomcat),使用JSP容器解析後才能查看。
2)、JSP與HTML的初步結合
下面是一個簡單的JSP與HTML結合的程序,這個程序中用到了JSP腳本標簽指令中的pages指令,這些知識將會在後面的章節中進行詳細介紹。
[html]
<%@page contentType="text/html"pageEncoding="UTF-8"%>
<html>
<head>
<metahttp-equivmetahttp-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>XXXXXXXXX</title>
</head>
<body>
<h1>這是一個JSP和HTML</h1>
</body>
</html>
<%@page contentType="text/html"pageEncoding="UTF-8"%>
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>XXXXXXXXX</title>
</head>
<body>
<h1>這是一個JSP和HTML</h1>
</body>
</html>
把此jsp文件復制到Tomcat地址下的jspexample下(我的是D:\Apache Software Foundation\Tomcat7.0_SingerFive\webapps\examples\jsp\ jspTest.jsp),在浏覽器中輸入地址即可打開查看。
在第一行中運用了page指令。當浏覽器第一次請求JSP頁面時,容器首先會將該JSP文件編譯為Servlet類文件,然後容器將這個類加載到容器的虛擬機(Java Virtual Machine)中並運行這個Servlet類,最後將結果送到客戶端。
3、JSP的基本語法
JSP網頁本身是由特定JSP元素內嵌在HTML網頁中形成的。除了HTML變遷外,JSP提供了5中構建網頁內容時所需要的元素。
>指令(directive)
>聲明(declaration)
>程序代碼(scriptlet)
>表達式(expression)
>注釋(comments)
JSP指令用於設置和整個JSP頁面相關的屬性,如頁面的腳本語言、需要導入的Java包名以及頁面編碼的字符集等。JSP的語法如下:
<%@ 指令名屬性=”值”%>
JSP指令包括page、include和taglib3種指令。以後將會對JSP指令進行詳細介紹。
JSP聲明用於聲明該頁面的屬性和方法,聲明後的屬性和方法適用於JSP中的任何部分,相當於類中的成員方法和成員變量。其JSP語法如下:
<%! 聲明部分 %>
在下面的代碼中分別聲明了一個變量和一個方法:
<%!
int i = 1;
%>
<%!
void method{}
%>
JSP程序代碼時JSP中最常見的腳本元素,其實質是一段有效的Java語言代碼。JSP程序代碼包括在<%....%>之間。其JSP語法如下:
<% Java代碼 %>
以下代碼在客戶端輸出一些內容:
[html]
<%@pagecontentType="text/html" pageEncoding="UTF-8"%>
<%! int a=100; %>
<html>
<head>
<metahttp-equivmetahttp-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>XXXXXXXXX</title>
</head>
<body>
<h3>輸出從100到200之間的數</h3>
<%
for(int i = 0 ; i < 100 ; i++){
out.println(i+a +"<br>");
}
%>
</body>
</html>
<%@pagecontentType="text/html" pageEncoding="UTF-8"%>
<%! int a=100; %>
<html>
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>XXXXXXXXX</title>
</head>
<body>
<h3>輸出從100到200之間的數</h3>
<%
for(int i = 0 ; i < 100 ; i++){
out.println(i+a +"<br>");
}
%>
</body>
</html>
JSP表達式使用的標記對是<%=...%>,其所得的結果被轉化為字符串並顯示在頁面上。例如這段代碼就實現了簡單的劍法運算:
[html]
<%@pagecontentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>XXXXXXXXX</title>
</head>
<body>
<h3>運算:5-2 =<%=(5-2)%></h3>
</body>
</html>
<%@pagecontentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<title>XXXXXXXXX</title>
</head>
<body>
<h3>運算:5-2 =<%=(5-2)%></h3>
</body>
</html>
JSP注釋用來對程序代碼進行解釋和說明,常見的注釋包括顯示注釋和隱式注釋兩種。顯示注釋主要是指HTML文件的注釋,當請求包含顯示注釋的JSP頁面時,可以通過源代碼查看注釋。其語法如下:
<!—注釋內容 -->
例如: <body>
<h3>這是一個使用了顯示注釋的頁面</h3>
<!--在這裡注釋說明-->
</body>
顯示注釋在通過浏覽器查看源文件(HTML)時會看到,而隱式注釋是指包含在<%--...--%>之間的內容,隱式注釋在JSP頁面上時無法看到的,而且在HTML源文件中也是看不到的,其語法如下:
<%-- 注釋內容 --%>
· 下面的代碼中使用了隱式注釋,讀者可以通過這兩個例子的對比進一步理解這兩種注釋的區別:
<body>
<h3>這是一個使用了顯示注釋的頁面</h3>
<%-- 在這裡注釋說明 --%>
</body>
4、JSP指令
JSP指令用於設置和整個JSP頁面相關的屬性。JSP指令包括page、include和taglib3中指令。下面將對page指令和include指令元素進行詳細介紹。
1)、page指令
Page指令用來定義頁面的很多屬性,如腳本語言、編碼方式、導入的java包等。Page指令的語法如下:
[html]
<%@page
language="java"
session="true/false"
pageEncoding="characterSet"
isThreadSafe="true/false"
isErrorPage="true/false"
info="text"
import="package.class/package.*,...."
extends="package.class"
errorPage="relativeURL"
contentType="TYPE,charset=CHARSET"
buffer="none/8kb/sizekb"
autoFlush="true/false"
%>
<%@page
language="java"
session="true/false"
pageEncoding="characterSet"
isThreadSafe="true/false"
isErrorPage="true/false"
info="text"
import="package.class/package.*,...."
extends="package.class"
errorPage="relativeURL"
contentType="TYPE,charset=CHARSET"
buffer="none/8kb/sizekb"
autoFlush="true/false"
%>
這些屬性的說明下表所示:
屬性名
說明
舉例
Language
指定JSP頁面使用的腳本語言,目前只能使用Java
<%@page langage=”java”%>
Session
指定JSP是否使用session
<%@page session=”true”%>
pageEncoding
JSP頁面本身的編碼字符集
<%@page pageEncoding=”gb2312”%>
isErrorPage
指定該JSP文件是否顯示錯誤頁面
<%@page isErrorPage=”true”%>
isThreadSafe
指定JSP文件是否能夠使用多線程
<%@page isThreadSafe=”true”%>
Info
設置JSP頁面的信息
<%@page info=”字符串”%>
Import
指定引入的Java包
<%@page import=”java.util”%>
ErrorPage
指定出現異常時調用的頁面
<%@page errorPage=”erroe=r.jsp”%>
contentType
指定JSP頁面的文件格式與服務器發送給客戶端時的內容編碼字符集
<%@page contentType=”text/html;charset=GBK”%>
Buffer
指定JSP網頁的緩沖區大小
<%@page buffer=”32kb”%>
autoFlush
值為true,將數據輸出到客戶端
值為false,出現異常
<%@page autoFlush=”true”%>
在了解page指令的這些屬性後,下面給出一段使用頁面指令的代碼以加深理解:
[html]
<%@page
contentType="text/html ;charset=GBK"
pageEncoding="UTF-8"
import="java.util.*"
session="true"
buffer="32kb"
%>
<html>
<head>
<title>JSP的頁面指令</title>
</head>
<body>
<h3>這是一個有多個頁面指令的網頁</h3>
</body>
</html>
<%@page
contentType="text/html ;charset=GBK"
pageEncoding="UTF-8"
import="java.util.*"
session="true"
buffer="32kb"
%>
<html>
<head>
<title>JSP的頁面指令</title>
</head>
<body>
<h3>這是一個有多個頁面指令的網頁</h3>
</body>
</html>
2)、include指令
用來將文件插入到JSP網頁上,這些文件可以是文本文件、HTML文件或者JSP文件。該指令的語法如下,file是指所要加載的文件路徑。
<%@ include file=”文件的相對路徑”%>
下面的程序講解了如何使用include指令:
[html]
<%@ pagelanguage="java" import="java.util.*"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<%@includefile="test.html"%>
<html>
<head>
<title>test include</title>
</head>
<body>
<h3>這是一個測試include指令的頁面</h3>
</body>
</html>
<%@ pagelanguage="java" import="java.util.*"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<%@includefile="test.html"%>
<html>
<head>
<title>test include</title>
</head>
<body>
<h3>這是一個測試include指令的頁面</h3>
</body>
</html>
一般需要將經常使用的代碼寫在個別文件中,如果沒有include指令,那麼久必須在每個文件中寫入相同的代碼,這樣就會造成時間的浪費和效率的低下。有了include指令,就可以直接將其加載到目標頁面,這樣就大大節省了時間。