JSP簡(jiǎn)明教程:令人興奮的腳本編程
更新時(shí)間:2006年10月13日 00:00:00 作者:
如果你是直接使用Java servlets,那你將不得不在Java類中處理HTTP輸入和HTML輸出,你需要豐富的Java編程經(jīng)驗(yàn)來構(gòu)建復(fù)雜的應(yīng)用程序。JSP的加入,使你可以把HTML的表達(dá)邏輯從植入servlets中的復(fù)雜的商務(wù)邏輯區(qū)分開來。這意味著可以由有經(jīng)驗(yàn)的腳本編寫者來編寫表達(dá)層代碼,而高級(jí)的Java開發(fā)者能夠集中精力去解決servlets和bean中更為復(fù)雜的問題。
不管你有沒有Java編程知識(shí),都能夠使用JSP。JSP包含了一些服務(wù)器端的標(biāo)簽,使得不用寫一行Java代碼就能顯示動(dòng)態(tài)數(shù)據(jù)。你可以直接訪問bean來完成操作,然后使用JSP標(biāo)簽把結(jié)果顯示為動(dòng)態(tài)內(nèi)容。你還可以用servlets生成bean,servlets 操作的運(yùn)算結(jié)果存于其中,然后再使用JSP標(biāo)簽顯示結(jié)果,同樣不需要在JSP頁中寫Java代碼。
有三種方式可以用來在你的網(wǎng)頁中加入Java代碼:
1、使用declarations(聲明),可以定義全局變量或是在頁內(nèi)任何地方都可以訪問的Java方法。聲明被包含在標(biāo)記<%!...%>中。
2、使用scriptlets(腳本片斷),你能書寫頁內(nèi)處理所需的任何邏輯,它們包含在<%...%>標(biāo)記內(nèi)。
3、Expressions(表達(dá)式),包含于<%=...%>中。它提供一種簡(jiǎn)單的方法來顯示Java表達(dá)式的結(jié)果。被附加上的表達(dá)式將被計(jì)算并在頁面上顯示出來,就好像你已經(jīng)在代碼中明確寫出了運(yùn)算結(jié)果的數(shù)值一樣。
在你自己編寫的代碼中,可以使用一些隱含變量(implicit variables)――JSP提供的預(yù)定義的Java對(duì)象。另外,通過使用JSP的指令(directives), 還可以包含非Java代碼模塊,比如來自其他文件的HTML文本。
下面我們來仔細(xì)看一看這些腳本元素,在編寫你自己的JSP腳本時(shí)將會(huì)經(jīng)常用到它們。
Directives(指令)
JSP定義了三個(gè)頁內(nèi)指令用于設(shè)置JSP參數(shù)或擴(kuò)充代碼。它們是 page,include和taglib,必須寫在JSP頁的第一行。語法如下:
<%@ directive attribute="value" ... %>
page指令允許你為網(wǎng)頁設(shè)定一些基本參數(shù),包括設(shè)置所用腳本語言的參數(shù)(默認(rèn)為Java)、你的腳本片斷中引入的Java類、設(shè)置輸出緩沖區(qū)等等。完整的page指令參數(shù)表見《JSP Specification Version 1.0》(《JSP規(guī)范1.0》)的2.8.1章。
使用include指令,可以包含其他文件的內(nèi)容,比如存于單獨(dú)文件中的HTML報(bào)頭和頁腳。
taglib指令用于擴(kuò)充標(biāo)準(zhǔn)的JSP標(biāo)簽集,這超出了本文的討論范圍。然而,了解JSP定義了一種擴(kuò)充其標(biāo)簽集的方法還是很有好處的,當(dāng)你是一個(gè)軟件商,想擴(kuò)充JSP的原始功能而又不想破壞其兼容性時(shí),這一點(diǎn)尤為重要。
Declarations(聲明)
使用declarations,你可以在JSP頁中定義方法或變量,它們可被同一頁中的其他代碼訪問。在大多數(shù)情況下,你可能會(huì)在自己的bean中定義方法。然而,有時(shí)候在網(wǎng)頁內(nèi)定義方法可能更方便一些,尤其是當(dāng)代碼只用于單一頁面時(shí)。不論定義方法還是變量,聲明都包含在<%! %>標(biāo)記內(nèi)。
注意,聲明并不在JSP頁內(nèi)產(chǎn)生任何輸出。它們僅僅用于定義,而不生成輸出結(jié)果。要生成輸出結(jié)果,你應(yīng)該用JSP表達(dá)式或腳本片斷。
Expressions(表達(dá)式)
Expressions是一種非常簡(jiǎn)單的JSP標(biāo)簽,它用來把在<%= %>中定義的JSP表達(dá)式的值轉(zhuǎn)換成字串并將這個(gè)值以動(dòng)態(tài)文本的形式送出。Expression的確是一條生成文本的捷徑,有了它,你不必在每次要顯示一段動(dòng)態(tài)文本的時(shí)候都去調(diào)用print()方法。典型的應(yīng)用就是,你可以用expressions顯示簡(jiǎn)單的變量值或bean中的方法的返回值。
例如,下面的代碼將會(huì)生成getName()方法的返回值:
<H2>Welcome, <%= mybean.getName() %></H2>
事實(shí)上,在生成動(dòng)態(tài)輸出之前,JSP必須把方法的返回值轉(zhuǎn)變?yōu)镴ava中的String對(duì)象。JSP規(guī)范中詳細(xì)描述了在JSP表達(dá)式中,什么樣的Java類型和Java類會(huì)被轉(zhuǎn)變成字串。
Scriptlets(腳本片斷)
到現(xiàn)在為止你已經(jīng)學(xué)會(huì)了使用指令來引入任何Java類或Java包,你能定義頁面級(jí)的方法或變量并在頁中使用它們,你還可以使用提供普通web處理功能的隱含變量。還能在JSP頁內(nèi)做些什么就取決于你了,因?yàn)槟憧梢栽趕criptlets(腳本片斷)里編寫任何你想要的Java代碼,如下所示:
<% ...code... %>
通過在page指令中使用IMPORT參數(shù),你可以從腳本片斷內(nèi)調(diào)用所有Java API。因?yàn)槟銓懙乃蠮SP代碼實(shí)際上都被編譯構(gòu)成Java servlet,它本身就是一個(gè)Java類,所以你所用的語言本身就是Java,而不是任何一種修改或整理過的版本。這就像在SSJS中你可以編寫任何代碼一樣。而與SSJS不同,在JSP中你有權(quán)使用整套豐富的Java API,因此幾乎沒有任何局限性。
Implicit Variables(隱含變量)
前面提到過,JSP定義了一些隱含變量(即Java 對(duì)象)供你在表達(dá)式和腳本片斷中使用?!禞SP Specification Version 1.0》的表2-2列出了JSP1.0中可用的隱含變量。這里列出一些常用的對(duì)象:
out對(duì)象,類型為javax.servlet.jsp.JspWriter,提供對(duì)方法(例如print()方法)的訪問,用來在腳本片斷內(nèi)生成輸出結(jié)果。
request對(duì)象直接與Java中的javax.servlet.http.HttpServletRequest類對(duì)應(yīng),具有該類的對(duì)象的一切屬性和方法。舉個(gè)例子,要獲取一個(gè)從HTML表單或URL查詢字串傳入的值,可以調(diào)用request.getParameter()方法,根據(jù)名字獲取參量。
response對(duì)象與Java中的javax.servlet.http.HttpServletResponse類對(duì)應(yīng),提供對(duì)你的網(wǎng)頁產(chǎn)生的HTML響應(yīng)的參數(shù)的訪問權(quán)。因此,要在JSP頁返回的HTML響應(yīng)報(bào)頭中加入一個(gè)值,你就可以調(diào)用the response.setHeader() 方法來實(shí)現(xiàn)。
另一個(gè)簡(jiǎn)單的例子
在下面的例子中,我們來看一看一個(gè)表單和它的JSP表單句柄之間的交互過程。使用前面討論過的腳本元素,我實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的web站點(diǎn)回饋表單(見圖2)和一個(gè)JSP表單句柄用來驗(yàn)證輸入,然后有條件地地生成基于回饋的輸出。
圖2.一個(gè)web站點(diǎn)回饋表單
圖中按鈕:submit query--提交;reset――重填
表單句柄將會(huì)檢驗(yàn)名稱和意見欄以確定它們已被填寫,如果其中任何一個(gè)或兩個(gè)是空白的,表單句柄會(huì)生成一條錯(cuò)誤信息;否則它將繼續(xù)查看用戶意見是否與預(yù)先設(shè)定的字串匹配。如果匹配,它就輸出一條專門的信息;否則輸出“thank you”。
例2
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="NetObjects ScriptBuilder 2.01">
<TITLE>Feedback Results</TITLE>
</HEAD>
<%!
// 姓名和意見欄不能為空白
// 檢查它們的值并返回結(jié)果
boolean validateInput(String name, String comment) {
boolean result = true;
// 如果姓名或意見未填寫,返回 false 以表明輸入無效
if (name.length() == 0)
result = false;
if (comment.length() == 0)
result = false;
return result;
} // 結(jié)束輸入驗(yàn)證validateInput
// 根據(jù)表單上的意見欄輸出結(jié)果
String getStringCheese (String comment) {
String cheese = "I like cheese.";
String result;
if (comment.compareTo(cheese) == 0)
result = "We like cheese too!";
else
result = "We hope someday you'll learn to like cheese.";
return result;
} //結(jié)束 getStringCheese
%>
<BODY BGCOLOR="#F0F0E0">
<%
// 獲取通過表單提交的數(shù)據(jù)
String name = request.getParameter("name");
String age = request.getParameter("age");
String comment = request.getParameter("comment");
boolean isValid;
isValid = validateInput(name, comment);
// 根據(jù)用戶是否未填寫姓名或意見欄決定輸出內(nèi)容
if (isValid) {
%>
<H2>Thank you for your feedback!</H2>
<H3>
<%
//輸出意見欄的查詢結(jié)果
out.println(getStringCheese(comment));
} // 結(jié)束 if 程序段
else {
out.println("You didn't give us your name or a comment.");
%>
</H3>
Please <a href="feedback_form.html">try again</a>
<%
} //結(jié)束 else 程序段
%>
</BODY>
</HTML>
這個(gè)例子假定用戶輸入的意見是“I like cheese."(我喜歡奶酪)在代碼中可以看到,這一響應(yīng)是為填寫這條意見的用戶定制的。表單句柄將會(huì)返回如圖3所示的頁面:
圖3.表單句柄輸出
圖中文字:謝謝你的反饋!我們也喜歡奶酪。
這個(gè)例子非常簡(jiǎn)單易懂。即便你只是一個(gè)JavaScript程序員,你也應(yīng)該可以理解它。我還要指出這個(gè)例子中體現(xiàn)的在JSP規(guī)范中并不很明顯的一些特性。首先,請(qǐng)注意我在聲明部分(<%'...%>中的部分)定義了一些方法,與在Java類中定義方法一模一樣。這是因?yàn)镴SP引擎把這些方法轉(zhuǎn)變?yōu)榈讓拥腏ava servlets,在瀏覽器向網(wǎng)頁發(fā)出請(qǐng)求時(shí)由服務(wù)器來執(zhí)行它們。因此,任何變量和方法的定義都必須遵守標(biāo)準(zhǔn)的Java語法。
還應(yīng)注意到,在我的腳本片斷的代碼中,我把一個(gè)if...else語句分開了,它跨越了兩個(gè)不同的腳本片斷段。這完全是合法的!不僅合法,而且把腳本片斷代碼和靜態(tài)HTML交叉起來是有條件生成HTML的好辦法,就像我在本例中所做到的一樣。
最后,你可以看到我通過調(diào)用request.getParameter()方法取得表單元素的值并把它賦給一個(gè)臨時(shí)變量。這是處理從表單或查詢字串輸入的值的標(biāo)準(zhǔn)方法。
不管你有沒有Java編程知識(shí),都能夠使用JSP。JSP包含了一些服務(wù)器端的標(biāo)簽,使得不用寫一行Java代碼就能顯示動(dòng)態(tài)數(shù)據(jù)。你可以直接訪問bean來完成操作,然后使用JSP標(biāo)簽把結(jié)果顯示為動(dòng)態(tài)內(nèi)容。你還可以用servlets生成bean,servlets 操作的運(yùn)算結(jié)果存于其中,然后再使用JSP標(biāo)簽顯示結(jié)果,同樣不需要在JSP頁中寫Java代碼。
有三種方式可以用來在你的網(wǎng)頁中加入Java代碼:
1、使用declarations(聲明),可以定義全局變量或是在頁內(nèi)任何地方都可以訪問的Java方法。聲明被包含在標(biāo)記<%!...%>中。
2、使用scriptlets(腳本片斷),你能書寫頁內(nèi)處理所需的任何邏輯,它們包含在<%...%>標(biāo)記內(nèi)。
3、Expressions(表達(dá)式),包含于<%=...%>中。它提供一種簡(jiǎn)單的方法來顯示Java表達(dá)式的結(jié)果。被附加上的表達(dá)式將被計(jì)算并在頁面上顯示出來,就好像你已經(jīng)在代碼中明確寫出了運(yùn)算結(jié)果的數(shù)值一樣。
在你自己編寫的代碼中,可以使用一些隱含變量(implicit variables)――JSP提供的預(yù)定義的Java對(duì)象。另外,通過使用JSP的指令(directives), 還可以包含非Java代碼模塊,比如來自其他文件的HTML文本。
下面我們來仔細(xì)看一看這些腳本元素,在編寫你自己的JSP腳本時(shí)將會(huì)經(jīng)常用到它們。
Directives(指令)
JSP定義了三個(gè)頁內(nèi)指令用于設(shè)置JSP參數(shù)或擴(kuò)充代碼。它們是 page,include和taglib,必須寫在JSP頁的第一行。語法如下:
<%@ directive attribute="value" ... %>
page指令允許你為網(wǎng)頁設(shè)定一些基本參數(shù),包括設(shè)置所用腳本語言的參數(shù)(默認(rèn)為Java)、你的腳本片斷中引入的Java類、設(shè)置輸出緩沖區(qū)等等。完整的page指令參數(shù)表見《JSP Specification Version 1.0》(《JSP規(guī)范1.0》)的2.8.1章。
使用include指令,可以包含其他文件的內(nèi)容,比如存于單獨(dú)文件中的HTML報(bào)頭和頁腳。
taglib指令用于擴(kuò)充標(biāo)準(zhǔn)的JSP標(biāo)簽集,這超出了本文的討論范圍。然而,了解JSP定義了一種擴(kuò)充其標(biāo)簽集的方法還是很有好處的,當(dāng)你是一個(gè)軟件商,想擴(kuò)充JSP的原始功能而又不想破壞其兼容性時(shí),這一點(diǎn)尤為重要。
Declarations(聲明)
使用declarations,你可以在JSP頁中定義方法或變量,它們可被同一頁中的其他代碼訪問。在大多數(shù)情況下,你可能會(huì)在自己的bean中定義方法。然而,有時(shí)候在網(wǎng)頁內(nèi)定義方法可能更方便一些,尤其是當(dāng)代碼只用于單一頁面時(shí)。不論定義方法還是變量,聲明都包含在<%! %>標(biāo)記內(nèi)。
注意,聲明并不在JSP頁內(nèi)產(chǎn)生任何輸出。它們僅僅用于定義,而不生成輸出結(jié)果。要生成輸出結(jié)果,你應(yīng)該用JSP表達(dá)式或腳本片斷。
Expressions(表達(dá)式)
Expressions是一種非常簡(jiǎn)單的JSP標(biāo)簽,它用來把在<%= %>中定義的JSP表達(dá)式的值轉(zhuǎn)換成字串并將這個(gè)值以動(dòng)態(tài)文本的形式送出。Expression的確是一條生成文本的捷徑,有了它,你不必在每次要顯示一段動(dòng)態(tài)文本的時(shí)候都去調(diào)用print()方法。典型的應(yīng)用就是,你可以用expressions顯示簡(jiǎn)單的變量值或bean中的方法的返回值。
例如,下面的代碼將會(huì)生成getName()方法的返回值:
<H2>Welcome, <%= mybean.getName() %></H2>
事實(shí)上,在生成動(dòng)態(tài)輸出之前,JSP必須把方法的返回值轉(zhuǎn)變?yōu)镴ava中的String對(duì)象。JSP規(guī)范中詳細(xì)描述了在JSP表達(dá)式中,什么樣的Java類型和Java類會(huì)被轉(zhuǎn)變成字串。
Scriptlets(腳本片斷)
到現(xiàn)在為止你已經(jīng)學(xué)會(huì)了使用指令來引入任何Java類或Java包,你能定義頁面級(jí)的方法或變量并在頁中使用它們,你還可以使用提供普通web處理功能的隱含變量。還能在JSP頁內(nèi)做些什么就取決于你了,因?yàn)槟憧梢栽趕criptlets(腳本片斷)里編寫任何你想要的Java代碼,如下所示:
<% ...code... %>
通過在page指令中使用IMPORT參數(shù),你可以從腳本片斷內(nèi)調(diào)用所有Java API。因?yàn)槟銓懙乃蠮SP代碼實(shí)際上都被編譯構(gòu)成Java servlet,它本身就是一個(gè)Java類,所以你所用的語言本身就是Java,而不是任何一種修改或整理過的版本。這就像在SSJS中你可以編寫任何代碼一樣。而與SSJS不同,在JSP中你有權(quán)使用整套豐富的Java API,因此幾乎沒有任何局限性。
Implicit Variables(隱含變量)
前面提到過,JSP定義了一些隱含變量(即Java 對(duì)象)供你在表達(dá)式和腳本片斷中使用?!禞SP Specification Version 1.0》的表2-2列出了JSP1.0中可用的隱含變量。這里列出一些常用的對(duì)象:
out對(duì)象,類型為javax.servlet.jsp.JspWriter,提供對(duì)方法(例如print()方法)的訪問,用來在腳本片斷內(nèi)生成輸出結(jié)果。
request對(duì)象直接與Java中的javax.servlet.http.HttpServletRequest類對(duì)應(yīng),具有該類的對(duì)象的一切屬性和方法。舉個(gè)例子,要獲取一個(gè)從HTML表單或URL查詢字串傳入的值,可以調(diào)用request.getParameter()方法,根據(jù)名字獲取參量。
response對(duì)象與Java中的javax.servlet.http.HttpServletResponse類對(duì)應(yīng),提供對(duì)你的網(wǎng)頁產(chǎn)生的HTML響應(yīng)的參數(shù)的訪問權(quán)。因此,要在JSP頁返回的HTML響應(yīng)報(bào)頭中加入一個(gè)值,你就可以調(diào)用the response.setHeader() 方法來實(shí)現(xiàn)。
另一個(gè)簡(jiǎn)單的例子
在下面的例子中,我們來看一看一個(gè)表單和它的JSP表單句柄之間的交互過程。使用前面討論過的腳本元素,我實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的web站點(diǎn)回饋表單(見圖2)和一個(gè)JSP表單句柄用來驗(yàn)證輸入,然后有條件地地生成基于回饋的輸出。
圖2.一個(gè)web站點(diǎn)回饋表單
圖中按鈕:submit query--提交;reset――重填
表單句柄將會(huì)檢驗(yàn)名稱和意見欄以確定它們已被填寫,如果其中任何一個(gè)或兩個(gè)是空白的,表單句柄會(huì)生成一條錯(cuò)誤信息;否則它將繼續(xù)查看用戶意見是否與預(yù)先設(shè)定的字串匹配。如果匹配,它就輸出一條專門的信息;否則輸出“thank you”。
例2
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="NetObjects ScriptBuilder 2.01">
<TITLE>Feedback Results</TITLE>
</HEAD>
<%!
// 姓名和意見欄不能為空白
// 檢查它們的值并返回結(jié)果
boolean validateInput(String name, String comment) {
boolean result = true;
// 如果姓名或意見未填寫,返回 false 以表明輸入無效
if (name.length() == 0)
result = false;
if (comment.length() == 0)
result = false;
return result;
} // 結(jié)束輸入驗(yàn)證validateInput
// 根據(jù)表單上的意見欄輸出結(jié)果
String getStringCheese (String comment) {
String cheese = "I like cheese.";
String result;
if (comment.compareTo(cheese) == 0)
result = "We like cheese too!";
else
result = "We hope someday you'll learn to like cheese.";
return result;
} //結(jié)束 getStringCheese
%>
<BODY BGCOLOR="#F0F0E0">
<%
// 獲取通過表單提交的數(shù)據(jù)
String name = request.getParameter("name");
String age = request.getParameter("age");
String comment = request.getParameter("comment");
boolean isValid;
isValid = validateInput(name, comment);
// 根據(jù)用戶是否未填寫姓名或意見欄決定輸出內(nèi)容
if (isValid) {
%>
<H2>Thank you for your feedback!</H2>
<H3>
<%
//輸出意見欄的查詢結(jié)果
out.println(getStringCheese(comment));
} // 結(jié)束 if 程序段
else {
out.println("You didn't give us your name or a comment.");
%>
</H3>
Please <a href="feedback_form.html">try again</a>
<%
} //結(jié)束 else 程序段
%>
</BODY>
</HTML>
這個(gè)例子假定用戶輸入的意見是“I like cheese."(我喜歡奶酪)在代碼中可以看到,這一響應(yīng)是為填寫這條意見的用戶定制的。表單句柄將會(huì)返回如圖3所示的頁面:
圖3.表單句柄輸出
圖中文字:謝謝你的反饋!我們也喜歡奶酪。
這個(gè)例子非常簡(jiǎn)單易懂。即便你只是一個(gè)JavaScript程序員,你也應(yīng)該可以理解它。我還要指出這個(gè)例子中體現(xiàn)的在JSP規(guī)范中并不很明顯的一些特性。首先,請(qǐng)注意我在聲明部分(<%'...%>中的部分)定義了一些方法,與在Java類中定義方法一模一樣。這是因?yàn)镴SP引擎把這些方法轉(zhuǎn)變?yōu)榈讓拥腏ava servlets,在瀏覽器向網(wǎng)頁發(fā)出請(qǐng)求時(shí)由服務(wù)器來執(zhí)行它們。因此,任何變量和方法的定義都必須遵守標(biāo)準(zhǔn)的Java語法。
還應(yīng)注意到,在我的腳本片斷的代碼中,我把一個(gè)if...else語句分開了,它跨越了兩個(gè)不同的腳本片斷段。這完全是合法的!不僅合法,而且把腳本片斷代碼和靜態(tài)HTML交叉起來是有條件生成HTML的好辦法,就像我在本例中所做到的一樣。
最后,你可以看到我通過調(diào)用request.getParameter()方法取得表單元素的值并把它賦給一個(gè)臨時(shí)變量。這是處理從表單或查詢字串輸入的值的標(biāo)準(zhǔn)方法。
您可能感興趣的文章:
- jsp+Servlet編程實(shí)現(xiàn)驗(yàn)證碼的方法
- jsp編程獲取當(dāng)前目錄下的文件和目錄及windows盤符的方法
- jsp編程去除空白行的方法
- jsp編程中session的用法實(shí)例分析
- 賣jsp編程技巧的那個(gè)垃圾的所有實(shí)例的答案全部已收集,現(xiàn)將他人收集的實(shí)例答案公布出來,大家鑒賞!
- JSP針對(duì)XML文件操作技巧實(shí)例分析
- 純JSP+DWR實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)下拉選擇菜單實(shí)現(xiàn)技巧
- jsp 頁面上圖片分行輸出小技巧
- jsp編程常用技巧小結(jié)
相關(guān)文章
Java之JSP教程九大內(nèi)置對(duì)象詳解(下篇)
這篇文章主要介紹了Java之JSP教程九大內(nèi)置對(duì)象詳解(下篇),本文章內(nèi)容詳細(xì),通過案例可以更好的理解JSP內(nèi)置對(duì)象的相關(guān)知識(shí),本模塊分為了三部分,本次為下篇,講解了三個(gè)內(nèi)容,需要的朋友可以參考下2023-01-01使用JS顯示倒計(jì)時(shí)數(shù)字時(shí)鐘效果
這篇文章主要介紹了JS實(shí)現(xiàn)的網(wǎng)頁倒計(jì)時(shí)數(shù)字時(shí)鐘效果,是一款非常實(shí)用的javascript倒計(jì)時(shí)特效,具有一定參考借鑒價(jià)值,需要的朋友可以參考下。2016-10-10解決cannot be cast to javax.servlet.Filter 報(bào)錯(cuò)的問題
本文主要介紹解決cannot be cast to javax.servlet.Filter 報(bào)錯(cuò)的問題,這里提供解決辦法,有編程的朋友遇到此錯(cuò)誤可以參考下2016-08-08jsp實(shí)現(xiàn)Servlet文件下載的方法
這篇文章主要介紹了jsp實(shí)現(xiàn)Servlet文件下載的方法,涉及jsp基于Servlet實(shí)現(xiàn)文件下載的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10JSP動(dòng)態(tài)網(wǎng)頁開發(fā)原理詳解
這篇文章主要介紹了JSP動(dòng)態(tài)網(wǎng)頁開發(fā)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07JSP由淺入深(3)—— 通過表達(dá)式增加動(dòng)態(tài)內(nèi)容
JSP由淺入深(3)—— 通過表達(dá)式增加動(dòng)態(tài)內(nèi)容...2006-10-10