內(nèi)容講義講稿_第1頁(yè)
內(nèi)容講義講稿_第2頁(yè)
內(nèi)容講義講稿_第3頁(yè)
內(nèi)容講義講稿_第4頁(yè)
內(nèi)容講義講稿_第5頁(yè)
已閱讀5頁(yè),還剩911頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章JSP簡(jiǎn) 什么是 JSP頁(yè) JSP的運(yùn)行原 安裝配置JSP運(yùn)行環(huán) JSP頁(yè)面的測(cè) JSP與JavaServlet的關(guān) 第2章JSP語(yǔ) JSP頁(yè)面的基本結(jié) 變量和方法的 變 方 Java程序 表達(dá) JSP中的注 JSP指令page指 include指令JSP動(dòng)作include動(dòng)作param動(dòng)作forward動(dòng)作plugin動(dòng)作useBean動(dòng)作第3章JSP內(nèi)置對(duì) request對(duì) 獲取客戶提交的信 處理漢字信 常用方法舉 用戶獲取HTML表單提交的數(shù) 表 response對(duì) 動(dòng)態(tài)響應(yīng)contentType屬 response的HTTP文件 response重定 response的狀態(tài) session對(duì) session對(duì)象的 session對(duì)象與URL重 session對(duì)象的常用方法 計(jì)數(shù) application對(duì) application對(duì)象的常用方 用application制作留言 out對(duì) 第4章JSP中的文件操 File 獲取文件的屬 創(chuàng) 刪除文件 使用字節(jié)流讀寫文 FileInputStream和FileOutputStream BufferedInputStream和BufferedOutputStream類.使用字符流讀寫文 FileReader和FileWriter BufferedReader和BufferedWriter 回壓字符 數(shù)據(jù) 對(duì)象 RandomAccessFile 文件上 文件分頁(yè)文 標(biāo)準(zhǔn)化考 第5章JSP中使用數(shù)據(jù) 數(shù)據(jù) JDBC-ODBC橋接 查詢記 順序查 游動(dòng)查 隨機(jī)查 參數(shù)查 排序查 分析結(jié)果集查 使用統(tǒng)配符查 更新記 添加記 刪除記 分頁(yè)顯示記 連接數(shù)據(jù)庫(kù)的其它方 連接Oracle數(shù)據(jù) 連接MySql數(shù)據(jù) 查詢Excel電子表 使用同步連 網(wǎng)上投 成績(jī)錄入查詢系 第6章JSP與 編寫javabeans和使用 編寫 使用 beans的存 獲取和修改beans的屬 getProperty動(dòng)作setProperty動(dòng)作beans的輔助 帶包名的 JSP與beans結(jié)合的簡(jiǎn)單例 三角形 計(jì)數(shù)器 購(gòu)物車 讀文件 寫文件 查詢數(shù)據(jù)庫(kù) 猜數(shù)字 標(biāo)準(zhǔn)化考試 日期 分頁(yè)顯示記錄 第7章基于會(huì)員制的網(wǎng)絡(luò)交 系統(tǒng)設(shè) 數(shù)據(jù)庫(kù)設(shè)計(jì)及連 頁(yè)面管 各個(gè)頁(yè)面的設(shè) 會(huì)員會(huì)員登 瀏覽會(huì) 查找會(huì) 留言 查看公共留 查看私人留 修改修改個(gè)人信 第8章網(wǎng) 系統(tǒng)設(shè) 數(shù)據(jù)庫(kù)設(shè)計(jì)及連 頁(yè)面管 各個(gè)頁(yè)面的設(shè) 用戶用戶登 用戶訂 查看訂 修改訂 瀏覽書 修改修改個(gè)人信 第9章Java SERVLET工作原 Servlet的生命周 init方法 service方 destroy方 編譯和安裝 簡(jiǎn)單的servlet例 編譯 存放servlet 運(yùn)行 帶包名的 通過(guò)JSP頁(yè)面調(diào)用 通過(guò)表單向servlet提交數(shù) 通過(guò)超 SERVLET的共享變 HttpServlet doGet方法和doPost方 處理HTTP請(qǐng)求頭及表單信 設(shè)置響應(yīng)的HTTP 用SERVLET讀寫文 文件的內(nèi) 寫文 用SERVLET數(shù)據(jù) 數(shù)據(jù)庫(kù)記錄查 使用共享連 會(huì)話管 獲取用戶的會(huì) 購(gòu)物 猜數(shù) 第1JSP什么JP是Javaeverages的縮寫,是由un公司倡導(dǎo)、許多公司參與,于1999年推出的一種頁(yè)技術(shù)標(biāo)準(zhǔn)。JP是基于Javaevlet以及整個(gè)Java體系的Web進(jìn)站,這術(shù)還在不斷的更新和優(yōu)化中。你可能對(duì)的ASActveeverages)比較熟悉,ASP也是一個(gè)Web服務(wù)器端的開(kāi)發(fā)技術(shù),可以開(kāi)發(fā)出動(dòng)態(tài)的、高性能的Web服務(wù)應(yīng)用程序。JP和ASP技術(shù)非常相似,ASP的編程語(yǔ)言是VBcipt和Javacipt,JSP使用的是JavaASP相比,JSP以JavaAP的級(jí)執(zhí)行的缺點(diǎn)。我們相信JSP會(huì)逐漸成為ntenet上的主流開(kāi)需要強(qiáng)調(diào)的一點(diǎn)要想真正地掌握J(rèn)SP技術(shù)必須有較好的語(yǔ)言基礎(chǔ),以及HTML語(yǔ)言方面的知識(shí)。JSP頁(yè)面在傳統(tǒng)的HTML頁(yè)面文件中加入java程序片和JSP就構(gòu)了一個(gè)JSP頁(yè)面文件,簡(jiǎn)單JSP頁(yè)面除了普通的HTML標(biāo)記符外,再使用標(biāo)記符號(hào)“<%”,“”加入Java程序片。一個(gè)JSP頁(yè)面文件的擴(kuò)展名是jsp,文件的名字必須符合標(biāo)識(shí)符規(guī)定,需要注意的是,JSP技術(shù)基于Java語(yǔ)言,名字區(qū)分大小寫。為了明顯地區(qū)分普通的HTML標(biāo)記Java程序片段以JSP標(biāo)簽,我們用大寫字母書寫普通的HTML標(biāo)記符號(hào)。下面的例子1是一個(gè)簡(jiǎn)單的JSP例子1(效果如圖1.1所示<%@pagecontentType="text/html;charset=GB2312"<BODY<FONT<P>這是一個(gè)簡(jiǎn)JSP<%inti,sum=0;{} 1100的連續(xù)和<%=sum用瀏覽器該JSP頁(yè)面的效果如圖1.1所示1.1簡(jiǎn)單jsp頁(yè)JSP的運(yùn)行原理當(dāng)服務(wù)器上的一個(gè)JSPJSP引擎首先將JSP頁(yè)面文件轉(zhuǎn)譯成一個(gè)java文件,再將這個(gè)java文件編這個(gè)JSP頁(yè)面再次被請(qǐng)求執(zhí)行時(shí),JSP引擎將直接執(zhí)行這個(gè)字節(jié)碼文件來(lái)響應(yīng)客戶,這也是JSP比ASP速度快的一個(gè)原因。而JP頁(yè)面JSP頁(yè)面中普HTML標(biāo)記符號(hào)(頁(yè)面的靜態(tài)部分)交執(zhí)行“<%”和“%>”之間的java程序片(JSP頁(yè)面中的動(dòng)態(tài)部,當(dāng)多個(gè)客戶請(qǐng)求一個(gè)JSP頁(yè)面時(shí),JSP引擎為每個(gè)客戶啟動(dòng)一個(gè)線程而不是啟動(dòng)一個(gè)這些線程由JSP引擎服務(wù)器來(lái)管理,與傳統(tǒng)的CGI為每個(gè)客戶啟動(dòng)一個(gè)進(jìn)程相比較,效率要高的下面是JSP引擎生成的Example1_1.jspjava文件,我引擎交給客戶端負(fù)責(zé)顯示的內(nèi)容做了(***)注釋packageorg.apache.jsp;importjavax.servlet.*;importjavax.servlet.jsp.*;importpublicclassfirst1$jspextends{static}publicfirst1$jsp()}privatestaticboolean_jspx_inited= org.apache.jasper.runtime.JspException{} throwsjava.io.IOException,{JspFactory_jspxFactory=null;PageContextpageContext=null;HttpSessionsession=null;ServletContextapplication=null;ServletConfigconfig=null;JspWriterout=null;Objectpage=this; try{if(_jspx_inited=={synchronized(this)if(_jspx_inited==false)_jspx_inited=}}}_jspxFactory=JspFactory.getDefaultFactory();pageContext=_jspxFactory.getPageContext(this,request,response,"",true,8192,application=pageContext.getServletContext();config=pageContext.getServletConfig();session=pageContext.getSession();out=(***)out.wie"n<HTM>\n<BODY>\n<>這是一個(gè)簡(jiǎn)單的JP頁(yè)面\n"inti,{}(*** 1到100的連續(xù)和是: out.print(sum }catch(Throwablet)if(out!=null&&out.getBufferSize()!=0) }finally }}}下面是客戶端瀏覽器查看到的 的源代碼<BODY<FONT<P>這是一個(gè)簡(jiǎn)單的 頁(yè) 1100的連續(xù)和安裝JSP運(yùn)行環(huán)自從JP發(fā)布以后,出現(xiàn)了各式各樣的JP引擎。1999年10月un公司將Javaeverage1.1代碼交給Apache組織,Apache組織對(duì)JSP進(jìn)行了實(shí)用研究,并將這個(gè)服務(wù)器項(xiàng)目稱為Tomcat,從此,著名的Web服務(wù)器Apache開(kāi)始支持JSP。這樣,Jakarta—Tomcat就誕生了(Jakarta是JP項(xiàng)目的最初名稱。目前,Tomcat能和大部分主流服務(wù)器一起高效率的工作。我們重點(diǎn)講述Window98/Window2000操作系統(tǒng)下Tomcat服務(wù)器的安裝Tomcat之前,必須首先安裝JDK,這里我們安裝sun公司JDK1.3。假設(shè)JDK的安 是C:\Jdk1.3然后,解壓縮文件:jakarta-tomcat-4.0.zip,該文件可從sun公司的:h 或到。假設(shè)解壓縮文件到:D:\Tomcat。這時(shí)我們得到如下的結(jié)構(gòu):9圖1.2Tomcat引 在啟動(dòng)Tomcat服務(wù)器之前,還需要進(jìn)行幾個(gè)環(huán)境變量的設(shè)置。 window2000,用鼠標(biāo)“我的電腦彈出菜單,然”框該變量名:JAVA_HOME,變量值:C:\jdk1.3變量名TOMCAT_HOME變量值D:\tomcat\Jakatatomcat-4.0變量名:CLASSPATH,變量值:C:\jdk1.3\jre\lib\rt.jar;.;變量名:PATH,變?nèi)绻?jīng)設(shè)置過(guò)環(huán)境變量:CLASSPATHPATH,可點(diǎn)擊該變量對(duì)于Win9x,用記事本編輯Autoexec.bat文件,將如下的設(shè)置語(yǔ) 現(xiàn)在,就可以啟動(dòng)Tomcat服務(wù)器了。執(zhí)行startup.bat1.3Tomcat服務(wù)器啟動(dòng)后的窗在瀏覽器的地址欄中鍵入:,會(huì)出現(xiàn)如 所示的Tomcat測(cè)試頁(yè)1.4Tomcat測(cè)試注:Tomcat服務(wù)器內(nèi)置web服務(wù)如果Tomcat不能啟動(dòng)請(qǐng)首先檢查環(huán)境變量的設(shè)置是否正確,對(duì)于Win9x,如果出現(xiàn)“outofenvironmentspace”的錯(cuò)誤提示,就需要修改MS-DOS屬性,將屬性中內(nèi)存的初始環(huán)境更改為4096注:8080是Tomcat服務(wù)器的默認(rèn)端。我們可以通過(guò)修Tomcat\Jakarta-tomcat-4.0\conf文件下的主配置文件server.xml,更改端。用記事本打開(kāi)server.xml文件,找到出<!--Defineanon-SSLHTTP/1.1Connectoron8080-- enableLookups="true"redirectPort="8443" 的部分將其中的port=“8080”更改為新的端即可比如將更改為9080注:Tomcat\Jakarta-tomcat-4.0\binshutdown.bat關(guān)閉Tomcat器JSP用記事本或更好的文本編輯器,編輯如下的JSP源文件:Example1_2.jsp2(效果如圖1.5所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.util.*"<P>現(xiàn)在的時(shí)間是 Datedate=new將JSP文件命名為Example1_2.jsp,保存到入:對(duì)JSP頁(yè)面進(jìn)試,出現(xiàn)如圖1.5圖 JSP頁(yè)面測(cè)這時(shí),如果你查Tomcat\Jakarta-tomcat-4.0\webapps\work,可以在localhost的一個(gè)根文件下找到JSP引擎生Example1_2.jsp的java文件和編譯后的字節(jié)碼文件,如圖1.6所示。1.6JSP頁(yè)面的Java文件和字節(jié)碼文件所在注:Tomcat服務(wù)器的Web服務(wù)的 tomct\Jkara-tmca-4.\weapp\oo另外webaps還有幾個(gè)web務(wù) :examples、tomcat-docs、webdav如果將JSP文件保存到webdav中,應(yīng)當(dāng)在在瀏覽器器的地址欄中輸入:。注:我們也可以建立新的web服務(wù)假設(shè)要D:\testc:\redsun為服務(wù),并讓用戶分別使用/test和/moon虛擬。首先用記事本打開(kāi)主配置文件<!--TomcatRootContext--<!-<Contextpath=""docBase="ROOT"--<!--TomcatExamplesContext-- (在這里加入您的Web服 的部分。然后在</Context> </Host>之間加入 主配置文件server.xml修改后,必須重新啟動(dòng)Tomcat引擎。這樣就可以JSP頁(yè)面存放D:\testc:\redsun用戶可以通過(guò)虛擬test或moonJSP頁(yè)面,比如,在瀏覽器地址欄中鍵入:。當(dāng)客戶過(guò)上面Web服務(wù)的JSP頁(yè)面后,服務(wù)器的tomcat\jakart-tomcat-4.0\work出現(xiàn)moontest目錄存放了JSP應(yīng)的Java件和Java件的字節(jié)碼文件JSP與JavaServletJavaevlet是Java語(yǔ)言的一部分,提供了用于服務(wù)器編程的APIJavaServlet編寫的Java程序稱為一個(gè)servletservlet通過(guò)HTML與客戶交互信息。sevlet的最大缺點(diǎn)是不能有效的管理頁(yè)面的邏輯部分和頁(yè)面的輸出部分,導(dǎo)致sevlet代碼非常用servlet來(lái)管理變成一件很的事情。為了克服servlet的缺點(diǎn),SUN公司用JavaevletJavaeverageJP提供了servlet的幾乎所有好處,當(dāng)一個(gè)客戶請(qǐng)求一個(gè)JP頁(yè)面時(shí),JSP引擎根據(jù)JP頁(yè)面生成一個(gè)Java文件,即一個(gè)sevletJSP支持javabeans這一特點(diǎn),可以有效地管理頁(yè)面的邏輯部分和頁(yè)面的輸出部分(見(jiàn)第6章。另外,JP也可以和sevlet有效地結(jié)合,分離頁(yè)面的邏輯部分和頁(yè)面的輸出部分(見(jiàn)第9章)第2章JSPJSP頁(yè)面的基本結(jié)構(gòu)在傳統(tǒng)的HTML頁(yè)面文件中加入java程序片和JSP就構(gòu)成了一個(gè)JSP頁(yè)面文件。一個(gè)JSP頁(yè)面可由5種元素組合而成:(1)普通的HTML標(biāo)記 :如,指令、動(dòng)作(3)變量和方法的(4)Java程序片(5)Java表達(dá)式我們稱(3(4(5)形成的部分為JSP的部分當(dāng)服務(wù)器上的一個(gè)jsp頁(yè)面被第一次請(qǐng)求執(zhí)行時(shí),服務(wù)器上的JSP引擎首先將JSP頁(yè)面文件轉(zhuǎn)譯成一個(gè)java文件,再將這個(gè)java文件JSP頁(yè)面中普通的HTML標(biāo)記符號(hào),交給客戶的瀏覽器執(zhí)JSP、數(shù)據(jù)和方法、Java程序片由服務(wù)器負(fù)責(zé)執(zhí)行將需要顯示的結(jié)果發(fā)送給客戶的瀏覽Java表達(dá)式由服務(wù)器負(fù)責(zé)計(jì)算,并將結(jié)果轉(zhuǎn)化為字符串,然在下面的例子1中,客戶通過(guò)表單向服務(wù)器提交三角形三邊的長(zhǎng)邊長(zhǎng)度返回給客戶。為了講解方便,下面的JSP文件加入了行號(hào),它們并不是JP源文件的組成部分。2.1計(jì)算三角形面在下面的Example2_1.jsp(1(2)行是JSP指令(3)至(10)行是HTML標(biāo)記,其中(7)到(10)行 表單,客戶通過(guò)該表單向服務(wù)器提交數(shù))3行數(shù)據(jù)部,該分的據(jù)個(gè)JP(14)至(42)行是Java程序片,該程序片負(fù)責(zé)計(jì)算面積并將結(jié)果返回給客戶該程序片內(nèi)的變量只在該程序片(4547例子1(效果如圖2.1所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.util.*"<BODYBGCOLOR=cyan><FONT <P>請(qǐng)輸入三角形的三個(gè)邊的長(zhǎng)度,輸入的數(shù)字用逗號(hào)分<FORMaction="Example2_1.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="送出"<%!doublea[]=newString <%intbooleanStringdoubledoublea[]=newString try{ result=Math.sqrt(p*(p-a[0])*(p-a[1])*(p- out.print("面積 {answer="您輸入的三邊不能構(gòu)成一個(gè) <P>您輸入的三邊變量和方法的在“<%!”和“%>”標(biāo)記符號(hào)之間變量和方法變之間放置Java的變量語(yǔ)句變量的類型可以是Java語(yǔ)言允許的任何數(shù)據(jù)類型,這些變量稱為JSP頁(yè)面的成員變量。如,<%! a,b=10,Datedate;“<!”和“>”之間的變量在整個(gè)JP頁(yè)面內(nèi)都有效,因?yàn)镴P引擎將JP頁(yè)面轉(zhuǎn)譯成Java文件時(shí),將這些變量作為類的成求一個(gè)JP頁(yè)面時(shí),JSP引擎為每個(gè)客戶啟動(dòng)一個(gè)線程,這些線程由JP引擎服務(wù)器來(lái)管理,這些線程共享JP頁(yè)面的成員變量,因此任何一個(gè)用戶對(duì)JSP頁(yè)面成員變量操作的結(jié)果,都會(huì)影響到其他用戶。下面的例子2利用成員變量被所有用戶共享這一性質(zhì),實(shí)現(xiàn)了一2.2簡(jiǎn)單的計(jì)數(shù)例子2(效果如圖2.2所示<%@pagecontentType="text/html;charset=GB2312"<BODYBGCOLOR=cyan><FONT<%!int<P>個(gè)本站的客戶在處理多線程問(wèn)題時(shí),須注意這樣一個(gè)問(wèn)題:當(dāng)兩個(gè)或多個(gè)線程同時(shí)同一個(gè)共享的變量并且一個(gè)線程需要修改這個(gè)變量時(shí),我們應(yīng)對(duì)這樣的問(wèn)題作出處理,否則可能發(fā)生。在上面的例子2中,可能發(fā)生兩個(gè)客戶同時(shí)請(qǐng)求Exampe2_2.jsp頁(yè)面。在Java入一個(gè)synchronized塊,或?qū)⑿薷脑撟兞康姆椒ㄓ胹ynchonized來(lái)修飾。這樣,當(dāng)一個(gè)客戶用synchonized塊或synchonized方法操作一<%@pagecontentType="text/html;charset=GB2312"<%!Integernumber=new}<P>您是第個(gè)本站的客戶2.2.2方在“<%!”和“%>”之間方法,該方法在整個(gè)JSP頁(yè)面有效,但是該方法內(nèi)定義的變量只在該方法內(nèi)有效。這些方法將在Java程用完畢即可釋放所占的內(nèi)存。當(dāng)多個(gè)客戶同時(shí)請(qǐng)求一個(gè)JSP頁(yè)面時(shí),他<%@pagecontentType="text/html;charset=GB2312"<%!intsynchronizedvoid{} //在程序片中調(diào)用方<P><P>個(gè)本站的客戶在上面的例子4中,如果Tomcat服務(wù)器重新啟動(dòng)就會(huì)刷新計(jì)數(shù)器,因此計(jì)數(shù)又從0開(kāi)始。在下面的例子5中,我們使用Java的輸入輸出流技術(shù),將計(jì)數(shù)保存到文件。當(dāng)客戶該JSP頁(yè)面時(shí),就去這個(gè)文件,將服務(wù)器重新啟動(dòng)之前的計(jì)數(shù)讀入,并在此基礎(chǔ)1,重新啟動(dòng),就將計(jì)數(shù)增1,并創(chuàng)建一個(gè)文件,然后將計(jì)數(shù)寫入到這個(gè)文件(有關(guān)文件和輸入輸出流技術(shù)可參見(jiàn)第4章。2.3用文件保存計(jì)例子5(效果如圖2.3所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.io.*"<BODYBGCOLOR=cyan><FONT<%!int countPeople()//計(jì)算次數(shù)的同步方{{ } { }catch(IOException}catch(IOException{}} }catch(IOExceptione){}}}<P><P>個(gè)本站的客戶數(shù)學(xué)上有一個(gè)計(jì)算的公式:/4=1-1/3+1/5-1/7+1/9-1/11……。下面的例子 中利用成員變量被所有客戶共享這一特性實(shí)現(xiàn)客幫助計(jì)算的值,即每當(dāng)客戶Example2_6.jsp都參與了一次的圖2.4利用頁(yè)面次數(shù)計(jì)算的例子6(效果如圖2.4所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FONTlongnumber=0;synchronizedvoid幫助 i=-}幫助計(jì)算<P>您是第<%=number%>個(gè)<P>目前PI的計(jì)算結(jié)果 可以在“<%!”和“%>”之間一個(gè)類,該類在JSP頁(yè)面內(nèi)有效,即在JSP頁(yè)面的Java程序片部分可以使用該類創(chuàng)建對(duì)象。在下面的7中,我們定義了一Circle類,該類的對(duì)象負(fù)責(zé)求圓的面積和周2.5JSP頁(yè)面中使用自定義的例子7(效果如圖2.5所示<%@pagecontentType="text/html;charset=GB2312"<P>請(qǐng)輸入圓的半<FORMaction="Example2_7.jsp"method=get<INPUT <INPUTTYPE="submit"value="送出"<%!publicclass{doubleCircle(double}double求面積{return}double求周長(zhǎng){return}} doubler;}}Circlecircle=new //創(chuàng)建對(duì)<P>圓的面積是<%=circle.求面積<P>圓的周長(zhǎng)是<%=circle.求周長(zhǎng)Java序可以在“<%”和“%>”之間插入Java程序片。一個(gè)JSP頁(yè)面可JSP中的變量稱做JSP頁(yè)面的局部變量它們?cè)贘SP頁(yè)面內(nèi)的所有JP引擎將JSP頁(yè)面轉(zhuǎn)譯成Java文件時(shí),將各個(gè)程序片的這些變量作為類中某個(gè)方法的JSP當(dāng)多個(gè)客戶請(qǐng)求一個(gè)JSPJSP引擎為每個(gè)客戶啟動(dòng)一個(gè)線程,一個(gè)客戶的局部變量和另一個(gè)客戶的局部變量被分配不同的內(nèi)存空間。因此,一個(gè)客戶對(duì)JSP頁(yè)面局部變量操作的結(jié)果,不會(huì)影響到其它客戶的這個(gè)局部變量。下面例子8中的程序片負(fù)責(zé)計(jì)算1到100的連續(xù)例子8(效果如圖2.6所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FONTlongcontinueSum(int{intfor(int{}

2.6使用程序片計(jì)算連續(xù)}<P>1100的連續(xù)和<%longsum;下面的例子9將例子8中的程序片分割成幾部2.7程序片分例子9(效果如圖2.7所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FontlongcontinueSum(int{intfor(int{}}<P>了一個(gè)long型變量<%long<P>然后調(diào)用方法<%<P>將調(diào)用方法continueSum得到的值顯示到<P>1101的連續(xù)和是<%= <%<P>您計(jì)算的項(xiàng)數(shù)超過(guò)100項(xiàng)了<P>您計(jì)算的項(xiàng)數(shù)沒(méi)有超過(guò)100}下面例子10的程序片負(fù)責(zé)服務(wù)器上的一個(gè)文件并將文件的圖2.8使用程序片文例子10(效果如圖2.8所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.io.*"<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.io.*"<BODYbgcolor=cyan><FONT FileReaderin=newFileReader(f);Strings=null;{}}catch(IOException{out.print("文件不存在表達(dá),下面的例子11計(jì)算表達(dá)式的例子11(效果如圖2.9所示<%@pagecontentType="text/html;charset=GB2312" bgcolor=cyan><FONT<P>Sin(0.9)3<p>3的平方 72 <P>5的平等

2.9計(jì)算表達(dá)式的<P>99大于100嗎?回JSP中的注釋注釋可以增強(qiáng)JSP文件的可讀性,并易于JSP文件的。JSPHTML注釋:在標(biāo)記符號(hào)“<!--”和“-->”之間加入注釋內(nèi)容<!- 注釋內(nèi) --JSP引擎把HTML注釋交給客戶,因此客戶通過(guò)瀏覽器查看的源文件時(shí),能夠看到HTML 注釋:在標(biāo)記符號(hào)“<%--”和“--%>”之間加入注釋內(nèi)容<%- 注釋內(nèi)容JSP引擎忽略JSP注釋,即在編譯JSP頁(yè)面時(shí)忽略JSP注釋例子<%@pagecontentType="text/html;charset=GB2312"<P>請(qǐng)輸入三角形的三個(gè)邊a,b,c的長(zhǎng)度<!--以下是HTML表單,向服務(wù)器發(fā)送三角形的三個(gè)邊的長(zhǎng)--<FORMaction="Example2_12.jsp"method=post<P>請(qǐng)輸入三角形邊a的長(zhǎng)度<INPUTtype="text"<P>請(qǐng)輸入三角形邊b的長(zhǎng)度<INPUTtype="text"<P>請(qǐng)輸入三角形邊c的長(zhǎng)度<INPUTtype="text"<INPUTTYPE="submit"value="送出"<%--獲取客戶提交的數(shù)據(jù)<%Stringstring_a=request.getParameter("a"),doublea=0,b=0,c=0;<%--判斷字符串是否是空對(duì)象,如果是空對(duì)象就初始化<%}<%--求出邊長(zhǎng),并計(jì)算面積<%try{a=Double.valueOf(string_a).doubleValue();{doubledoublemianji=Math.sqrt(p*(p-a)*(p-b)*(p-c));}{out.print("<BR>"+"您輸入的三邊不個(gè)三角形}} {out.print("<BR>"+"請(qǐng)輸入數(shù)字字符}JSPpagepage指令用來(lái)定義整個(gè)JSPpage指令定義JSP頁(yè)面的contentType屬性的值是"txthmchaet=B31"<%@pagecontentType="text/html;charset=GB2312"page指令的格式<%@page 屬性1=“屬性1的值” 屬性2=“屬性2的 屬性值總是用單引號(hào)或引號(hào)雙號(hào)括起來(lái) import="java.util.*"%>如果為一個(gè)屬性指定幾個(gè)值話,這些值用逗號(hào)分割。page指令只能給import屬性指定多個(gè)值;其它屬性只能指定一個(gè)值。例如<%@ import="java.util.*","java.io.*" "java.awt.*"當(dāng)你為import指定多個(gè)屬性值時(shí),JSP引擎把JSP頁(yè)面轉(zhuǎn)譯java文件中會(huì)有如下的importimportjava.util.*;importjava.io.*;importjava.awt.*;在一個(gè)JSPpage指令來(lái)指定屬性及其值。需要注意的是:可以使用多個(gè)page指令給屬性ipot幾個(gè)值,但其它屬性只能使用一次page指令指定該屬性一個(gè)值。如,<%@<%@import="java.util.*"<%@import="java.util.*","java.awt.*"注:下列用法<%@pagecontentType="text/html;charset=GB2312"<%@pagecontentType="text/html;charset=GB2312"盡管指定的屬性值相同,也不允許2次使用PagecontentType屬注:page指令的作用對(duì)整個(gè)頁(yè)面有效,與其書寫的位置無(wú)關(guān),習(xí)慣把page指令寫在JSP頁(yè)面的最前l(fā)anguage定義JSP頁(yè)面使用的語(yǔ)言,該屬性的值目前只能取"java"。為language屬性指定值的格式:<%@ language="java"page指令指定該屬性的值的話,那么,JSP頁(yè)面默認(rèn)有page指<%@ language="java"import該屬性的作用是為JSP頁(yè)面引入Java包中的類這樣就可以在JSP頁(yè)面的程序片部分變量及函數(shù)部分表達(dá)式部分使用包中的類??梢詾樵搶傩灾付ǘ鄠€(gè)值,該屬性的值可以是Java某包中<%@ import="java.io.*","java.util.Date"JSP頁(yè)面import屬性已經(jīng)有如下 java.lang.*" "javax.servlet.*"、"javax.servlet.jsp.*""javax.servlet.http.*"contentType屬性定義JSP頁(yè)面響應(yīng)的MIME(MultipurposeInternetMailExtention)類型和JSP頁(yè)面字符的編碼。屬性值的一般形式是“MIME類型”或“MIME類型;charset=編碼”,如:<%@pagecontentType="text/html;charset=GB2312"session屬性用于設(shè)置是否需要使用內(nèi)置的 對(duì)象session的屬性值可以是truefalsesessio屬性默認(rèn)的屬性truebuffer屬性內(nèi)置輸出流對(duì)象out負(fù)責(zé)將服務(wù)器的某些信息或運(yùn)行結(jié)果發(fā)送到客戶端顯示,buffer屬性用來(lái)out設(shè)置的緩沖區(qū)的大小或不使用buffer屬性可以取值“none”,設(shè)置out不使用緩沖區(qū)。Buffer屬性的默認(rèn)值是8kb。例如:<%@pagebuffer=“24kb”auotFlush指定 的緩沖區(qū)被填滿時(shí),緩沖區(qū)是否自動(dòng)刷新auotFlush可以取值true或false。auotFlush屬性的默認(rèn)值是true。當(dāng)auotFlush屬性取值false時(shí),如果out的緩沖區(qū)填滿時(shí),就會(huì)出現(xiàn)緩存溢出異常buffer的值是“none”時(shí),auotFlush的值就不能設(shè)置成false。isThreadSafe用來(lái)設(shè)置JSP頁(yè)面是否可多線程isThreadSafe的屬性值truefalseisThreadSafe屬性值設(shè)置為true時(shí),JSP頁(yè)面能同時(shí)響應(yīng)多個(gè)客戶的請(qǐng)isThreadSafe屬性值設(shè)false時(shí),JSP頁(yè)面同一時(shí)刻只能處理響應(yīng)一個(gè)客戶的請(qǐng)求,其他客戶需排隊(duì)等待。isThreadSafe屬性的默認(rèn)值是屬性該屬性為 頁(yè)面準(zhǔn)備一個(gè)字符串屬性值是某個(gè)字符串例如<%@pageinfo=“wearestudents”可以在 頁(yè)面中使用方法獲取info屬性的屬性注:JSP轉(zhuǎn)譯成Java件時(shí),轉(zhuǎn)譯成的類是的一個(gè)子類,所以在JSP頁(yè)面中可以使用Servlet類的方法:getServletInfo()下面的例子13使用getServletInfo()方法獲info的屬性例子13(效果如圖2.10所示<%@pagecontentType="text/html;charset=GB2312"<%@pageinfo="我!" bgcolor=cyan><FONTS<P>誰(shuí)呀 Strings=getServletInfo();include

2.10獲取info如果需要在JSP頁(yè)面內(nèi)某處整體嵌入一個(gè)文件,就可以考慮使用這個(gè)指令。該指令語(yǔ)法如下:<%@includefile=文件的名字該指令的作用是在 頁(yè)面出現(xiàn)該指令的位置處,靜態(tài)插。一個(gè)文件入的文件必須是可和可使用的即該文件必須和當(dāng)前JSP頁(yè)面在同一Web服務(wù) 中所謂靜態(tài)插入就是當(dāng)前JSP頁(yè)面和插入的部分合并成一個(gè)新的JSP頁(yè)面,然后JSP引擎再將這個(gè)新的JSP頁(yè)面轉(zhuǎn)譯成Java類文件。因此,插入文件后,必須保證新合并成的JSP頁(yè)面符合JSP語(yǔ)則即能夠成為一個(gè)JSP頁(yè)面文件。比如,如果一個(gè)JSP頁(yè)面使用include指令插入另一個(gè)JSP文件,被插入的這個(gè)JSP頁(yè)面中有一個(gè)設(shè)置頁(yè)面contentType屬性的page指。<%@pagecontentType="text/html;charset=GB2312"而當(dāng)前JSP頁(yè)面已經(jīng)page指令設(shè)置contentType的屬性那么新合JSP頁(yè)面就出現(xiàn)了語(yǔ)法錯(cuò)誤,當(dāng)轉(zhuǎn)譯合并的JSP頁(yè)面到Java文件時(shí)就會(huì)失敗?!跋旅娴?4在JSP頁(yè)面靜態(tài)插入一個(gè)文本文件:o.txt,該文本文件的內(nèi)容是:好,很高興認(rèn)識(shí)呀文本文件必須和當(dāng)前JSP頁(yè)面在同一Web服務(wù)中?!袄?4(效果如圖2.11所示<%@pagecontentType="text/html;charset=GB2312"<BODY 圖2.11使用include指 <%@include o.txt"Example2_14.jspJSPExample2_14_1.jsp<%@pagecontentType="text/html;charset=GB2312"好,很高興認(rèn)識(shí)呀注:在Example2_14.jsp被轉(zhuǎn)譯成Java文件如果你對(duì)插入的文件o.txt進(jìn)行了修改,那么必須要重新將轉(zhuǎn)譯成java文件(重新保存頁(yè)面,然后再該頁(yè)面即可),否則只能看到修改前的o.txt的內(nèi)容。下面的例子15JSP頁(yè)面Example2_15.jsp中靜態(tài)插入一個(gè)文件:Computer.jsp<FORMaction=""method=post<INPUTtype="text"<BR><INPUTTYPE="submit"value="送出" }doublenumber=Integer.parseInt(a);} {out.print("<BR>"+"請(qǐng)輸入數(shù)字字符}圖2.12使用include指令靜態(tài)嵌入JSP文例子15(效果如圖2.12所示<%@pagecontentType="text/html;charset=GB2312"<BODYBgcolor=cyan><FONT<P>請(qǐng)輸入一個(gè)正數(shù),點(diǎn)擊按鈕求這個(gè)數(shù)的平<%@include注:Example2_15.jsp同于下JSP件:Example2_15_1.jsp<%@pagecontentType="text/html;charset=GB2312"<BODYBgcolor=cyan><FONT<P>請(qǐng)輸入一個(gè)正數(shù),點(diǎn)擊按鈕求這個(gè)數(shù)的平<FORMaction=""method=post<INPUTtype="text"<BR><INPUTTYPE="submit"value="送出" }doublenumber=Integer.parseInt(a);} {out.print("<BR>"+"請(qǐng)輸入數(shù)字字符}JSP動(dòng)作是一種特殊的,它影響 運(yùn)行時(shí)的功能includeinclude動(dòng)作<jsp:includepage=“文件的名字或<jsp:includepage=“文件的名字該動(dòng)作告訴JSP頁(yè)面動(dòng)態(tài)包含一個(gè)文件,即JSP頁(yè)面運(yùn)行時(shí)才將文件加入。與靜態(tài)插入文件的include指令不同,當(dāng)JSP引擎把JSP頁(yè)面轉(zhuǎn)Java文件時(shí),不把JSP頁(yè)面中動(dòng)作include所包含的文件JSP頁(yè)面合并一個(gè)JSP頁(yè)面,而是Java解釋器這個(gè)文件在JSP運(yùn)行(Java文件的字節(jié)碼文件被加載執(zhí)行)送到客戶端,由客戶端負(fù)責(zé)顯示;如果包含的文件是jsp文件,JSP負(fù)責(zé)顯示這些結(jié)果。注:include動(dòng)作與靜態(tài)插入文件的include指令有很大的不同,動(dòng)作是在執(zhí)行時(shí)才對(duì)包含的文件進(jìn)行處理,因此JSP,進(jìn)行了修改,那么運(yùn)行時(shí)看到所包含文件修改后的結(jié)果,而靜態(tài)include指令包含的文件如果發(fā)生了變化須要重新將JSP頁(yè)面轉(zhuǎn)譯成java文件(可將該JSP頁(yè)面重新保存,然后再,就可產(chǎn)生新的轉(zhuǎn)譯Java文件,注:書寫include動(dòng)作:<jsp:includepage…../>時(shí)要注意:“jspinclude”三者之間不要有空格。圖2.13用include動(dòng) 下面的例子16動(dòng)態(tài)包含兩個(gè)文件:image.html和 把Example2_16.jsp 頁(yè)面保存到Tomcat\Jakarta-tomcat-4.0\webapps\root,在root下又新建立了一個(gè)文件夾Myfile,o.txt存放在MyFile文件夾中im圖2.13用include動(dòng) <H4>你好,祝學(xué)習(xí)進(jìn)<BR>學(xué)習(xí)JSP要有Java語(yǔ)言的基<BR>要認(rèn)真學(xué)習(xí)JSP的基本語(yǔ)<image例子16(效果如圖2.13所示<%@pagecontentType="text/html;charset=GB2312"<BODYBGCOLOR=Cyan><FONT<P>加載的文<jsp:include <P>加載的圖<jsp:include由于動(dòng)作指令include是動(dòng)態(tài)地包含一個(gè)文件因此客戶可以通過(guò)HTML表單提交需要包含的文件的名字。在下面的例子17中,我們用Java 語(yǔ)言中的File 類列出了Tomcat\Jakarta-tomcat-4.0\webapps\root\Myfile下的所有的jsp文件,客戶通過(guò)表單,圖2.14使用include動(dòng)作加載JSP文例子17(效果如圖2.14所示<%@pagecontentType="text/html;charset=GB2312"<%@pageimport="java.io.*"<%!classFileJSPimplements{Stringstr=null;} booleanaccept(Filedir,String{return}}<BODYbgcolor=cyan><FONT<P>下面列出了服務(wù)器上的一些jsp FileJSPfile_jsp=newFileJSP("jsp");Stringfile_name[]=dir.list(file_jsp);for(int}<P>請(qǐng)輸入一個(gè)jsp文件的名字,加載jsp文件<FORMaction="Example2_17.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="送出"<%String <P>加載的效<jsp:includepage="<%=fileName param動(dòng)作param以“名字—值”對(duì)的形式為其它提供附加信息,這個(gè)與jsp:include、jsp:forward、jsp:plugin一起使用。param動(dòng)作 name=“名字 value=“指定給param的值當(dāng)該與jsp:include一起使用時(shí),可以將param中的值傳遞到include指令要加載的文件中去因此include動(dòng)作如果結(jié)合param可以在加載文件的過(guò)程中向該文件提供信息下面例子18動(dòng)態(tài)包含文件:tom.jsp,當(dāng)該文件被加載時(shí)獲取param中computer的值(獲取computer的值由JSP的內(nèi)置對(duì)象request調(diào)用getParameter方法完成)。<%@pagecontentType="text/html;charset=GB2312" intn=Integer.parseInt(str);intfor(int{}從1到<%=n%>的連續(xù)和例子18(效果如圖2.15所示<%@pagecontentType="text/html;charset=GB2312"圖2.15用param傳遞參數(shù)<P>加載文件效<jsp:include<jsp:paramname="computer"value="300"forwardforwar指令<jsp:forwardpage="要轉(zhuǎn)向的頁(yè)面"或<jsp:forwardpage="要轉(zhuǎn)向的頁(yè)面"該指令的作用是:從該指令處停止當(dāng)前頁(yè)面的繼續(xù)執(zhí)行,而轉(zhuǎn)向其它的一個(gè)JSP頁(yè)面。假設(shè)Example2_11.jsp 存放在Example2_2在d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/下。下面的在下面的JSP頁(yè)面中,首先隨機(jī)獲取一個(gè)數(shù),如果該數(shù)大于圖2.16Example2_19.jsp運(yùn)行幾次后,隨機(jī)出現(xiàn)的兩種運(yùn)行效果。例子19(效果如圖2.16所示<%@pagecontentType="text/html;charset=GB2312"{m<jsp:forwardm

2.16使用forward指令進(jìn)行頁(yè)面轉(zhuǎn)}{<jsp:forwardpage="Example2_2.jsp"} 這句話和下面的表達(dá)式的值能輸該指令也可以結(jié)合paam指令,向要轉(zhuǎn)到的頁(yè)面?zhèn)魉托畔ⅰO旅娴腅xample2_2.jsp頁(yè)面轉(zhuǎn)到come.jsp,并向轉(zhuǎn)到的come.jsp頁(yè)面?zhèn)鬟f一個(gè)數(shù)值,如圖2.17所示。<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FONT<%Stringstr=request.getParameter("number");doublen=Double.parseDouble(str);<P>您傳過(guò)來(lái)的數(shù)值是圖圖2.17用 例子20(效果如圖2.17所示<%@pagecontentType="text/html;charset=GB2312"<%double<jsp:forwardpage="come.jsp"<jsp:paramname="number"value="<%=i%>"plugin在頁(yè)面中使用普通的HTML標(biāo)記<apple….></apple>可以讓客戶運(yùn)行一個(gè)javaapplet小應(yīng)用程序但并不是所有的客戶的瀏覽器都支持javaapple小程序,如果你的小應(yīng)用程序使用了JDK1.2以后的類,那么,目前的IE5.5并不支持這Java小應(yīng)用程序。而使用plugin動(dòng)作可以保證客戶能執(zhí)行你的小應(yīng)用程序。該動(dòng)作指示JSP頁(yè)面加載javaplugin,該插件由客戶負(fù)責(zé)下載,并使用該插件來(lái)運(yùn)行Javaapplet。Plugin動(dòng)作<jsp:plugintype="applet"code="小應(yīng)用程序的字節(jié)碼文件"jreversion="java虛擬機(jī)版本號(hào)"width小程序?qū)挾戎?height="小程序高度值"提示信息:用來(lái)提示用戶的瀏覽器是否支持插件假設(shè)有javaapplet小程序,主類字節(jié)碼文件是:B.class,該文件存放在Root下。含有plugin的JSP文件Example2_21.jsp也存放在Root下<%@pagecontentType="text/html;charset=GB2312" width="200"height="260">PlugintagOBJECTorEMBEDnotsupportedby當(dāng)客戶上述JSP頁(yè)面時(shí)將導(dǎo)致登錄sun公司的Javaplugin,出現(xiàn)客戶選擇是否插件的界面,如圖2.18所示。圖2.18客戶選擇是否插件的界選擇“是再選擇同意,出現(xiàn)插件的界面,如 所示用戶插件完畢后,接受協(xié)就可以根據(jù)向?qū)б徊揭坏匕惭b插件了,如圖2.20所示。2.20安裝插件界安裝完畢后,小應(yīng)用程序就開(kāi)始用java的虛擬機(jī)(不再使用瀏覽器自帶的虛擬機(jī))加載執(zhí)行javaapplet小應(yīng)用程序了,如圖2.21所示(以后客戶再帶有plugin的JSP頁(yè)就能直接執(zhí)行該頁(yè)面中包含的javaapplet小應(yīng)用程序了。2.21用插件運(yùn)行的javaapplet效上面JSP頁(yè)面中包含的java小應(yīng)用程序是完全用javaswing編的,使用表格JTable組件技術(shù),來(lái)計(jì)算2階行列式的小程序。如果不使用插件,目前的瀏覽器,比如IE5.5,都無(wú)法運(yùn)行。以下是javaapplet小應(yīng)用程序的源代碼:B.java,該代碼摘自《Java2實(shí)用》(等編寫。importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassBextendsJAppletimplements JPanelp1,p2;Objectname[]={"1列","2列"};JButtonbutton;JTextFieldtext;publicvoid a=newbutton=newJButton("確定");text=newJTextField(8);p1=newJPanel();p2=newJPanel();p1.setLayout(newGridLayout(2,1));p1.add(newLabel("輸入2階行列式的元素"));p1.add(newLabel("輸入或修改用鼠標(biāo)點(diǎn)擊每使table=newJTable(a,name);}publicvoidactionPerformed(ActionEvent{doubled[][]=newdouble[2][2];doubleresult;for(int{for(int}}}}}注:JSP頁(yè)面javaapplet小程序不在同一文件下,plugin中應(yīng)增加codebase選項(xiàng),小程序所在的位置。比如,如果上述例子的B.class存放在Root的Myfile文件下。那么,Plugin標(biāo)<jsp:plugintype="applet"code="B.class"codebase="/Myfile"jreversion="1.2"width="300"height="260">PlugintagOBJECTorEMBEDnotsupportedby注:另外,在plugin中還可以增加如下的選項(xiàng),以便控javaappletaligin:取值是“bottom“topmiddle”、”或“right頁(yè)面的左面,頁(yè)面的其它部分在右面。Hspace:指定javaapplet與左右對(duì)比如文字圖象等之間的距Vspace:指定javaapplet與<jsp:plugintype="applet" vspace="60">PlugintagOBJECTorEMBEDnotsupportedbyuseBean該用來(lái)創(chuàng)建并使用一個(gè)javabeans,是非常重要的一個(gè)動(dòng)作,在第6章詳細(xì)討論。Sun公司的倡導(dǎo)是:用HTML完成JSP頁(yè)面的靜態(tài) 完成動(dòng)態(tài)部分,實(shí)現(xiàn)真正意義上的靜態(tài)和動(dòng)態(tài)分割第3JSP有些對(duì)象不用就可以在 頁(yè)面的部分使用這就是的內(nèi)置對(duì)JSP的內(nèi)置對(duì)象有:resquest、response、sessionapplicationout。以下一一介紹esponse和equest對(duì)象是JP的內(nèi)置對(duì)象較重要的兩個(gè),這兩個(gè)前,要先對(duì)HTTP協(xié)議WodWideWb底層協(xié)議作簡(jiǎn)單介紹。WordWideWeb是怎樣運(yùn)行的呢?在瀏覽器上鍵入一個(gè)正確的網(wǎng)址后,若一切順利,網(wǎng)頁(yè)就出現(xiàn)了。例如,在瀏覽器輸入欄中鍵入 ,Yahoo的主頁(yè)就出現(xiàn)在瀏覽器窗口這背使用瀏覽器從獲取HTML頁(yè)面時(shí),實(shí)際在使用HypertextTransferProtocol(HTTP)。HTTP協(xié)議規(guī)定了信息在Internet上的傳輸從獲取頁(yè)面時(shí),瀏覽器在上打開(kāi)了一個(gè)對(duì)網(wǎng)絡(luò)服務(wù)器的連接,并發(fā)出請(qǐng)求。服務(wù)器收到請(qǐng)求后回應(yīng),所以HTTP協(xié)議被稱作“請(qǐng)求和響應(yīng)”協(xié)議瀏覽器請(qǐng)求有某種結(jié)構(gòu),HTTP請(qǐng)求包括一個(gè)請(qǐng)求行、頭域和可 o.htm這是對(duì): 上頁(yè)面o.htm的HTTP請(qǐng)求的子。首行是請(qǐng)求行,規(guī)定了請(qǐng)求的方法、請(qǐng)求的資源及使用的HTTP上例中,請(qǐng)求的方法是“T”方法,此方法獲取特定的資源。上例中GET方法用來(lái)獲取名為.htm的網(wǎng)頁(yè)其它請(qǐng)求方法包括OST,HAD,DET,TRACE及PUT方法等。此例中的第二行是頭(header。Host頭規(guī)定了上文件的Internet地址。此例中,主機(jī)是 HTP內(nèi)容HTML表單上Submit鍵時(shí),該表單ACTION=“POST”或ACTION=“GET”特征,輸入表單的內(nèi)容都被發(fā)送到服務(wù)器上。該表單內(nèi)容POST方法或GET方法在請(qǐng)求的信服務(wù)器在收到請(qǐng)求時(shí),返回HTTP響應(yīng)。響應(yīng)也有某種結(jié)構(gòu),每HTTPJP協(xié)議、狀態(tài)代碼及文本信息。例如,若服務(wù)器請(qǐng)求出錯(cuò),則狀態(tài)行返回錯(cuò)誤及對(duì)錯(cuò)誤的描述,比如HTT/1.1404ObjectNotFond200OK”的狀態(tài)行。requestHTTP通信協(xié)議是客戶與服務(wù)器之間一種提交(請(qǐng)求)信息與響應(yīng)信息(request/respone)的通信協(xié)議。在JSP中,內(nèi)置對(duì)象request封客戶通常使用HTML表單向服務(wù)器的某個(gè)JSP頁(yè)面提交信單 method=get| “提交信息的目的地頁(yè)面提其中<Form>是表單method取值get或postGet方法和post方法的主要區(qū)別是:使get方法提交的信息會(huì)在提交的過(guò)程中顯示在瀏覽器的地址欄中,而post方法提交的信息不會(huì)顯示在地址欄中。提交包括:通過(guò)文本框、列表、文本區(qū)等,例如:<FORMaction="tom.jsp"method=“post”<INPUTtype="text"name="boy"value=“ok”<INPUTTYPE="submit"value="送出"name=該表單使用post方法向頁(yè)面to.jsp提交信息,提交信息的ok按鈕向服務(wù)器的JSP頁(yè)面tom.jsp提交信息。request對(duì)象可以getParameter(Strings)方法獲取該表單通過(guò)text提交的信息,比如:獲取客戶提交的信息request向tree.jsp提交信息:Iamastudent。tree.jsp通過(guò)request對(duì)象獲取表單提交的信息:包括text的值以及按鈕的值。在本章中所涉及到JSP頁(yè)面都保存Web服務(wù)的根:Root中,即D:tomcat/jakarta-tomcat-4.0/webapps/Root中。例子1(如圖3.1所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=green><FONT<FORMaction="tree.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="Enter"<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=green><FONT<P>獲取文本框提交的<%String<P>獲取按鈕的名<%String 3.1提交信息與獲取信在下面的例子2中,Example3_2.jsp通過(guò)表單向自己提交一個(gè)正數(shù),然后計(jì)算這個(gè)數(shù)的平3.2計(jì)算數(shù)的例子2(如圖3.2所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FONT action="Example3_2.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="Enter"<%StringtextContent=request.getParameter("girl");doublenumber=0,r=0;}try{number=Double.parseDouble(textContent);{r=Math.sqrt(number);out.print("<BR>"+String.valueOf(number)}{out.print("<BR>"+"請(qǐng)輸入一個(gè)正數(shù)}} {out.print("<BR>"+"請(qǐng)輸入數(shù)字字符}注:使用request對(duì)象獲取信息時(shí)要格外在上面的例子中StringtextContent那么,JSP引擎在運(yùn)行這個(gè)JSP頁(yè)面生成的字節(jié)碼文件時(shí),會(huì)使用了空對(duì)象,因?yàn)樵谶@個(gè)字節(jié)碼被執(zhí)行時(shí)(客戶請(qǐng)求頁(yè)面時(shí),客戶可能還沒(méi)有提交數(shù)據(jù),textContent還沒(méi)有被創(chuàng)建。如果你使用了空對(duì)象,即還沒(méi)有創(chuàng)建對(duì)象,就使用了該對(duì)象,Java示出現(xiàn)了NullPointerException異常,當(dāng)然如果你不使用空對(duì)象就不會(huì)出現(xiàn)異常。我們可以象上述例子為了避免在運(yùn)行時(shí)Java認(rèn)為我們StringtextContent=request.getParameter("girl");}處理漢字信息當(dāng)用request對(duì)象獲取客戶提交的漢字字符時(shí),會(huì)出現(xiàn)亂碼問(wèn)題,的字符串用ISO-8859-1進(jìn)行編碼存放到一個(gè)字節(jié)數(shù)組中,String str=newString(b);正確的顯示。下面的例3對(duì)例1按上述辦法做了改動(dòng),并將按鈕上的字變成漢語(yǔ),在文本框里輸入:“蘋果:apple:125$”,然后提交給3(如圖3.3示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=green><FONT<FORMaction="tree.jsp"method=post<INPUTtype="text"<INPUTTYPE="submit"value="提交"<%@pagecontentType="text/html;charset=GB2312"<P>獲取文本框提交的<%StringtextContent=request.getParameter("boy"); textContent=newString(b);<P>獲取按鈕的名<%StringbuttonName=request.getParameter("submit"); buttonName=newString(c);3.3提交和獲取含有漢字的信常用方法舉例當(dāng)客戶一個(gè)頁(yè)面時(shí),會(huì)提交一個(gè)HTTP請(qǐng)求給服務(wù)器的引擎,這個(gè)請(qǐng)求包括一個(gè)請(qǐng)求行、 頭和信息體,如下列host:localhost:8080accept-

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論