內容講義講稿_第1頁
內容講義講稿_第2頁
內容講義講稿_第3頁
內容講義講稿_第4頁
內容講義講稿_第5頁
已閱讀5頁,還剩911頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

2.6使用程序片計算連續}<P>1100的連續和<%longsum;下面的例子9將例子8中的程序片分割成幾部2.7程序片分例子9(效果如圖2.7所示<%@pagecontentType="text/html;charset=GB2312"<BODYbgcolor=cyan><FontlongcontinueSum(int{intfor(int{}}<P>了一個long型變量<%long<P>然后調用方法<%<P>將調用方法continueSum得到的值顯示到<P>1101的連續和是<%= <%<P>您計算的項數超過100項了<P>您計算的項數沒有超過100}下面例子10的程序片負責服務器上的一個文件并將文件的圖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注釋:在標記符號“<!--”和“-->”之間加入注釋內容<!- 注釋內 --JSP引擎把HTML注釋交給客戶,因此客戶通過瀏覽器查看的源文件時,能夠看到HTML 注釋:在標記符號“<%--”和“--%>”之間加入注釋內容<%- 注釋內容JSP引擎忽略JSP注釋,即在編譯JSP頁面時忽略JSP注釋例子<%@pagecontentType="text/html;charset=GB2312"<P>請輸入三角形的三個邊a,b,c的長度<!--以下是HTML表單,向服務器發送三角形的三個邊的長--<FORMaction="Example2_12.jsp"method=post<P>請輸入三角形邊a的長度<INPUTtype="text"<P>請輸入三角形邊b的長度<INPUTtype="text"<P>請輸入三角形邊c的長度<INPUTtype="text"<INPUTTYPE="submit"value="送出"<%--獲取客戶提交的數據<%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>"+"請輸入數字字符}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.*"當你為import指定多個屬性值時,JSP引擎把JSP頁面轉譯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指令的作用對整個頁面有效,與其書寫的位置無關,習慣把page指令寫在JSP頁面的最前language定義JSP頁面使用的語言,該屬性的值目前只能取"java"。為language屬性指定值的格式:<%@ language="java"page指令指定該屬性的值的話,那么,JSP頁面默認有page指<%@ language="java"import該屬性的作用是為JSP頁面引入Java包中的類這樣就可以在JSP頁面的程序片部分變量及函數部分表達式部分使用包中的類??梢詾樵搶傩灾付ǘ鄠€值,該屬性的值可以是Java某包中<%@ import="java.io.*","java.util.Date"JSP頁面import屬性已經有如下 java.lang.*" "javax.servlet.*"、"javax.servlet.jsp.*""javax.servlet.http.*"contentType屬性定義JSP頁面響應的MIME(MultipurposeInternetMailExtention)類型和JSP頁面字符的編碼。屬性值的一般形式是“MIME類型”或“MIME類型;charset=編碼”,如:<%@pagecontentType="text/html;charset=GB2312"session屬性用于設置是否需要使用內置的 對象session的屬性值可以是truefalsesessio屬性默認的屬性truebuffer屬性內置輸出流對象out負責將服務器的某些信息或運行結果發送到客戶端顯示,buffer屬性用來out設置的緩沖區的大小或不使用buffer屬性可以取值“none”,設置out不使用緩沖區。Buffer屬性的默認值是8kb。例如:<%@pagebuffer=“24kb”auotFlush指定 的緩沖區被填滿時,緩沖區是否自動刷新auotFlush可以取值true或false。auotFlush屬性的默認值是true。當auotFlush屬性取值false時,如果out的緩沖區填滿時,就會出現緩存溢出異常buffer的值是“none”時,auotFlush的值就不能設置成false。isThreadSafe用來設置JSP頁面是否可多線程isThreadSafe的屬性值truefalseisThreadSafe屬性值設置為true時,JSP頁面能同時響應多個客戶的請isThreadSafe屬性值設false時,JSP頁面同一時刻只能處理響應一個客戶的請求,其他客戶需排隊等待。isThreadSafe屬性的默認值是屬性該屬性為 頁面準備一個字符串屬性值是某個字符串例如<%@pageinfo=“wearestudents”可以在 頁面中使用方法獲取info屬性的屬性注:JSP轉譯成Java件時,轉譯成的類是的一個子類,所以在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頁面內某處整體嵌入一個文件,就可以考慮使用這個指令。該指令語法如下:<%@includefile=文件的名字該指令的作用是在 頁面出現該指令的位置處,靜態插。一個文件入的文件必須是可和可使用的即該文件必須和當前JSP頁面在同一Web服務 中所謂靜態插入就是當前JSP頁面和插入的部分合并成一個新的JSP頁面,然后JSP引擎再將這個新的JSP頁面轉譯成Java類文件。因此,插入文件后,必須保證新合并成的JSP頁面符合JSP語則即能夠成為一個JSP頁面文件。比如,如果一個JSP頁面使用include指令插入另一個JSP文件,被插入的這個JSP頁面中有一個設置頁面contentType屬性的page指。<%@pagecontentType="text/html;charset=GB2312"而當前JSP頁面已經page指令設置contentType的屬性那么新合JSP頁面就出現了語法錯誤,當轉譯合并的JSP頁面到Java文件時就會失敗?!跋旅娴?4在JSP頁面靜態插入一個文本文件:o.txt,該文本文件的內容是:好,很高興認識呀文本文件必須和當前JSP頁面在同一Web服務中?!袄?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被轉譯成Java文件如果你對插入的文件o.txt進行了修改,那么必須要重新將轉譯成java文件(重新保存頁面,然后再該頁面即可),否則只能看到修改前的o.txt的內容。下面的例子15JSP頁面Example2_15.jsp中靜態插入一個文件:Computer.jsp<FORMaction=""method=post<INPUTtype="text"<BR><INPUTTYPE="submit"value="送出" }doublenumber=Integer.parseInt(a);} {out.print("<BR>"+"請輸入數字字符}圖2.12使用include指令靜態嵌入JSP文例子15(效果如圖2.12所示<%@pagecontentType="text/html;charset=GB2312"<BODYBgcolor=cyan><FONT<P>請輸入一個正數,點擊按鈕求這個數的平<%@include注:Example2_15.jsp同于下JSP件:Example2_15_1.jsp<%@pagecontentType="text/html;charset=GB2312"<BODYBgcolor=cyan><FONT<P>請輸入一個正數,點擊按鈕求這個數的平<FORMaction=""method=post<INPUTtype="text"<BR><INPUTTYPE="submit"value="送出" }doublenumber=Integer.parseInt(a);} {out.print("<BR>"+"請輸入數字字符}JSP動作是一種特殊的,它影響 運行時的功能includeinclude動作<jsp:includepage=“文件的名字或<jsp:includepage=“文件的名字該動作告訴JSP頁面動態包含一個文件,即JSP頁面運行時才將文件加入。與靜態插入文件的include指令不同,當JSP引擎把JSP頁面轉Java文件時,不把JSP頁面中動作include所包含的文件JSP頁面合并一個JSP頁面,而是Java解釋器這個文件在JSP運行(Java文件的字節碼文件被加載執行)送到客戶端,由客戶端負責顯示;如果包含的文件是jsp文件,JSP負責顯示這些結果。注:include動作與靜態插入文件的include指令有很大的不同,動作是在執行時才對包含的文件進行處理,因此JSP,進行了修改,那么運行時看到所包含文件修改后的結果,而靜態include指令包含的文件如果發生了變化須要重新將JSP頁面轉譯成java文件(可將該JSP頁面重新保存,然后再,就可產生新的轉譯Java文件,注:書寫include動作:<jsp:includepage…../>時要注意:“jspinclude”三者之間不要有空格。圖2.13用include動 下面的例子16動態包含兩個文件:image.html和 把Example2_16.jsp 頁面保存到Tomcat\Jakarta-tomcat-4.0\webapps\root,在root下又新建立了一個文件夾Myfile,o.txt存放在MyFile文件夾中im圖2.13用include動 <H4>你好,祝學習進<BR>學習JSP要有Java語言的基<BR>要認真學習JSP的基本語<image例子16(效果如圖2.13所示<%@pagecontentType="text/html;charset=GB2312"<BODYBGCOLOR=Cyan><FONT<P>加載的文<jsp:include <P>加載的圖<jsp:include由于動作指令include是動態地包含一個文件因此客戶可以通過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>下面列出了服務器上的一些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的值當該與jsp:include一起使用時,可以將param中的值傳遞到include指令要加載的文件中去因此include動作如果結合param可以在加載文件的過程中向該文件提供信息下面例子18動態包含文件:tom.jsp,當該文件被加載時獲取param中computer的值(獲取computer的值由JSP的內置對象request調用getParameter方法完成)。<%@pagecontentType="text/html;charset=GB2312" intn=Integer.parseInt(str);intfor(int{}從1到<%=n%>的連續和例子18(效果如圖2.15所示<%@pagecontentType="text/html;charset=GB2312"圖2.15用param傳遞參數<P>加載文件效<jsp:include<jsp:paramname="computer"value="300"forwardforwar指令<jsp:forwardpage="要轉向的頁面"或<jsp:forwardpage="要轉向的頁面"該指令的作用是:從該指令處停止當前頁面的繼續執行,而轉向其它的一個JSP頁面。假設Example2_11.jsp 存放在Example2_2在d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/下。下面的在下面的JSP頁面中,首先隨機獲取一個數,如果該數大于圖2.16Example2_19.jsp運行幾次后,隨機出現的兩種運行效果。例子19(效果如圖2.16所示<%@pagecontentType="text/html;charset=GB2312"{m<jsp:forwardm

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

溫馨提示

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

評論

0/150

提交評論