第一篇:JSP編程實驗報告
JSP編程實驗報告
學生姓名:學生班級:學生學號:指導教師:實驗n(n-實驗順序號):實驗名稱
一、實驗目的二、實驗內容及步驟
三、源代碼
四、運行界面
五、收獲和體會
第二篇:JSP實驗報告
中南民族大學管理學院
學生實驗報告
課程名稱: JSP程序設計 年
級: 2010 專
業: 姓 名: 學 號: 指導教師:
實驗地點: 管理學院綜合實驗室
學年至 學第 學期
第一章 JSP簡介
實驗 Tomcat服務器的安裝與配置
一、實驗目的
本實驗的目的是讓學生掌握怎樣設置Web服務目錄、怎樣訪問Web服務目錄下的JSP頁面、怎樣修改Tomcat服務器的端口號。
二、實驗要求
1、將下載的apache-tomcat-6.0.13.zip解壓到硬盤某個分區,比如D。
2、在硬盤分區D下新建一個目錄,名字為student,見stuent設置為Web服務目錄,并為該Web服務目錄指定名字為good的虛擬目錄。
3、修改端口號為5678.在server.xml文件中找到修改端口號的部分,將端口號修改為5678.4、啟動Tomcat服務器。
5、用文本編輯器編寫一個簡單的JSP頁面biao.jsp,并保存到Web服務目錄student中。
6、用瀏覽器訪問Web服務目錄student中的jsp頁面biao.jsp。
三、實驗內容
1、Tomcat安裝成功并運行
2、編碼實現乘法表 3.代碼
四、實驗結果
biao.jsp頁面
五、實驗結果分析
1、默認的端口號為8080,若修改,在conf目錄下的server.xml文件中修改端口號。
2、設置虛擬目錄。在conf目錄下的server.xml中前加入:
3、Tomcat服務器必須保持啟動。第二章 JSP頁面與JSP標記 實驗1 JSP頁面的基本結構
一、實驗目的
本實驗的目的是讓學生掌握怎樣在JSP頁面中使用成員變量,怎樣使用Java程序片、Java表達式。
二、實驗要求
本實驗將用戶輸入的單詞按字典順序。需要編寫兩個JSP頁面,名字分別為inputWord.jsp和showDictionary.jsp。
1、inputWord.jsp的具體要求 該頁面有一個表單,用戶通過將該表單輸入若干個單詞,并提交給showDictionary.jsp頁面。
2、showDictionary.jsp的具體要求
該頁面負責排序單詞,并將排序的全部單詞顯示給用戶。
(1)該JSP頁面有個名字為dictionary、類型是TreeSet成員變量。
(2)該JSP頁面有public void addWord(String s)方法,該方法將參數s指定的字符串添加到成員變量dictionary中。
(3)該JSP頁面在程序片中操作dictionary,即顯示全部的單詞。
三、實驗內容
1)inputWord.jsp頁面有一個表單,用戶通過該表單輸入若干個單詞,并提交給showDictionary.jsp頁面。
2)showDictionary.jsp負責排序單詞,并將排序的全部單詞顯示給用戶。3)代碼
四、實驗結果
inputWord.jsp頁面
showDictionary.jsp頁面
五、實驗結果分析
1、jsp頁面由html標記、jsp標記、成員變了和方法的聲明、java程序片和java表達式組成。
2、jsp頁面中的成員變量是被所有用戶共享的變量。Java程序片可以操作成員變了,任何一個用戶對jsp頁面成員變量操作的結果,都會影響到其他用戶。
實驗2 JSP指令標記
一、實驗目的
本實驗的目的是讓學生掌握怎樣在JSP頁面中使用include指令標記在JSP頁面中靜態插入一個文件內容。
二、實驗要求
該實驗要求使用include指令標記使得每個頁面都包含有導航條。在進行實驗之前將名字是leader.txt的文件保存到本實驗所使用的web服務目錄中。實驗要求編寫3個JSP頁面,具體要求如下。first.jsp的具體要求
first.jsp使用include指令靜態插入leader.txt.second.jsp的具體要求
second.jsp使用include指令靜態插入leader.txt.third.jsp的具體要求
third.jsp使用include指令靜態插入leader.txt.三、實驗內容
leader.txt編寫3個JSP頁面。
1)frist.jsp使用include指令靜態插入leader.txt文本文件。2)second.jsp使用include指令靜態插入leader.txt文件。3)third.jsp使用include指令靜態插入leader.txt。3)代碼 1
2.3.4.4)
四、實驗結果
frist.jsp頁面
second.jsp頁面
third.jsp頁面
五、實驗結果分析
1、include指令標記是在jsp頁面出現該指令的位置處,靜態的插入一個文 件。被插入的文件必須是可訪問和可使用的。Include指令標記是在編譯 階段就處理所需要的文件,被處理的文件在邏輯和語法上依賴與當前jsp 頁面,優點是執行速度快。
實驗3 JSP動作標記
一、實驗目的
本實驗的目的是讓學生掌握怎樣在JSP頁面中使用include標記動態加載文件,使用forward實現頁面的轉向。
二、實驗要求
編寫3個JSP頁面:giveFileName.jsp、readFile.jsp和error.jsp。
1、giveFileName.jsp的具體要求
要求giveFileName.jsp頁面使用include動作標記動態加載readFile.jsp頁面,并將一個文件的名字比如ok.txt傳遞給被加載的readFile.jsp頁面。
2、readFile.jsp的具體要求
要求readFile.jsp負責根據giveFileName.jsp頁面傳遞過來的文件名字進行文件的讀取操作,如果該文件不存在就使用
Forward動作標記將用戶轉向error.jsp頁面。
3、error.jsp的具體要求 負責顯示錯誤信息。
三、實驗內容
1)giveFileName.jsp頁面使用include動作標記動態加載readFtle.jsp頁面,并將一個文件的名字ok.txt傳遞給被加載的readFtle.jsp頁面。
2)readFile.jsp頁面負責根據giveFileName.jsp頁面傳遞過來的文件名字進行文件的讀取操作,如果該文件不存在就使用forward動作標記將用戶轉向error.jsp。
3)error.jsp負責顯示錯誤信息。4)代碼
四、實驗結果
giveFileName.jsp頁面
error.jsp頁面
五、實驗結果分析
1、include動作標記是在jsp頁面運行時才處理加載的文件,被加載的文件在邏輯和語 法上獨立與當前jsp頁面,include指令標記可以使用param子標記向被加載的jsp 文件傳遞信息。第三章 Tag文件與Tag標記
實驗1 JSP頁面的基本結構
一、實驗目的
本實驗的目的是讓學生靈活掌握在Tag標記中使用標記體。
二、實驗要求
編寫一個JSP頁面giveMess.jsp和一個Tag文件handleMess.tag。JSP頁面通過調用Tag文件在表格中的單元格顯示文本,該JSP頁面通過使用標記體將要顯示的文件傳遞給被調用的Tag文件。
三、實驗內容
1、giveMess.jsp頁面使用帶標記體的Tag標記來調用Tag文件,其中標記體是一行文本,如下所示:
2、handelMess.tag使用
3、分別寫出giveMess.jsp和handelMess.tag的代碼。4.代碼
四、實驗結果
giveMess.jsp頁面
五、實驗結果分析
1、tag文件中可以有html標記符、特殊的指令標記、成員變了和方法、java程序片和java表達式。
2、jsp頁面使用tag標記動態執行一個tag文件。
3、當jsp頁面調用一個tag文件時可能希望動態地向該tag文件傳遞信息,那么就可以使用帶有標記體的tag標記來執行一個tag文件。
實驗2 使用attribute指令
一、實驗目的
本實驗的目的是讓學生靈活掌握在Tag標記中使用attribute指令。
二、實驗要求
編寫一個ShowCalendar.tag文件,該Tag文件負責顯示日歷。編寫一個JSP頁面giveYearMonth.jsp,該JSP頁面使用Tag標記調用ShowCalendar.tag文件,并且向ShowCalendar.tag文件傳遞年份和月份。
三、實驗內容
1、giveYearMonth.jsp通過tag標記調用ShowCalendar.tag文件,并且向ShowCalendar.tag文件傳遞年份和月份。
2、ShowCalendar.tag文件根據jsp頁面傳遞過來的年份和月份顯示日歷。該文件能對jsp頁面傳遞過來的數據進行判斷,比如,如果jsp頁面傳遞過來的數據不是數值型數據,tag文件負責顯示錯誤信息。4.代碼
四、實驗結果
giveYearMonth.jsp頁面
五、實驗結果分析
1、一個tag文件中通過使用attribute指令,使得jsp頁面在調用tag文件時,可以 向該tag文件中的對象傳遞一個引用。tag文件中使用attribute指令:
<%@ attribute name=“對象名字” required=“true”|“false” type=“對象的類型”%>
實驗3 使用variable指令
一、實驗目的
本實驗的目的是讓學生靈活掌握在Tag標記中使用variable指令。
二、實驗要求
編寫一個Tag文件GetWord.tag,負責分解出字符串中的全部單詞,并將分解出的全部單詞返還給調用該Tag文件的JSP頁面。編寫一個JSP頁面giveSoring.jsp,該頁面負責向Tag文件傳遞一個由英文單詞構成的字符串,并負責顯示Tag文件返回的全部單詞。
三、實驗內容
1、giveSoring.jsp通過tag標記調用GetWord.tag,并傳遞一個由英文單詞構成的字符串,顯示tag文件返回的全部單詞。
2、GetWord.tag使用attibute指令得到jsp頁面傳遞過來的字符串,并用vatiable指令返回全部的單詞。
3.代碼
四、實驗結果 giveSoring.jsp頁面
五、實驗結果分析
1、Tag文件可以使用variable指令把一個對象返回給調用它的jsp頁面
Tag文件使用variable指令給出返回的對象的名字、類型和有效范圍:
<%@ variable name-given=“對象名字” variable-class=“對象的類型” scope=“有效范圍”%>
第4章 JSP內置對象 實驗1 request對象
一、實驗目的
本實驗的目的是讓學生掌握怎樣在JSP中使用內置對象request。
二、實驗要求
通過JSP頁面和Tag文件實現數字的四則運算,要求編寫兩個JSP頁面inputNumber.jsp和receiveNumber.jsp及一個Tag文件Computer.tag。receiveNumber.jsp使用內置對象接受inputNumber.jsp提交的數據,然后將計數任務交給Tag文件Computer.tag去完成。
三、實驗內容
1)inputNumber.jsp頁面提供一個表單,用戶可以通過表單輸入兩個數、選擇四則運算符號,并將輸入的兩個數和所選擇的運算符號提交給receiveNumber.jsp頁面。
2)receiveNumber.jsp使用內置對象inputNumber.jsp頁面提交的數據,然后將計算任務交給Tag文件Computer.tag去完成。
3)要求Computer.tag使用attribute指令得到receiveNumber.jsp頁面傳遞過來的書和運算符號,使用variable指令將運算結果返回給receiveNumber.jsp頁面。
4)代碼
四、實驗結果
inputNumber.jsp頁面
receiveNumber.jsp頁面
五:實驗結果分析
1、內置對象request的作用就是用來接收客戶端提交的請求
2、request對象用的比較多的方法是getParameter方法。
request對象的getParameter方法根據指定的參數,獲取客戶端提交的信息。
其語法規則如下:
<% String name=request.getParameter(“txtName”)%>
其中,name是一個字符串變量。txtName是客戶端提交信息中的一個字段名。
3、下面的就是在實驗里面request的使用 <% String a=request.getParameter(“numberOne”);String b=request.getParameter(“numberTwo”);String operator=request.getParameter(“operator”)
實驗2 responese對象
一、實驗目的
本實驗的目的是掌握怎樣使用response對象動態響應用戶的請求。
二、實驗要求
編寫兩個JSP頁面inputRadius.jsp和drawCircle.jsp頁面,drawCircle.jsp頁面使用response對象做出動態響應。
三、實驗內容
1)inputRadius.jsp提供表單,用戶在表單中輸入一個代表圓的半徑的數字,提交給drawCircle.jsp頁面。
2)drawCircle.jsp頁面首先使用request對象獲得inputRadius.jsp提交的數字,然后根據數字的大小做出不同的響應。如果數字小于等于0或者大于100,response對象調用setCountType(String s)方法將contentType屬性的值設置為text/plain,同時輸出“半徑不合理”;如果數字大于0并且小于等于100,response對象調用setContentType(String s)方法將contentType屬性的值設置為image/jpeg,并繪制一個圓;如果用戶在inputRadius.jsp頁面輸入了非數字,response對象調用sendRedirect(URL url)方法將用戶重定向到inputRadius.jsp。
3)代碼
四、實驗結果
1、在輸入要求的范圍以內:
inputRadius.jsp頁面
drawCircle.jsp頁面
2、當輸入的數據不符合要求的結果顯示:
inputRadius.jsp頁面
drawCircle.jsp頁面
五、實驗結果分析:
1、response的作用就是把服務器端的數據以HTTP的格式發送到客戶端瀏覽器
2、與request相比,它的功能和request對象的功能相反。request對象用于得到用戶提交的信息而response對象是向用戶發送信息,兩者結合起來完成動態頁面的交互功能。
3、response對象的主要方法:
sendRedirect():頁面重定向方法 setStatus():設置狀態行方法
setContentType():設置文本類型方法
實驗3 session對象
一、實驗目的
本實驗的目的是讓學生掌握怎樣使用session對象存儲和用戶有關的數據。
二、實驗要求
使用session對象模擬購物車。編寫兩個JSP頁面choiceBook.jsp和orderForm.jsp。
三、實驗內容 1)用戶在choiceBook.jsp頁面通過超鏈接將自己要購買的圖書信息傳遞到orderForm.jsp頁面。
2)orderForm頁面將用戶購買的圖書信息存儲到session對象中,然后生成一個圖書訂單并顯示給用戶。
3)代碼
四、實驗結果:
choiceBook.jsp頁面
orderForm頁面
五、實驗結果分析:
1、session的作用就是記住客戶的連接信息,可以使用會話對象(session)。session對象記錄了每個客戶與服務器的連接信息
2、判斷session是否失效有三種情況1)、客戶是否關閉瀏覽器。2)、是否到達最大的發呆時間3)、是否調用validate()函數
3、session對象常用方法:
setAttribute(String name,java.lang.Object value):設定指定名字的屬性值,并且把它存儲在session對象中。getAttribute(String name):獲得指定名字的屬性,如果該屬性不存在,將會返回null
第5章 JSP中的文件操作(實驗)實驗1 使用文件字節流讀寫文件
1、相關知識點。
Fileunputstream流以字節(byte)為單位順序地讀取文件,只要不關閉流,每次調用read的方法就書訊地讀取源中其余的內容,直接原到尾末或流被關閉。
Fileunputstream流以字節(byte)為單位順序地寫文件,只要不關閉流,每次調用writer方法就順序地向輸出流寫入內容。2.實驗目的。
本實驗的目的是掌握使用文件輸入,輸出字節流讀寫文件。3.實驗要求。
1)giveContent.jsp頁面提供一個表單,要求該表單提供一個text文件輸入框、select下拉列表和一個TextArea文本區,用戶可以在text輸入框中輸入文件的名字、在select下拉列表選擇一個目錄、通過TextArea輸入多行文本。
2)writeContent.jsp頁面首先獲得giveContent.jsp頁面提交的文件所在目錄、名字以及TextArea文本區中的內容傳遞給WriteTag.tag。
3)lookContent.jsp頁面提供一個表單,該表單提供兩個text文本輸入框,用戶可以在這兩個text文本框中輸入目錄和文件名字。單擊表單的“提交”按鈕將text中輸入的文件目錄以及文件名字提交給readContent.jsp。
4)readContent.jsp頁面首先獲得lookContent.jsp頁面提交的文件目錄、名字,然后使用Tag標記調用Tag文件ReadTag.tag,并將文件所在目錄、名字傳遞給ReadTag.tag。
5)writeTag.tag文件使用attribute指令獲得writeCintent.jsp頁面傳遞過來的文件目錄 文件名字和文件內容,然后使用文件字節輸入流將文件內容寫入到文件中,給文件所在目錄就是writeCintent.jsp頁面傳遞過來的文家目錄,名字就是writeCintent.jsp頁面傳遞過來的文家名字。
6)ReadTag。Tag的具體要求
Read.Tag文件使用attribute指令獲得readContent.jsp頁面傳遞過來的文件目錄 文件名字和文件內容,然后使用文件字節輸入流讀取文件,并負責現實所讀取的內容。
7)代碼
4、實驗結果:
giveContent.jsp頁面
writeContent.jsp頁面
lookContent.jsp頁面
readContent.jsp頁面
5、實驗結果分析
1、把輸入流的指向稱做源,程序從指向源的輸入流中讀取源中的數據。而輸出流的指向是數據要去的一個目的地,程序通過向輸出流中寫入數據把信息傳遞到目的地。所有字節輸入流類都是InputStream(輸入流)抽象類的子類,而所有字節輸出流都是OutputStream(輸出流)抽象類的子類。
2、int read(): 輸入流調用該方法從源中讀取單個字節的數據,該方法返 回字節值,如果未讀出字節就返回-1。
3、void write(int n): 輸出流調用該方法向輸出流寫入單個字節
實驗2 使用文件字節流加密文件
1、相關知識點
fileinputstream流和filereader流都是順序的讀取文件,只要不關閉,每次調用read方法就順序的讀取源中其余的內容,只到源的末尾或流被關閉;二者的區別是fileinputstream流以字節為單位讀取文件,filereader流以字符為單位讀取文件
Fileoutstream流和filewtiter流順序地寫文件,只要不關閉流,每次調用writer方法的就順序的向輸出流寫入內容,只到流被關閉。二者額區別是fileoutstream流以字節為單位些文件,filewtiter流以字符為單位文件
2、實驗目的
本實驗目的是掌握使用文件字符輸入輸出讀寫文件
3、實驗要求
編寫3個jsp頁面inputcontent,jsp write,jsp read.jsp ,兩個tag文件write.Tag和read.Tag 1).inputcontent,jsp的具體要求
inputcontent,jsp頁面提供一個表單,要求該表單提供textarea的輸入界面 用戶可以通過textarea的輸入界面多行文本提供交給write。Jsp界面 2.)write,jsp 的具體要求
write,jsp頁面調用一個tag文件write,jsp將inputcontent,jsp 頁面提交的文本信息加密后寫入文件save.txt中。
3)read.jsp 的具體要求
read.jsp 頁面提供一個表單,該表單提供兩個單選按鈕,名字分別是讀取加密的文件和讀取解密的文件 該頁面選中的單選按鈕的值提交給本頁面如果該頁面提交的值是單選按鈕讀取加密的文件的值 該頁面調用tag文件read.tag讀取文件save.txt如果該頁面提交的值是單選按鈕讀取解密文件的值,該頁面負責顯示read.tag文件返回的有關信息 4)write.Tag的具體要求
write.Tag文件使用attribute指令獲得write.jsp頁面傳遞過來的文本信息,并使用文本文件輸出流其寫入到文件save.txt 5)read.Tag的具體要求 read.Tag文件使用文件輸入流讀取文件save.txt,并根據read.jsp的要求決定是否進行 6)代碼
四、實驗結果:
7)inputContent.jsp頁面
8)write.jsp頁面
9)read.jsp頁面
10)
五、實驗結果分析:
11)
1、FileInputStream流和FileReader流都是順序的讀取文件,只要不關閉流。每次調用read方法就順利的讀取源中其余的內容,直到源的末尾或流被關閉。兩者的區別是Fileinputstream流以字節為單位讀取文件,FileReader流以字符為單位讀取文件。
12)
2、FileOutStream流和FileReader流都是順序的寫文件,只要不關閉文件,每次調用write方法就順序的向輸出流寫入內容,直到流被關閉。二者的區別是FileOutStream流以字節為單位讀取文件,FileReader流以字符為單位讀取文件。
實驗3 使用數據流讀寫Java數據
1、實驗目的
本實驗的目的是掌握使用數據流讀寫Java數據。
2、實驗要求
編寫兩個JSP頁面writeData.jsp和readData.jsp。
3、實驗內容
1)writeData.jsp頁面使用Java程序片將一個int型數據、一個long型數據、一個char型數據、一個String型數據和一個double型數據寫入到名字為javaData.data的文件中。
2)readData.jsp頁面讀取javaData.data文件中的數據并顯示出來。3)代碼
4、實驗結果
writeData.jsp頁面
readData.jsp頁面
5、實驗結果分析
1、Java使用流(stream)來執行輸入輸出(I/O)的功能,流是一種數據的源頭和目的之 間的通信途徑.用于讀入數據稱為輸入流(input stream), 用于寫出數據稱為輸出流(output stream).2、當使用流時需要使用java.io包,因此在涉及數據流操作的程序中都要先導入 java.io包:import java.io.*;
第六章 JSP中使用數據庫
要求在webapps目錄下新建一個web服務目錄chapter6。除特別要求外,本章實驗所涉及的jsp頁面均保存在chapter6中;tag文件保存在chapter6web-inttags目錄中。
實驗中用到的數據庫為book,其中的表為bookform表。在進行實驗之前首先完成下列任務:
1、使用microsoft access 2003 創建一個數據庫book(book.mdb)。
2、在數據庫book中創建名名字為bookform的表,表的字段及屬性如圖6-1所示。
3、講數據庫book設置為名字為information的數據源。
實驗1 查詢記錄
1、相關知識點
本實驗使用jdbc-odbc橋接器方式和數據庫建立連接,查詢數據庫中表的記錄的步驟是:(1)與數據庫information建立連接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement對象;
Statement sql=con.createStatement();(3)向數據庫發送關于查詢記錄的sql語句。返回查詢結果,即Resultset對象
2、實驗目的
本實驗的目的是掌握使用jdbc查詢數據庫中表的記錄。
3、實驗要求
編寫一個jsp頁面inputMess.jsp。編寫一個tag文件FindBook.tag。1)inputMess.jsp的具體要求
inputMess.jsp頁面提供表單。表單允許用戶輸入要查詢的內容,以及選擇針對該內容的查詢條件,比如,輸入“實用”,那么可以指定該內容是書名的一部分或作者姓名等。inputMess.jsp頁面查詢條件條件提交給當前頁面,當前頁面調用FindBook.tag文件完成查詢操作。2)FindBook.tag的具體要求
FindBook.tag文件的使用attribute指令獲得inputMess.jsp頁面傳過來的字段的查詢條件,然后與數據源information建立連接、根據得到的查詢條件查詢bookForm表。FindBook.tag文件使用variable指令的將查詢結果返回給inputMess.jsp頁面。
4、jsp頁面的效果示例
inputMess.jsp的效果如圖6-2所示。
5、參考代碼
可以按照實驗要求,參考本代碼編寫代碼。1)jsp頁面參考代碼、實驗結果
inputMess.jsp
7、實驗結果分析:
1、DriverManager類:用語跟蹤可用的JDBC驅動程序并產生數據庫連接。
2、Connection接口:用于取得數據庫信息、生成數據庫語句,并管理數據庫事務。
3、Statement接口:用于在基層連接上運行SQL語句,并且生成一個結果集。
4、查詢結果一般封裝在ResultSet對象中。ResultSet實際上是一張數據表。ResultSet對象有多種方法用來從查詢結果中讀取數據
5、在tag文件通過使用 attribute指令,就可以讓調用該tag文件的jsp頁面向該tag文件傳遞在jsp頁面輸入的查詢內容的數據。tag文件通過使用variable屬性可以從tag文件向jap頁面返回符合查詢條件的內容的數據
實驗2 更新記錄
1、相關知識點
本實驗使用jdbc-odbc橋接器方式和數據庫建立連接,查詢數據庫中表的記錄的步驟如下:(1)與數據庫information建立連接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement對象;
Statement sql=con.createStatement();(3)向數據庫發送關于更新記錄的sql語句: int m=sql.executeUpdate(更新記錄的sql語句);更新成功m的值為1,否則為0。
2、實驗目的
本實驗的目的是掌握使用jdbc更新數據庫中表的記錄。
3、實驗要求
編寫一個jsp頁面updateRecord.jsp和兩個tag文件UpdateRecord.tag、GetRecord.tag。updateRecord.jsp負責調用GetRecord.tag文件,顯示GetRecord.tag返回待更新的記錄的有關字段的值;updateRecord.jsp調用UpdateRecord.tag文件,并顯示UpdateRecord.tag返回的有關更新記錄是否成功的信息。1)updateRecord.jsp的具體要求 updateRecord.jsp頁面提供一個表單,該表單允許用戶輸入某種圖書的isbn號以及針對該isbn號的圖書的更新信息;該頁面負責將圖書的isbn號傳遞給GetRecord.tag,將圖書的更新信息傳遞給UpdateRecord.tag。2)GetRecord.tag的具體要求
GetRecord.tag文件使用attribute指令獲得updateRecord.jsp頁面傳遞過來的圖書的isbn號,并顯示和該圖書對應的記錄。3)UpdateRecord.tag的具體要求
UpdateRecord.tag文件使用attribute指令獲得updateRecord.jsp頁面傳遞過來的圖書更新信息,然后更新數據庫中bookForm表中的記錄,并返回更新成功的消息給updateRecord.jsp頁面。
4、jsp頁面效果示例
updateRecord.jsp的效果如圖6-3所示。
5、參考代碼
6、實驗結果
updateRecord.jsp
7、實驗結果分析
1、在數據庫的連接于實驗一是一樣的,只是調用的方法不一樣,在查詢時Statement對象調用方法public int executeUpdate(String sql)
2、在jsp頁面輸入圖書的ISBN號,GetRecord.tag文件使用attribute指令獲得updateRecord.jsp頁面傳遞過來的圖書的ISBN號,在數據庫里進行查找,并顯示和該圖書對應的記錄
3、UpdateRecord.tag文件使用attribute指令獲得updateRecord.jsp頁面傳遞過來的圖書更新信息即圖書價錢的變化從39到25.5,然后更新數據庫中bookForm表中的記錄,并返回更新是否成功的消息給updateRecord.jsp頁面。這樣,如果在查詢該圖書,那么顯示的信息就是更新后的。
實驗3 刪除記錄
1、相關知識點
本實驗使用jdbc-odbc橋接器方式和數據庫建立連接,那么刪除數據庫中表的記錄的步驟如下:
(1)與數據庫information建立連接;
Connection con=DriverManager.get Connection(‘jdbc:odbc: information’);(2)返回Statement對象;
Statement sql=con.createStatement();(3)向數據庫發送關于刪除記錄的sql語句: int m=sql.executeUpdate(更新記錄的sql語句);刪除成功m的值為1,否則為0。
2、實驗目的
本實驗的目的是掌握使用jdbc刪除數據庫中表的記錄。
3、實驗要求
編寫一個jsp頁面inputDeletedISBN.jsp和一個tag文件DelRecord.jsp.1)inputDeletedISBN.jsp的具體要求
inputDeletedISBN.jsp頁面提供一個表單,該表單允許用戶圖書的ISBN提交到本頁面。2)DelRecord.jsp的具體要求
inputDeletedISBN.jsp頁面首先獲得本頁面提交的圖書的ISBN,然后使用tag標記調用DelRecord.jsp刪除數據庫中表的相應的記錄。
4、jsp頁面效果示例
inputDeletedISBN.jsp的效果如圖6-4所示:
5、參考代碼
可以按照實驗要求,參考本代碼編寫代碼。
6、實驗結果
inputDeletedISBN.jsp
7、實驗結果分析:
1、在連接方法和所用的方法都與更新語句相同,因為executeUpdate()方法執行SQL的INSERT,UPDATE或DELETE語句,返回int值,給出受查詢影響的行數
2、將圖書的ISBN輸入到件jsp頁面,然后由tag文件進行相應的處理
3、將滿足條件的圖書直接刪除,并將結果顯示在本頁面。
第七章 jsp與javabean 要求在webapps目錄下新建一個web服務目錄chapter7。除特別要求外,本章實驗所涉及的jsp頁面均保存在chapter7中。實驗涉及的Javabean的包名均為bean.date,因此,要求在chapter7下建立子目錄webclassesbeandate,Javabean的字節碼文件保存在該子目錄中。
實驗1 有效范圍為request的bean 1.相關知識點
JSP頁面使用useBean標記調用一個有效范圍是request的bean:
本實驗的目的是掌握使用有效范圍是request的bean的存儲信息。3.實驗要求
編寫一個JSP頁面inputAndShow.JSP和一個名字為computer的javabean,其中computer由pc.class類負責創建。
1)inputAndShow.jsp的具體要求
inputAndShow.jsp頁面提供一個表單。其中表單允許用戶輸入計算機的品牌 型號和生產日期,該表單將用戶輸入的信息提交給當前調用名字為compter的bean,并使用表單提交的數據設置computer的有關屬性的值,然后顯示compter的各個屬性值。2)pc.java的具體要求
編寫的pc.java應當有描述計算機品牌 型號 生產日期的屬性,并提供相應的getXxx和setXxx方法,來獲取和修復這些屬性的值。Pc.java中試用package語句,起的包名是bean.data。將pc.java編譯后的字節碼文件pc.class保存到chapter7WEB-INFclassesbeandata的目錄中、4.JSP頁面效果示列
inputAndShow.jsp的效果如圖:
5、參考代碼
可以按照實驗要求,參考本代碼編寫代碼。1)jsp頁面參考代碼、實驗結果
inputAndShow.jsp頁面
7、實驗結果分析
1、JavaBean是一種可復用,跨平臺的組件。
2、如果request的bean那么request是用戶請求訪問的當前組件、以及和當前web組件共享同一用戶請求的web組件。范圍是指在一個jsp網頁發出請求到另一個jsp網頁之間,隨后這個屬性就失效,設定request的范圍時可利用request對象中的setattribute()和getattribute(),簡單的講就是客戶端的一次請求。
實驗2 有效范圍為session的bean 1.相關知識點
JSP頁面使用useBean標記調用一個有效范圍是session的bean:
本實驗目的是讓學生掌握使用有效范圍是session的bean顯示計算機的信息,3.實驗要求
本實驗2要求和實驗1類似,但是和實驗1不同的是,要求編寫兩個jsp頁面input.jsp和show,jsp。編寫一個名字為compter的javabean,其中compter由pc.class類負責創建。
1)input.jsp的具體要求
input.jsp頁面提供一個表單。其中表單允許用戶輸入計算機的品牌 型號和生產日期,該表單將用戶輸入的信息提交給當前調用名字為compter的bean,并使用表單提交的數據設置computer的有關屬性的值。要求在input.jsp提供一個超鏈接以便用戶單機這個超鏈接訪問show.jsp頁面。13)show.jsp的具體要求
Show.jsp調用名字為computer的bean,并顯示bean的各個屬性的值。3)pc.java的具體要求
編寫的pc.java應當有描述計算機品牌 型號 生產日期的屬性,并提供相應的getXxx和setXxx方法,來獲取和修復這些屬性的值。Pc.java中試用package語句,起的包名是bean.data。將pc.java編譯后的字節碼文件pc.class保存到chapter7WEB-INFclassesbeandata的目錄中。4.JSP頁面效果示列 Input.jsp的效果如圖
show.jsp的效果如圖
6、實驗結果
input.jsp頁面
Show.jsp頁面
7、實驗結果分析
1、session就是JavaBean對象被創建后,一直存在于當前回話中,在同一會話中,共享同一JavaBean
2、session基于會話的,當用戶網頁關閉的話,session就清空了或是到達了session最大的發呆時間。
實驗3 有效范圍application的bean 1.相關知識點
JSP頁面使用useBean標記調用一個有效范圍是application的bean:
本實驗目的是掌握使用有效范圍是application的bean制作一個簡單留言板。3.實驗要求
要求編寫兩個jsp頁面inputMess.jsp和show.jsp。編寫一個名字為board的javabean,其中board由MessBoard.class類負責創建.。第6章 inputMess.jsp的具體要求
inputMess.jsp頁面提供一個表單。其中表單允許用戶輸入留言者的姓名 留言標題和留言內容,該表單將用戶輸入的信息提交的當前頁面,當前頁面調用名字為board的bean,并使用表單提交的數據設置board的有關屬性的值。要求在inputMess.jsp中提供一個連接,已便用戶單擊這個超鏈接是訪問show.jsp頁面 第7章 show.jsp的具體要求
Show.jsp調用名字為board的bean,并顯示該bean的allMessage屬性的值 3)MessBoard.class的具體要求
編寫MessBoard.java應當有刻畫留言者的姓名.留言標題 和留言內容屬性,并刻畫全部留言信息的屬性allMessage。將MessBoard.java保存到chapter7WEB-INFclassesbeandata的目錄中。4.JSP頁面效果示列
inputMess.jsp的效果如圖 show.jsp的效果如圖
5、參考代碼
6、實驗結果
inputMess.jsp頁面
show.jsp 頁面
7、實驗結果分析
1、如果在scope指定范圍內,該JavaBean已存在,則
3、Application:在服務器運行期間有效,當運行Tomcat時,就會生成Application,而且所有用戶在訪問相同服務目錄項的文件時,application對象都是相同的,當關閉Tomcat時,Application對象失效。
第三篇:JSP實驗報告(范文模版)
(1)創建名稱為“UserInfo.java”類文件,該文件的主要代碼如下:
package com;
public class UserInfo { private String username=“";
private String password=”“;
private String repassword=”“;
private String realname=”“;
private String sex=”“;
private String age=”“;
private String born=”“;
private String address=”“;
private String introduce=”“;
public String getUsername(){
return username;
} public void setUsername(String username){
this.username = username;
} public String getPassword(){
return password;
} public void setPassword(String password){
this.password = password;
} public String getRepassword(){
return repassword;
} public void setRepassword(String repassword){
this.repassword = repassword;
} public String getRealname(){
return realname;
} public void setRealname(String realname){
this.realname = realname;
} public String getSex(){
return sex;
} public void setSex(String sex){
this.sex = sex;
} public String getAge(){
return age;
} public void setAge(String age){
this.age = age;
} public String getBorn(){
return born;
} public void setBorn(String born){
this.born = born;
} public String getAddress(){
return address;
} public void setAddress(String address){
this.address = address;
} public String getIntroduce(){
return introduce;
} public void setIntroduce(String introduce){
this.introduce = introduce;
}
}
(2)用戶注冊頁面的代碼如下:
<%@ page contentType=”text/html;charset=gb2312“ language=”java“
im port=”java.sql.*“ errorPage=”“%>
第四篇:JSP內置對象實驗報告
JSP程序設計實驗報告
(三)院系:計算機科學與工程學院
【實驗題目】
JSP內置對象
【實驗目的】
1、了解JSP中4個內置對象request、reponse、session、pagecontext的基本概念。
2、理解JSP內置對象的常用方法的功能。
3、掌握JSP內置對象的應用。
【實驗內容】
1、request對象:客戶端的請求信息被封裝在request對象中,通過它才能了解到客戶的需求,然后做出響應。它是HttpServletRequest類的實例。
2、response對象:response對象包含了響應客戶請求的有關信息,但在JSP中很少直接用到它。它是HttpServletResponse類的實例。
3、session對象:session對象指的是客戶端與服務器的一次會話,從客戶連到服務器的一個WebApplication開始,直到客戶端與服務器斷開連接為止。
4、pageContext對象:pageContext對象提供了對JSP頁面內所有的對象及名字空間的訪問,也就是說他可以訪問到本頁所在的SESSION,也可以取本頁面所在的application的某一屬性值,他相當于頁面中所有功能的集大成者。
5、練習(自己完成)
【實驗代碼】
實驗1 request對象使用
<%@ page language=“java” import=“java.util.*” pageEncoding=“GBK”%> <%
%>
+ request.getServerName()+ “:” + request.getServerPort()+ path + “/”;
請求方式:<%=request.getMethod()%>
請求的資源:<%=request.getRequestURI()%>
請求用的協議:<%=request.getProtocol()%>
請求的文件名:<%=request.getServletPath()%>
請求的服務器的IP:<%=request.getServerName()%>
請求服務器的端口:<%=request.getServerPort()%>
客戶端IP地址:<%=request.getRemoteAddr()%>
客戶端主機名:<%=request.getRemoteHost()%>
表單提交來的值:<%=request.getParameter(”qwe“)%>
<%
%> String str = ”“;if(request.getParameter(”qwe“)!= null){ Enumeration enumt = request.getParameterNames();while(enumt.hasMoreElements()){ str = enumt.nextElement().toString();out.println(str + ”:“ + request.getParameter(str)+ ”
");} }
第五篇:網絡編程實驗報告
實驗一 TCP Socket API程序設計
一、預備知識
1.網絡編程基本概念
網絡上的計算機間的通訊,實質上是網絡中不同主機上的程序之間的通訊。在互聯網中使用IP地址來標識不同的主機,在網絡協議中使用端口號來標識主機上不同進程,即使用(IP地址,端口號)二元組。
套接字(Socket)用于描述IP地址和端口,是一個通信鏈的句柄,通信時一個網絡程序將要傳輸的一段信息寫入它所在主機的Socket中,該Socket通過與網絡接口卡相連的傳輸介質將這段信息發送到另一臺主機的Socket中,以供其他程序使用。
圖1-1 TCP通信流程 2.TCP通信流程
TCP程序是面向連接的,程序運行后,服務器一直處于監聽狀態,客戶端與服務器通信之前必須首先發起連接請求,由服務器接收請求并在雙方之間建立連接后才可以互相通信。
二、實驗目的
1.了解Winsock API編程原理; 2.掌握TCP Socket程序的編寫; 3.了解C/S模式的特點; 4.學會解決實驗中遇到的問題。
三、實驗任務
使用Winsock API相關類實現TCP Socket通信程序,并能成功運行。
四、實驗環境及工具
1.Windows2000/XP/7 2.Visual C++開發平臺 3.Visual Studio2010
五、實驗內容和步驟
參照《Visual C++網絡編程教程》書中81頁,TCP Socket API程序設計。連接:
void CChatClientDlg::OnConnect(){
WSADATA wsd;
//WSADATA結構
WSAStartup(MAKEWORD(2,2),&wsd);
//加載協議,使用Winsock 2.2版
m_client = socket(AF_INET,SOCK_STREAM,0);//創建流式套接字
//服務器地址
sockaddr_in serveraddr;
UpdateData();
if(ServerIP.IsBlank())
{
AfxMessageBox(“請指定服務器IP!”);
return;
}
if(sPort.IsEmpty())
{
AfxMessageBox(“請指定端口!”);
return;
}
//獲取服務器進程的IP和端口
BYTE nFild[4];
CString sIP;
ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
sIP.Format(“%d.%d.%d.%d”,nFild[0],nFild[1],nFild[2],nFild[3]);
//設置服務器地址結構的內容
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);
serveraddr.sin_port = htons(atoi(sPort));
//發起連接須指明要訪問的服務器進程地址,這個地址存儲在serveraddr中
if(connect(m_client,(sockaddr*)&serveraddr,sizeof(serveraddr))!= 0)
{
MessageBox(“連接失敗”);
return;
}
else
{
m_ListWords.AddString(“連接服務器成功!”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
ServerIP.EnableWindow();
ServerPort.EnableWindow();
m_ButtonConnect.EnableWindow();
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);
m_ButtonExit.EnableWindow();}
“發送”按鈕事件過程代碼如下:
void CChatClientDlg::OnSend(){
//向服務器發送信息
UpdateData();
if(m_sWords.IsEmpty())
{
AfxMessageBox(“發送的消息不能為空!”);
return;
}
//開始發送數據
int i = send(m_client,m_sWords.GetBuffer(0),m_sWords.GetLength(),0);
m_ListWords.AddString(“發送:” + m_sWords);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
closesocket(m_client);
ServerIP.EnableWindow();
ServerPort.EnableWindow();
m_ButtonConnect.EnableWindow();
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);
m_ButtonExit.EnableWindow();} “清空”按鈕的事件過程: m_ListWords.ResetContent();“關于”按鈕的事件過程: CAboutDlg dlgAbout;dlgAbout.DoModal();
服務器端: 開始監聽代碼:
void CChatServerDlg::OnListen(){
WSADATA wsd;
//WSADATA結構
WSAStartup(MAKEWORD(2,2),&wsd);
//加載協議棧,使用Winsock 2.2版
m_server = socket(AF_INET,SOCK_STREAM,0);//創建流式套接字
//將網絡中的事件關聯到窗口的消息函數中,定義消息號為20000,偵測客戶端的連接請求
WSAAsyncSelect(m_server,m_hWnd,20000,FD_ACCEPT);
m_client = 0;
BYTE nFild[4];
CString sIP;
UpdateData();
if(ServerIP.IsBlank())
{
AfxMessageBox(“請設置IP地址!”);
return;
}
if(sPort.IsEmpty())
{
AfxMessageBox(“請設置監聽端口!”);
return;
}
ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
sIP.Format(“%d.%d.%d.%d”,nFild[0],nFild[1],nFild[2],nFild[3]);
//服務器地址
sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);
serveraddr.sin_port = htons(atoi(sPort));
//綁定地址
if(bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)))
{
MessageBox(“綁定地址失敗.”);
return;
}
//監聽開始,服務器等待連接請求的到來
listen(m_server,5);
m_ListWords.AddString(“監聽開始:”);
m_ListWords.AddString(“地址” + sIP + “ 端口” + sPort);
m_ListWords.AddString(“等待客戶端連接??”);
//界面完善
m_ListWords.SetTopIndex(m_ListWords.GetCount()-1);
ServerIP.EnableWindow(false);
ServerPort.EnableWindow(false);
m_ButtonListen.EnableWindow(false);
m_ButtonStopListen.EnableWindow();
m_ButtonClear.EnableWindow();
m_ButtonExit.EnableWindow(false);} “停止監聽”按鈕事件過程代碼如下: void CChatServerDlg::OnStopListen(){
//停止監聽
closesocket(m_server);
m_ListWords.AddString(“停止監聽”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);} “斷開”按鈕事件過程代碼如下: void CChatServerDlg::OnDisconnect(){
closesocket(m_client);
m_ListWords.AddString(“與客戶端斷開”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
//界面完善
m_ButtonDisconnect.EnableWindow();
m_EditWords.EnableWindow();
m_ButtonSend.EnableWindow();} ReceiveData()函數代碼如下:
void CChatServerDlg::ReceiveData(){
//接收客戶端的數據
char buffer[1024];
int num = recv(m_client,buffer,1024,0);
buffer[num] = 0;
CString sTemp;
sTemp.Format(“收到:%s”,buffer);
m_ListWords.AddString(sTemp);//顯示信息
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
closesocket(m_client);//關閉與客戶端通信的Socket
WSAAsyncSelect(m_server,m_hWnd,20000,FD_ACCEPT);//準備接收新的客戶端連接
//界面完善
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);} 服務器的初始化代碼如下: //界面初始化
m_ButtonStopListen.EnableWindow(false);m_ButtonDisconnect.EnableWindow(false);m_ButtonClear.EnableWindow(false);m_EditWords.EnableWindow(false);m_ButtonSend.EnableWindow(false);
運行結果:
六、思考題
1.用Winsock API編程時,主要進行哪些通行的操作步驟? 2.闡述C/S模式的通信過程。答:
1.通行的操作
1.Winsock的打開(WSAStartup())。2.建立套接字(socket()或WSASocket())。3.地址綁定(bind())。
4.服務器監聽連接(listen())。
5.客戶端提出連接申請(connect()或WSAConnect())。6.服務器接收客戶端的連接請求(accept()或WSAAccept())。7.數據的發送(send()或WSASend(),sendto()或WSASendTo())。8.數據的接收(recv()或WSARecv(),recvfrom()或WSARecvfrom())。9.關閉套接字(closesocket())。10.關閉Winsock(WSACleanup())。
2通信過程