国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

動(dòng)態(tài)網(wǎng)頁編程:JSP入門學(xué)習(xí)教程

2024-09-05 00:20:00
字體:
供稿:網(wǎng)友

一、 什么是jsp

jsp(javaserver pages)是由sun microsystems公司倡導(dǎo)、許多公司參與一起建立的一種 動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn),其網(wǎng)址為http://www.javasoft.com/products/jsp。 在傳統(tǒng)的網(wǎng)頁html文件(*htm,*.html)中加入java程序片段(scriptlet)和jsp標(biāo)記(tag),就構(gòu)成了jsp網(wǎng)頁(*.jsp)。web服務(wù)器在遇到訪問jsp網(wǎng)頁的請求時(shí),首先執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以html格式返回給客戶。程序片段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁以及發(fā)送 email 等等,這就是建立動(dòng)態(tài)網(wǎng)站所需要的功能。所有程序操作都在服務(wù)器端執(zhí)行,網(wǎng)絡(luò)上傳送給客戶端的僅是得到的結(jié)果,對客戶瀏覽器的要求最低,可以實(shí)現(xiàn)無plugin,無activex,無java applet,甚至無frame。 本文將介紹利用jsp技術(shù)開發(fā)動(dòng)態(tài)網(wǎng)頁的方法,還將簡要分析jsp技術(shù)和 microsoft 公司的 asp 技術(shù)的不同之處。

二、 如何安裝和啟動(dòng)

為了實(shí)驗(yàn)jsp技術(shù),首先需要建立運(yùn)行環(huán)境,這個(gè)過程相當(dāng)簡單:

1、在 http://java.sun.com/jdk/處下載jdk(java 2 sdk、standard edition、v 1.2.2)。

2、在http://java.sun.com/products/jsp/處下載jswdk(javaserver web development kit 1.0.1)。linux用戶可以在ttp://jakarta.apache.org/處下載tomcat 3.0。

3、安裝 以windows nt環(huán)境為例,jdk的安裝是首先運(yùn)行下載得到的jdk1_2_2-win.exe,然后修改系統(tǒng)環(huán)境參數(shù),在path參數(shù)中加入[x:]/jdk1.2.2/bin以及增加新的環(huán)境參數(shù) classpath=[x:]/jdk1.2.2/lib/tools.jar,其中[x:]是安裝jdk的硬盤符(c:、d: 等)。 jswdk的安裝僅需將jswdk1_0_1-win.zip帶目錄釋放到硬盤根目錄下(c:/、d:/ 等),然后就可以在硬盤上找到/jswdk-1.0.1/目錄。將來如果不想保留jswdk,刪除這個(gè)目錄就可以了,沒有任何系統(tǒng)文件和注冊表遺留問題。更詳細(xì)的安裝過程以及solaris/unix和linux下jdk、tomcat的安裝可以參考下載得到的文件包中的安裝說明。

4、啟動(dòng) 以windows nt環(huán)境為例,在/jswdk-1.0.1/目錄下執(zhí)行startserver.bat,就可啟動(dòng)jswdk中一個(gè)支持jsp網(wǎng)頁技術(shù)的web服務(wù)器。為了不與現(xiàn)有的web服務(wù)器(例如iis、pws等)沖突,jswdk的web服務(wù)器使用了8080端口。 在瀏覽器的地址欄中鍵入http://localhost:8080或者h(yuǎn)ttp://127.0.0.1:8080后,如果能看到 jswdk 的歡迎頁就說明jsp實(shí)驗(yàn)環(huán)境已經(jīng)建成,可進(jìn)入下一步實(shí)驗(yàn)。 要關(guān)閉web服務(wù)器則運(yùn)行stopserver.bat。

三、 jsp簡單示例

jswdk中包含的web服務(wù)器的文檔目錄在缺省狀態(tài)下為/jswdk-1.0.1/webpages,主文檔在缺省狀態(tài)下為index.html和index.jsp。也就是說訪問http://localhost:8080等于訪問/jswdk-1.0.1/webpages/index.html。 用文本編輯器,如windows中的記事本(notepad),創(chuàng)建一個(gè)文本文件hi.jsp,保存在/jswdk-1.0.1/webpages/目錄下,其內(nèi)容如下:

<html>
<head>
<title>hi-jsp實(shí)驗(yàn)</title>
</head>
<body>
<%
string msg = "this jsp test.";
out.print("hello world!");
%>
<h2><%=msg%></h2>
</body>
</html>

在瀏覽器的地址欄中鍵入http://localhost:8080/hi.jsp,jswdk中的web服務(wù)器會(huì)執(zhí)行jsp 文件中用<%以及%>括起來的java程序語句,其中out.print是將文字輸出到網(wǎng)頁,語句<%= 變量 | 表達(dá)式 %>的作用是將java scriptlet中變量或表達(dá)式的值輸出到網(wǎng)頁,執(zhí)行結(jié)果如圖1。 圖1 將變量msg賦值為中文字符串,用<%= %>輸出,或者用out.print輸出中文字符串,則在英文版nt4及redhat 6.1下實(shí)驗(yàn)運(yùn)行結(jié)果正常,而在中文nt 4.0和中文98下,則反而會(huì)出現(xiàn)亂碼。

四、 統(tǒng)一的網(wǎng)站界面

jsp支持服務(wù)器端的文件包含,即可以在一個(gè)jsp文件中插入多個(gè)其他文件,用來實(shí)現(xiàn)統(tǒng)一的網(wǎng)站界面。修改上述hi.jsp并另存為mypage.jsp:

<%@ include file="top.htm" %>
<%
string msg = "this jsp test.";
out.print("hello world!");
%>
<h2><%=msg%></h2>
<%@ include file="bot.htm" %>

用可視化html編輯器,例如frontpage、dreamweave等設(shè)計(jì)網(wǎng)站的框架結(jié)構(gòu),將設(shè)計(jì)好的框架結(jié)構(gòu)文件分割成兩個(gè)部分,上面一半保存為top.htm, 下面一半保存為bot.htm,代碼如下面所示:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>我的主頁</title>
</head>
<body>
<table border="0" width="100%" cellpadding="4" cellspacing="0" align="center">
<tr>
<td width="100%" colspan="2" bgcolor="#837ed1" align="center"><font face="隸書"
color="#ffff00" size=5>主頁標(biāo)題</font>
</td>
</tr>
<tr>
<td bgcolor="#837ed1" width="15%" valign="top" align="center"><br>
<font color="#ffffff">選項(xiàng)</font><p><font color="#ffffff">選項(xiàng)</font></p>
<p><font color="#ffffff">選項(xiàng)</font></p>
<p><font color="#ffffff">......</font></p>
<p></p>
</td>
<td width="85%" valign="top">
----------------------------------------------------------------------------------------------------------------
</td>
</tr>
</table>
</body>
</html>

在瀏覽器的地址欄中鍵入http://localhost:8080/mypage.jsp,得到結(jié)果如圖2。 圖2 這樣網(wǎng)站的界面就能統(tǒng)一起來,而設(shè)計(jì)者可以集中精力在功能模塊上處理用戶登錄、連接數(shù)據(jù)庫、發(fā)送email等等。每個(gè)

jsp文件都有如下結(jié)構(gòu):

<%@ include file="top.htm" %>
<%
// 實(shí)現(xiàn)某些功能
%>
<%@ include file="bot.htm" %>

維護(hù)網(wǎng)站的界面也相對比較容易,只要修改top.htm和bot.htm,就能影響到所有網(wǎng)頁。

五、 服務(wù)器參數(shù)設(shè)置

jswdk的web服務(wù)器參數(shù)保存在/jswdk-1.0.1/webserver.xml中,用windows寫字板打開并編輯這個(gè)文件就可以修改缺省設(shè)置值。本節(jié)內(nèi)容主要針對jswdk,linux下tomcat的設(shè)置方法略有不同。 jswdk缺省的文檔目錄是/jswdk-1.0.1/webpages,在此目錄下可以建立子目錄,例如/jswdk-1.0.1/webpages/test,就能在瀏覽器中用http://localhost/test訪問這個(gè)目錄,為了使得這個(gè)子目錄能執(zhí)行jsp程序,還必須在webserver.xml中的<service></service>節(jié)加入:
<webapplication id="test" mapping="/test" docbase="webpages/test" />
并且,還必須建立/jswdk-1.0.1/webpages/test/web-inf目錄,并從/jswdk-1.0.1/webpages/web-inf目錄中復(fù)制過來以下四個(gè)文件:mappings.properties、mime.properties、servlets.properties以及webapp.properties。完成這些過程,才能通知jswdk的web服務(wù)器執(zhí)行http://localhost/test 中的jsp程序。

六、 javabean

jsp網(wǎng)頁吸引人的地方之一就是能結(jié)合javabean技術(shù)來擴(kuò)充網(wǎng)頁中程序的功能。 javabean是一種java類 (class),通過封裝屬性和方法成為具有某種功能或者處理某個(gè)業(yè)務(wù)的對象。javabean被組織成為package(數(shù)據(jù)包)以便進(jìn)行管理,實(shí)際上就是把一組javabean一起放在某某目錄中,每個(gè)類的定義前加上package某某,本例中為test。目錄test必須放在系統(tǒng)環(huán)境classpath包含的目錄下,系統(tǒng)才能找到其中的javabean。jswdk在缺省狀態(tài)下將/jswdk-1.0.1/webpages/web-inf/jsp/beans/ 加入classpath。建立自己的javabean和package時(shí),就放在這個(gè)目錄中也不失為一種簡易的方法。 下面介紹一個(gè)簡單的javabean框架。用文本編輯器創(chuàng)建一個(gè)文本文件helloworld.java,并保存在/jswd

k-1.0.1/webpages/web-inf/jsp/beans/test目錄下,其內(nèi)容如下:

package test;
public class helloworld {
public string name = "my first bean";
public string gethi()
{
return "hello from " + name;
}
}

helloworld.java編輯好后,在dos狀態(tài)下,進(jìn)入目錄/jswdk-1.0.1/webpages/web-inf/jsp/beans/,用jdk的javac命令編譯helloworld.java如下:

javac helloworld.java

注意,java是區(qū)分大小寫的,在程序中,編譯命令行中字母的大小寫都不能寫錯(cuò)。 編譯成功就表示建立了一個(gè)javabean。下面看如何在jsp中使用這個(gè)javabean。用文本編輯器創(chuàng)建一個(gè)文本文件hi-bean.jsp,并保存在/jswdk-1.0.1/webpages/test目錄下,其內(nèi)容如下:

<html>
<head>
<title>javabean 試驗(yàn)</title>
</head>
<body>
<jsp:usebean id="hellobean" scope="session" class="test.helloworld" />
<%= hellobean.gethi() %>
<hr>
<%
hellobean.name = "jsp";
out.print(hellobean.gethi());
%>
</body>
</html>

在jsp網(wǎng)頁中,使用 <jsp:usebean ... />語法來創(chuàng)建javabean對象,并命名為hellobean。讀者可從這個(gè)簡單的例子中看出設(shè)置、獲取javabean屬性,以及調(diào)用javabean方法的做法。在瀏覽器的地址欄中鍵入http://localhost:8080/test/hi-bean.jsp,得到結(jié)果如圖3所示。 注意,如果修改和重新編譯了javabean程序,則需要關(guān)閉和重新啟動(dòng)jswdk的web服務(wù)器以后修改的結(jié)果才會(huì)有效。如果僅僅修改jsp文件,則不用重新啟動(dòng)jswdk的web服務(wù)器. 雖然,這僅僅完成了一個(gè)非常簡單的javabean框架,但是遵循這個(gè)框架可以設(shè)計(jì)出多種多樣的javabean。例如,從jsp中訪問數(shù)據(jù)通常就是通過javabean來實(shí)現(xiàn)的。

七、 數(shù)據(jù)庫連接

數(shù)據(jù)庫連接對動(dòng)態(tài)網(wǎng)站來說是最為重要的部分,java中連接數(shù)據(jù)庫的技術(shù)是jdbc(java database connectivity)。很多數(shù)據(jù)庫系統(tǒng)帶有jdbc驅(qū)動(dòng)程序,java程序就通過jdbc驅(qū)動(dòng)程序與數(shù)據(jù)庫相連,執(zhí)行查詢、提取數(shù)據(jù)等等操作。sun公司還開發(fā)了jdbc-odbc bridge,用此技術(shù)java程序就可以訪問帶有odbc驅(qū)動(dòng)程序的數(shù)據(jù)庫,目前大多數(shù)數(shù)據(jù)庫系統(tǒng)都帶有odbc驅(qū)動(dòng)程序,所以java程序能訪問諸如oracle、sybase、ms sql server和ms access等數(shù)據(jù)庫。下面介紹如何用access實(shí)現(xiàn)一個(gè)動(dòng)態(tài)faq(常見問題及答案)網(wǎng)站。

首先建立一個(gè)access數(shù)據(jù)庫faq.mdb,其中的表faqs有字段id(自動(dòng)增量型,并設(shè)為主關(guān)鍵字)、subject(文字型,長度200)、answers(備注型)。這個(gè)表中可以存放一些編程知識的常見問題及答案,

如圖4。

圖 4

然后,在control panel(控制面板)的odbc datasource模塊中加入system dsn,取名faq,并指向faq.mdb。

創(chuàng)建一個(gè)javabean,名為faq.java,并保存在/jswdk-1.0.1/webpages/web-inf/jsp/beans/test目錄下。faq.java 的內(nèi)容如下:

package test;
import java.sql.*;
public class faq {
string sdbdriver = "sun.jdbc.odbc.jdbcodbcdriver";
string sconnstr = "jdbc:odbc:faq";
connection conn = null;
resultset rs = null;
public faq() {
try {
class.forname(sdbdriver);
}
catch(java.lang.classnotfoundexception e) {
system.err.println("faq(): " + e.getmessage());
}
}
public resultset executequery(string sql) {
rs = null;
try {
conn = drivermanager.getconnection(sconnstr);
statement stmt = conn.createstatement();
rs = stmt.executequery(sql);
}
catch(sqlexception ex) {
system.err.println("aq.executequery: " + ex.getmessage());
}
return rs;
}
}

用上一節(jié)介紹的方法編譯faq.java以后,在/jswdk-1.0.1/webpages/test目錄下創(chuàng)建jsp文件faq.jsp,其內(nèi)容如下:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>我的faq !</title>
</head>
<body>
<p><b>這是我的faq!</b></p>
<%@ page language="java" import="java.sql.*" %>
<jsp:usebean id="workm" scope="page" class="test.faq" />
<%
resultset rs = workm.executequery("select * from faqs");
string tt;
while (rs.next()) {
tt = rs.getstring("answer");
out.print("<li>" + rs.getstring("subject") + "</li>");
out.print("<pre>" + tt + "</pre>");
}
rs.close();
%>

在瀏覽器的地址欄中鍵入http://localhost:8080/test/faq.jsp,faq.jsp調(diào)用javabean,從數(shù)據(jù)庫中讀出內(nèi)容并輸出,得到結(jié)果如圖5所示. 限于篇幅,本文不能列舉jsp-javabean-jdbc/odbc-數(shù)據(jù)庫的復(fù)雜例子,讀者可以從本文最后所推薦的網(wǎng)址中找到并下載到數(shù)據(jù)庫連接范例。

八、 技術(shù)分析

microsoft 公司的 asp 技術(shù)也是動(dòng)態(tài)網(wǎng)頁開發(fā)技術(shù)。jsp和asp從形式上非常相似,asp程序員一眼就能認(rèn)出<% %>以及<%= %>。但是深入探究下去會(huì)發(fā)現(xiàn)它們很多的差別,其中最主要的有以下三點(diǎn):

1、 jsp的效率和安全性更高

asp以源碼形式存放,以解釋方式運(yùn)行,每次asp網(wǎng)頁調(diào)用都需要對源碼進(jìn)行解釋,運(yùn)行效率不高。另外,iis的漏洞曾使得許多網(wǎng)站源程序大曝光,包括筆者以前用asp開發(fā)的網(wǎng)站,asp程序全部被人下載了去。 jsp在執(zhí)行以前先被編譯成字節(jié)碼 (bytecode),字節(jié)碼由java虛擬機(jī)(java virtual machine)解釋執(zhí)行,比源碼解釋的效率高;服務(wù)器上還有字節(jié)碼的cache機(jī)制,能提高字節(jié)碼的訪問效率。第一次調(diào)用jsp網(wǎng)頁可能稍慢,因?yàn)樗痪幾g成cache,以后就快得多了。同時(shí),jsp源程序不大可能被下載,特別是

javabean程序完全可以放到不對外的目錄中。

2、 jsp的組件 (component) 方式更方便 asp通過com來擴(kuò)充復(fù)雜的功能,如文件上載、發(fā)送email以及將業(yè)務(wù)處理或者復(fù)雜計(jì)算分離出來成為獨(dú)立可重復(fù)利用的模塊。jsp通過javabean實(shí)現(xiàn)了同樣的功能擴(kuò)充。 在開發(fā)方面,com的開發(fā)遠(yuǎn)比javabean復(fù)雜和繁瑣,學(xué)會(huì)asp不難,但學(xué)會(huì)開發(fā)com可不簡單。而javabean就簡單多了,從本文上述示例中可以看出開發(fā)javabean很方便。 在維護(hù)方面,com必須在服務(wù)器上注冊,如果修改了com程序,就必須重新注冊,甚至必須關(guān)機(jī)和重新啟動(dòng)。javabean則不需要注冊,放在classpath包含的目錄中就行了。如果javabean進(jìn)行了修改,則jswdk和tomcat現(xiàn)在還需要關(guān)閉和重新運(yùn)行(但不是關(guān)機(jī)),但開發(fā)者已經(jīng)許諾將在以后的版本中做到不需要關(guān)閉服務(wù)器。 另外javabean是完全的oop,可以針對不同的業(yè)務(wù)處理功能方便地建立一整套可重復(fù)利用的對象庫,例如用戶權(quán)限控制、email自動(dòng)回復(fù)等等。

3、 jsp的適應(yīng)平臺更廣

asp目前僅適用于nt和iis。雖然unix下有chilisoft的插件來支持asp,但是asp本身的功能有限,必須通過asp+com的組合來擴(kuò)充,unix下的com實(shí)現(xiàn)起來非常困難。 jsp則不同,幾乎所有平臺都支持java,jsp+javabean可以在所有平臺下通行無阻。nt下iis通過一個(gè)插件,例如jrun(http://www3.allaire.com/products/jrun/)或者servletexec(http://www.newatlanta.

com/),就能支持jsp。著名的web服務(wù)器apache已經(jīng)能夠支持jsp。由于apache廣泛應(yīng)用在nt、unix和linux上,因此jsp有更廣泛的運(yùn)行平臺。雖然現(xiàn)在nt操作系統(tǒng)占了很大的市場份額,但是在服務(wù)器方面unix的優(yōu)勢仍然很大,而新崛起的linux更是來勢不小。 從一個(gè)平臺移植到另外一個(gè)平臺,jsp和javabean甚至不用重新編譯,因?yàn)閖ava字節(jié)碼都是標(biāo)準(zhǔn)的與平臺無關(guān)的。筆者將在nt下實(shí)驗(yàn)的jsp網(wǎng)頁原封不動(dòng)地拿到linux下就運(yùn)行起來了,感覺非常滿意。

九、 結(jié)論

綜上所述,jsp可謂是構(gòu)建動(dòng)態(tài)網(wǎng)站的一個(gè)利器,故推薦給讀者,祝愿你們掌握jsp,開發(fā)出優(yōu)秀的網(wǎng)站。asp程序員也請?jiān)囈幌拢琷sp里也有session、request、response/out等對象,親自試試看如何。

附文

這里是關(guān)于jsp的重要參考資料,有興趣的讀者可以進(jìn)一步閱讀。

http://java.sun.com/products/jsp/faq.html

http://www.esperanto.org.nz/jsp/jspfaq.html

http://www.zdnet.com/pcweek/stories/news/0,4153,410709,00.html

http://developer.netscape.com/viewsource/kuslich_jsp

/kuslich_jsp.html

http://web2.java.sun.com/products/jsp/jsp-asp.html

http://www.asptoday.com/articles/19991022.htm

歡迎光臨www.dukejava.com!

javaserver pages (jsp)是基于java的技術(shù),用于創(chuàng)建可支持跨平臺及跨web服務(wù)器的動(dòng)態(tài)網(wǎng)頁。 jsp可與微軟的active server pages (asp)相媲美,但jsp使用的是類似于html的標(biāo)記和java 代碼片段而不是用vbscript。當(dāng)你使用不提供asp本地支持的web服務(wù)器(例如 apache或netscape服務(wù)器)時(shí),你就可以考慮使用jsp了。你雖然也可以為這些服務(wù)器弄一個(gè)asp附加軟件模塊,但是太昂貴了。現(xiàn)在sun公司并不會(huì)因你使用jsp向你收費(fèi)(雖然將來可能要收),況且用于solaris、 linux以及windows系統(tǒng)的組件都很容易獲得。 不要把jsp與服務(wù)器端的javascript語言搞混了。web服務(wù)器自動(dòng)將通過jsp生成的java代碼片段轉(zhuǎn)換成java 片段(servlets)。 jsp也可自動(dòng)控制許多功能,如過去用perl腳本編寫功能程序或像asp這樣的服務(wù)器專用api(應(yīng)用編程接口).我們馬上就要開始幫助你建立一個(gè)使用jsp 技術(shù)的網(wǎng)站范例了。

準(zhǔn)備好計(jì)算機(jī)以使用jsp 你需要java2軟件開發(fā)工具箱(j2sdk),過去稱之為java開發(fā)工具箱(jdk)、javaserver 網(wǎng)絡(luò)開發(fā)工具箱(jswdk)、tomcat,或者其它能支持jsp的web服務(wù)器。升陽公司為windows、solaris以及 linux平臺提供免費(fèi)的j2sdk和jswdk。 如果你想在現(xiàn)有的web服務(wù)器上使用jsp,而此服務(wù)器本身不支持jsp和java 代碼片段,可以試用allaire公司的jrun。它可以為netscape的enterprise server和fasttrack server、微軟的internet information server(iis)和personal webserver(pws)、apache以及其他服務(wù)器充當(dāng)web服務(wù)器附件。你也可以使用apache服務(wù)器的java版,其中包含最新的jswdk。 下載并安裝所需的軟件 目前,版本號為1.2.2-001的j2sdk可下載版以可安裝的歸檔文件形式出現(xiàn)。這個(gè)大約20mb的下載量軟件可提供一個(gè)徹底的java開發(fā)環(huán)境,讓你創(chuàng)造任何基于java并且利用了而標(biāo)準(zhǔn)核心api的解決方案。其實(shí),你的web服務(wù)器使用jsp的唯一條件是要有java編輯器。要讓web服務(wù)器知道編輯器的位置,需要java_home 環(huán)境變量設(shè)置為j2sdk安裝目錄。如果你已經(jīng)在windows系統(tǒng)中進(jìn)行了安裝并且接受了默認(rèn)目錄, 請將“set java_home=c:/1.2.2”添加到你的“autoexec.bat”文件中,然后重新啟動(dòng)。 安裝j2sdk后,下載并安裝jswdk或者是tomcat β版,即基于java的apache web服務(wù)器的β版。你把jswdk放在什么地方是無關(guān)緊要的,只要你以后能找到它就行。通常,將其放在頂層目錄中,這樣你在替換jswdk或jsdk時(shí)無需刪除另一個(gè)軟件。安裝好這個(gè)文件后,準(zhǔn)備工作已經(jīng)就緒,你可以開始jsp開發(fā)工作了。 正確地安裝jswdk后,請運(yùn)行“startserver”腳本程序,以啟動(dòng)web服務(wù)器,使其按照默認(rèn)情況監(jiān)聽8080端口。你要在啟動(dòng)服務(wù)器之后查看您是否已正確地安裝了此工具,請加載一個(gè)jsp樣本文件(http://locahost:8080/examples/jsp/)。如果你能成功地運(yùn)行這些樣本文件,說明你已經(jīng)正確地安裝了這個(gè)軟件。如果你在用來啟動(dòng)服務(wù)器的控制臺窗口中看到報(bào)錯(cuò)信息,你就需要做些修改。最經(jīng)常發(fā)生的問題是沒有設(shè)置或不正確地設(shè)置了java_home環(huán)境變量。要看到當(dāng)前環(huán)境變量設(shè)置情況,要請?jiān)赿os提示符下鍵入“set”設(shè)置。 開始 在解釋 jsp語法前,創(chuàng)建一個(gè)快捷網(wǎng)頁,顯示目當(dāng)前的日期和時(shí)間,并然后將之其保存為sample.jsp:

<html>
<head>
<title>first page</title>
</head>
<body>
<h3>today is:
<%= new java.util.date() %>
</h3>
</body>
</html>.

把這個(gè)文件以及你所有的html 和 jsp 頁面放在jswdk安裝目錄下的網(wǎng)頁目錄里。你可以從http://localhost:8080/sample.jsp加載此網(wǎng)頁。該網(wǎng)頁首次被訪問時(shí),web服務(wù)器會(huì)把jsp編譯成java代碼片段,這樣你就能夠看到當(dāng)前的日期和時(shí)間了。 你已經(jīng)下載、安裝并配置好了開發(fā)環(huán)境,你可以開始學(xué)習(xí)jsp語法并創(chuàng)建自己的基于jsp的解決方案了。

jsp基本語法

講完安裝問題后,現(xiàn)在進(jìn)入來討論jsp語法。一個(gè)投機(jī)取巧的辦法是下載語法卡片。如果你不熟悉java編程,也許你想看一下sun的指南 。然而網(wǎng)頁創(chuàng)建者并不需要進(jìn)行太多的java開發(fā)。除了一些方法調(diào)用,在你的jsp網(wǎng)頁里應(yīng)盡可能少用java代碼。 記住以上提示,我們首先來看一看jsp指令和腳本元素,之后我們會(huì)解釋javabeans和隱含對象。共有五種jsp指令和腳本元素。在jsp 1.0版中,大部分jsp被一個(gè)以“<%” 開頭和以“%>”結(jié)尾的的標(biāo)記括在其中。在更新的jsp 1.1規(guī)范出臺后,就有了與xml兼容的版本。 jsp指令和腳本元素

directives <%@ directive %>
declarations <%! declaration %>
expressions <%= expression %>
code fragment/scriptlet <% code fragment %>
comments <%-- comment --%>

指令

jsp指令是為jsp引擎而設(shè)計(jì)的。他們并不直接產(chǎn)生任何可見輸出,而只是告訴引擎如何處理其余jsp頁面。這些指令始終被括在 “<%@ ?%>”標(biāo)記中。兩個(gè)最重要的指令是“pagepage”和“include”。“taglib”指令不在討論之列,但是在用jsp1.1創(chuàng)建自定義標(biāo)記可以使用它。 幾乎在所有jsp頁面頂部都會(huì)看到“page”指令。盡管不是必須的,但它可以讓你指定: 到何處查找起支持作用的java類別:

<%@ page import="java.util.date" %>,

出現(xiàn)java運(yùn)行問題時(shí),將網(wǎng)上沖浪者引向何處:

<%@ page errorpage="errorpage.jsp" %>,

還有你是否需要管理用戶的會(huì)話級信息,這些信息可能來自多個(gè)網(wǎng)頁(在下面的javabeans一節(jié)將對此做進(jìn)一步講)述:

<%@ page session="true" %>.

“include”指令可以把你的內(nèi)容分成更多可管理的元素,比如包括一個(gè)普通頁面頁眉或頁腳的元素。包含的網(wǎng)頁可以是一個(gè)固定的html 頁面或更多的jsp內(nèi)容:

<%@ include file="filename.jsp" %>

聲明

jsp聲明用來讓你定義頁面級變量,以保存信息或定義jsp頁面的其余部分可能需要的支持方法。如果你發(fā)現(xiàn)代碼太多,通常最好把它們寫成一個(gè)獨(dú)立的java類別。聲明一般都在“<%! ?%>”標(biāo)記中。一定要以分號(;)結(jié)束變量聲明,因?yàn)槿魏蝺?nèi)容都必須是有效的java語句:

<%! int i=0; %>。

表達(dá)式

有了jsp表達(dá)式,表達(dá)式評估結(jié)果會(huì)被轉(zhuǎn)換成一個(gè)字符串,并且被直接包括在輸出頁面之內(nèi)。jsp 表達(dá)式包含在“<%= ?%>” 標(biāo)記中,沒有分號,除非在加引號的字符串部分使用分號。

<%= i %>
<%= "hello" %> .

代碼片段/腳本片段

代碼片段/腳本片段(scriptlets) jsp代碼片段或腳本片段是嵌在“<% ?%>”標(biāo)記中的。這種java代碼在web服務(wù)器響應(yīng)請求時(shí)就會(huì)運(yùn)行。在腳本片段周圍可能是原始的html或xml語句,在這些地方,代碼片段可以使你創(chuàng)建條件執(zhí)行代碼,或要用到另外一段代碼的代碼。例如,以下的代碼組合使用表達(dá)式和代碼片段,顯示h1、h2、h3和h4標(biāo)記中的字符串“hello”。代碼片段并不局限于一行源代碼:

<% for (int i=1; i<=4; i++) { %>
<h<%=i%>>hello</h<%=i%>>
<% } %>.

注釋

最后一個(gè)主要的jsp元素是嵌入式注釋。盡管你始終可以在文件中加入html注釋,但用戶在查看頁面源代碼時(shí)會(huì)看到這些注釋。如果你不想讓用戶看到它,你就應(yīng)該將其嵌入“<%-- ?--%>” 標(biāo)記中:

<%-- comment for server side only --%>.
帶javabean 的jsp 雖然你可以把大段的代碼放在腳本片段(scriptlet)內(nèi),但是絕大多數(shù)的java代碼屬于可重復(fù)使用的名為javabea的組件。javabean類似于activex控件:他們都能提供常用功能并且可以重復(fù)使用。 javabean的值是通過一些屬性獲得的,你可通過這些屬性訪問javabean設(shè)置。以一個(gè)人來打比方,這個(gè)人就是一個(gè)javabean,這個(gè)人的名字、身份證號碼以及住址就是其屬性。在jsp網(wǎng)站,你基本上就是通過玩“connect the beans)”來使你的網(wǎng)站動(dòng)態(tài)化。 假設(shè)javabean先于網(wǎng)站被創(chuàng)建出來,你需要做的第一件事就是告訴jsp頁面它將要用到一個(gè)“bean”。你可以用“<jsp:usebean>”標(biāo)記來做到這一點(diǎn):

<jsp:usebean id="localname" class="com.jguru.person" scope="application" />。
“<jsp:usebean>”標(biāo)記要求你用“id”屬性來識鑒別bean。這里你提供一個(gè)名字來jsp頁面其余部分的bean。除了“id”屬性,你還須告訴網(wǎng)頁面從何處查找bean,或者它的java類別名是什么。這種類別屬性提供確認(rèn)bean的功能,其他一些方法也可以做到這一點(diǎn)。最后一個(gè)必需的元素是“scope”屬性。有了“scope”屬性的幫助,你就能告訴bean為單一頁面(默認(rèn)情況)[scope="page"]、為[scope="request"]請求為會(huì)話[scope="session"],或者為整個(gè)應(yīng)用程序[scope="application"]保持留信息。有了會(huì)話范圍,你就能非常容易地在jsp網(wǎng)頁面上維護(hù)購物車等項(xiàng)目。 一旦你聲名了一個(gè)javabean,你就可以訪問它的屬性來定制它。要獲得屬性值,請用“<jsp:getproperty>”標(biāo)記。有了這個(gè)標(biāo)記,你就能指定將要用到的bean名稱(從usebean的"id"字段得到)以及你想得到其值的屬性。實(shí)際的值被放在輸出中:

<jsp:getproperty id="localname" property="name" />。

要改變javabean屬性,你必須使用“<jsp:setproperty>”標(biāo)記。對這個(gè)標(biāo)記,你需要再次識別bean和屬性,以修改并額外提供新值。如果命名正確,這些值可以從一個(gè)已提交的表中直接獲得:參數(shù)獲得:

<jsp:setproperty id="localname" property="*" />;

可以從一個(gè)參數(shù)獲得,但你必須直接命名屬性和參數(shù):

<jsp:setproperty id="localname" property="serialnumber" value="string" />

或者直接用一個(gè)名字稱和值來設(shè)置:

<jsp:setproperty id="localname" property="serialnumber" value= <%= expression %> .

關(guān)于javabean 的最后一件事: 為了web服務(wù)器能找到j(luò)avabean,你需要將其類別文件放在一個(gè)特殊位置。用jswdk,最 方便的位置是安裝目錄下的類別目錄,如/jswdk-1.0.1/classes。

jsp隱含對象

與jsp語法相關(guān)的最后的元素是一些叫做“隱含對象”的東西。在jsp代碼片段中,你可以利用這些隱含對象與jsp頁面的代碼片段執(zhí)行環(huán)境產(chǎn)生互動(dòng)。應(yīng)盡量少訪問這些內(nèi)置隱含對象。但是,在一某些情況下,訪問隱含對象是可被接受的。若要充分利用隱含對象,就需了解最新的java servlet api。 下表列出可用的隱含對象集合。

隱含對象說明

request 客戶端請求,包括從get/post請求傳遞過來的參數(shù)

response 網(wǎng)頁傳回客戶端的反應(yīng)

pagecontext 在此管理網(wǎng)頁屬性

session 與請求關(guān)聯(lián)的會(huì)話

application 代碼片段的運(yùn)行環(huán)境

out 傳送響應(yīng)的輸出流

config 代碼片段配置對象

page jsp網(wǎng)頁本身

exception 有錯(cuò)的網(wǎng)頁中未被捕獲的例外

這些都是用來做什么的,你又如何來使用它們呢?基本上說,在你的腳本片段里,你可以用它們進(jìn)入執(zhí)行jsp代碼的代碼片段。用不著深入了解太多的servlet api細(xì)節(jié),我們來看看能用它們來做到的某些事情: 你可以不用表達(dá)式,直接進(jìn)入“out”隱含對象,將某些內(nèi)容輸出到響應(yīng)中:

<% out.println("hello"); %>。

用不著把一個(gè)參數(shù)直接送到j(luò)avabean,你可以從請求對象獲取參數(shù)值:

<% string name=request.getparameter("name"); out.println(name); %>.

在你用jsp進(jìn)行開發(fā)的過程中,進(jìn)行更多的開發(fā)的過程中,如果創(chuàng)建了javabeans或發(fā)現(xiàn)jsp文件中加入了太多的java源代碼,你就需要?jiǎng)?chuàng)建起支持作用的java分類(class)了,它可以協(xié)助你重復(fù)利用源代碼并減少jsp網(wǎng)頁編譯時(shí)間。當(dāng)你需要?jiǎng)?chuàng)建java分類文件時(shí),你必須: 將jdswk installation/bin目錄添加到path中。在autoexec.bat文件path行的末尾,加入“c:1.2.2/bin”。

用這個(gè)命令將jar文件復(fù)制到“/jre/lib/ext:”目錄中: copy c:/jswdk-1.0.1/lib/servlet.jar

c:/jdk1.2.2/jre/lib/ext.

創(chuàng)建一個(gè)jsp網(wǎng)站

現(xiàn)在該是把所有這些jsp語法派上用場的時(shí)候了。我們將創(chuàng)建一個(gè)網(wǎng)頁,它有一個(gè)輸入表單,可以使用戶輸入一個(gè)股票代號以獲得出當(dāng)前股價(jià)(有20分鐘)。如果輸入有誤,則顯示報(bào)錯(cuò)網(wǎng)頁。

quote.jsp

首先,用 這個(gè)代碼 創(chuàng)建一個(gè)quote.jsp網(wǎng)頁并將其保存在jswdk安裝目錄下的網(wǎng)頁目錄中。大多數(shù)的網(wǎng)頁是標(biāo)準(zhǔn)的html,其間散布著jsp代碼。第六行是一個(gè)網(wǎng)頁指示,表示將把所有錯(cuò)誤發(fā)送到“errorpage.jsp”文中。第13到15行是一個(gè)腳本片段,主要說明只有提供“符號”參數(shù)才會(huì)顯示表格。“if”代碼段在

32到34行結(jié)束。第17行定義了要用的javabean,第18行從參數(shù)加載javabean的符號屬性。第27行到29行顯示bean的屬性。除了"if "代碼段,實(shí)際上并不涉及其它java代碼。

errorpage.jsp

下一步,將下列jsp源代碼保存到網(wǎng)頁目錄中的“errorpage.jsp”文件中。“這是一個(gè)錯(cuò)誤網(wǎng)頁”的提示為第一行,它將iserrorpage網(wǎng)頁提示屬性設(shè)置為真。上一頁說了明錯(cuò)誤網(wǎng)頁的位置,本頁則說明這就是錯(cuò)誤網(wǎng)頁。其它jsp文件中的jsp專用代碼只有訪問隱含例外對象才用到。網(wǎng)頁只顯示其值:

<%@ page iserrorpage="true" %>
<html>
<head>
<title>error page</title>
</head>
<body>
<h1>our error page</h1></font>
<!-- print exception -->
we got ourselves an exception:
<%= exception %>
<a href="quote.jsp">restart</a>
</body>
</html>。
quotes.java
quotes javabean
利用yahoo資源來獲得股票價(jià)格。需要將此 資源保存到j(luò)swdk安裝目錄下“classes/com/jguru”目錄中的“quotes.java”文件中。請?jiān)诖擞胘sdk中的javac編輯器來編輯它。

你的第一個(gè)jsp網(wǎng)頁。

創(chuàng)建了這兩個(gè)jsp文件,建立了javabean資源文件并編輯了它后,你就可以從http://localhost:8080/quote.jsp加載“quote.jsp”文件以查看結(jié)果,假設(shè)你沒有更改jswdk安裝設(shè)置,轉(zhuǎn)而使用別的端口。這個(gè)網(wǎng)頁當(dāng)然能做得更漂亮,但是它已實(shí)現(xiàn)了需要實(shí)現(xiàn)的功能,并且很好地展示了jsp的功能。

  • 本文來源于網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 自贡市| 陆川县| 清河县| 浮山县| 怀柔区| 茶陵县| 延安市| 鄂托克前旗| 柘城县| 永寿县| 板桥市| 外汇| 耒阳市| 承德县| 长阳| 兴义市| 岑溪市| 平邑县| 清水河县| 会宁县| 定安县| 南涧| 昌乐县| 隆昌县| 湟源县| 黄梅县| 焉耆| 桑日县| 安新县| 克什克腾旗| 渝中区| 西平县| 抚顺市| 苗栗县| 彭泽县| 晋宁县| 台南县| 尼玛县| 堆龙德庆县| 丰原市| 岳池县|