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

下載本文檔

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

文檔簡介

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

2.6使用程序片計算連續(xù)}<P>1100的連續(xù)和<%longsum;下面的例子9將例子8中的程序片分割成幾部2.7程序片分例子9(效果如圖2.7所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FontlongcontinueSum(int{intfor(int{}}<P>了一個long型變量<%long<P>然后調(diào)用方法<%<P>將調(diào)用方法continueSum得到的值顯示到<P>1101的連續(xù)和是<%= <%<P>您計算的項數(shù)超過100項了<P>您計算的項數(shù)沒有超過100}下面例子10的程序片負責(zé)服務(wù)器上的一個文件并將文件的圖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("文件不存在表達,下面的例子11計算表達式的例子11(效果如圖2.9所示<%@pagecontentType="text/html;charset=GB2312" bgcolor=cyan><FONT<P>Sin(0.9)3<p>3的平方 72 <P>5的平等

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

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

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

溫馨提示

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

評論

0/150

提交評論