課程設(shè)計簡單web服務(wù)器的設(shè)計與實現(xiàn)uml設(shè)計_第1頁
課程設(shè)計簡單web服務(wù)器的設(shè)計與實現(xiàn)uml設(shè)計_第2頁
課程設(shè)計簡單web服務(wù)器的設(shè)計與實現(xiàn)uml設(shè)計_第3頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、簡單web服務(wù)器的設(shè)計與實現(xiàn)一、設(shè)計內(nèi)容及設(shè)計要求WWW的工作基于客戶機(jī)/服務(wù)器計算模型,由Web瀏覽器(客戶機(jī))和 Web服務(wù)器(服務(wù)器)構(gòu)成, 兩者之間采用超文本傳送協(xié)議(HTTP)進(jìn)行通信,HTTP協(xié)議 關(guān)閉應(yīng)答。的作用原理包括四個步驟:連接,請求,應(yīng)答 ,設(shè)計內(nèi)容Web服務(wù)器是web中的關(guān)鍵部件,設(shè)計一個簡單的 Web服務(wù)器,為用戶提供簡 單的信息服務(wù)。設(shè)計要求本實驗要求完成一個簡單的 web服務(wù)器的設(shè)計與實現(xiàn),能夠通過HTTP Get命令 獲得一個簡單的HTML文件。設(shè)計目的通過web服務(wù)器的設(shè)計與實現(xiàn),可以達(dá)到以下目的:掌握網(wǎng)絡(luò)編程的知識與技 能;掌握HTTP協(xié)議的相關(guān)知識;熟悉網(wǎng)

2、絡(luò)軟件的開發(fā)過程,鍛煉解決實際問題 的能力。二、總體設(shè)計HTTP協(xié)議的作用原理包括四個步驟:連接:Web瀏覽器與 Web服務(wù)器建立連接,打開一個稱為 socket (套接字)的虛擬文件,此文 件的建立標(biāo)志著連接建立成功。請求:Web瀏覽器通過socket向Web服務(wù)器提交請求。HTTP的請求一般是 GET或POST命令(POST 用于FORM參數(shù)的傳遞)。GET命令的格式為:GET路徑/文件名 HTTP/1.0文件名指岀所訪問的文件,HTTP/1.0指岀Web瀏覽器使用的HTTP版本。應(yīng)答:Web瀏覽器提交請求后,通過 HTTP協(xié)議傳送給 Web服務(wù)器。Web服務(wù)器接到后,進(jìn)行 事務(wù)處理,處理

3、結(jié)果又通過 HTTP傳回給 Web瀏覽器,從而在 Web瀏覽器上顯示岀所請求的頁 面。關(guān)閉連接:當(dāng)應(yīng)答結(jié)束后,Web瀏覽器與 Web服務(wù)器必須斷開, 以保證其它 Web瀏覽器能夠與Web服務(wù)器建立連接??蛻舳瞬捎玫氖菫g覽器,整個系統(tǒng)需要設(shè)計的是服務(wù)器服務(wù)器的用例描述服務(wù)器實現(xiàn)的功能可以描述為3個用例 允許建立連接提供服務(wù)允許斷開連接.服務(wù)器的活動圖整個工作流程如下三、詳細(xì)設(shè)計及代碼服務(wù)器對象的靜態(tài)關(guān)系服務(wù)器對象的靜態(tài)關(guān)系服務(wù)器類的設(shè)計public class Mai n啟動程序public class Frame exte nds JFrame impleme nts Action Liste

4、 ne 實現(xiàn)系統(tǒng)管理員查看 服務(wù)器狀態(tài)public class Net實現(xiàn)允許建立連接,提供服務(wù),允許斷開連接代碼啟動程序public class Ma inserver; package/ http:/ylx-PC:1111/index.html啟動程序 void main(String args) 建立窗體new Frame();接口的實現(xiàn) class Main / public/ public static/ 實現(xiàn)系統(tǒng)管理員查 public class Frame extends JFrame implements ActionListener 看服務(wù)器狀態(tài)server; package

5、java.awt.*;import java.awt.event.*;javax.swing.*;importActionListener implementsextends建立窗體組件newnew JPanel(JPanelbtnPan =import java.util.Date;importJFrame public class Frame/); CENTERFIowLayout(FlowLayout.private JLabel listenPortLb = new JLabel(設(shè)置監(jiān)聽端口 ?);privateJLabeltishi =new JLabel(Webserver 信息

6、尺);privateJLabeltian=new JLabel();設(shè)置,4);/ portTf JTextField =new JTextField( ?尰 private默認(rèn)端口號 設(shè)置按鈕名稱);/ JButton controlBtn = new JButton( 開始);清空 JButton(JButtonclearHintBtn = new); 屜屮=new JTextArea(動態(tài)監(jiān)測服務(wù)信息hintTa private JTextArea; private Net net Frame() public初始化界面 / initComponent(););this Net( new

7、 = netvoid / buildBtnPan();private初始化所有界面組件initComponent() buildHintPan();設(shè)置窗體大小 / setSize(600, 450);();getDefaultToolkit Toolkit tool = Toolkit. -widthsetLocation(tool.getScreenSize().) / 2,width this .getSize().-(tool.getScreenSize().height ) / 2height this .getSize().設(shè)置窗體位置/);WindowAdapter()newth

8、is .addWindowListener(public void windowClosing(WindowEvent arg0) Frame. this .setVisible( true );Frame. this .dispose();););服務(wù)器WebsetTitle( 個簡單的);EXIT_ON_CLOSE setDefaultCloseOperation();true setVisible(/構(gòu)建按鈕面板voidpublic buildBtnPan() ();Box boxV1=Box.createHorizontalBox/ 實現(xiàn)窗體布局JLabel();new JLabel

9、tc=();createHorizontalBox Box boxV2=Box. Box box=Box.createVerticalBox(););listenPortLbboxV1.add(10); boxV1.add(Box. createHorizontalStrut);boxV1.add(portTf (10); boxV1.add(Box.createHorizontalStrutboxV1.add(tishi );); controlBtnboxV2.add(10); boxV2.add(Box.createHorizontalStrut);tian boxV2.add(10);

10、 boxV2.add(Box. createHorizontalStrut );boxV2.add( clearHintBtnbox.add(boxV1);box.add(Box. createVerticalStrut(8);box.add(boxV2);btnPan .add(box);/加入所有按鍵add( btnPan , BorderLayout.NORTH );/將按鍵放置在北部面板portTf .requestFocus();portTf .selectAII();controlBtn .addActionListener(this););this .addActionListe

11、ner(clearHintBtnbuildHintPan() void publichintTa .setEditable(false);JScrollPane scrollPane =new JScrollPane();/添加滑動條scrollPane.setBorder(BorderFactory. createLoweredBevelBorder(););scrollPane.getViewport().add(置在中部面板hintTa add(scrollPane,BorderLayout. CENTER); /public void actionPerformed(ActionEve

12、nt arg0) Object source = arg0.getSource();/各個岀現(xiàn)的問題監(jiān)測/判斷按鈕提示文字內(nèi)容if (source =clearHintBtn) hintTa .setText();return ;.getText();controlBtnString msg =) if(msg.equals(開始);controlBtn.setText(停止.getText();tian.setText(服務(wù)器啟動接口 ?尠+ portTf );portTf.setEditable(false.getText(); .start(portTfnet hintTa .setTe

13、xt( hintTa .getText()+ ? +-開啟服務(wù)器?尠+newDate().toLocaleString()+nn ); else tian .setText( 關(guān)閉服務(wù)器接口+ portTf.getText();controlBtn .setText( 開始);portTf .setEditable(true );net .stop();addHint(String s) public void.getText() + s);hintTa .setText( hintTa public class Net實現(xiàn)允許建立連接,提供服務(wù),允許斷開連接packageserver;imp

14、ortjava.io.*;import.*;importjava.util.*;importjavax.swing.*;publicclass Net int i=0;/實現(xiàn)允許建立連接,提供服務(wù),允許斷開連接private Frame frame ;private ServerSocketserverSocketpublic Net(Frame frame) / 將 WebServerFrame 和 WebServerNet 連接起來this . frame =frame;/點擊“開始”按鈕岀現(xiàn)的結(jié)果public void start(String port) /對異常進(jìn)行處理try ser

15、verSocket =new ServerSocket(lnteger. parselnt(port);Thread() newrun() 對于線程重寫run() voidpublic try ) whiletrue (允許與服務(wù)器連接new/ serverSocket Socket socket=.accept();/ 開啟線程 HandlerThread(socket).start();(Exception e) catch , e.getMessage(); showMessageDialog (frame JOptionPane.start(); catch (Exception ex

16、) ,ex.getMessage(); JOptionPane.(showMessageDialogframestop() public void try)!= serverSocket ( ifnull.close();serverSocket catch (Exception e) finally frame .addHint( 屜湜?尭 +-關(guān)閉服務(wù)器?尠+newDate().toLocaleString()+? 尭湜);增加新的線程/ Thread Socket socket privateextendsclassHandlerThreadhostName String private

17、HandlerThread(Socket socket) public=socket; socketthis=socket.getlnetAddress().getHostAddress();hostName this+:主機(jī)尠 +hostName + 連接成功? frame .addHint(?尠 + i +);重寫 run() / run() in= null :publicvoid瀏覽器和服務(wù)器間交互/ BufferedReader的輸入流/ : Printstream out=null瀏覽器和服務(wù)器間交互的輸岀流BufferedlnputStream fin=流null/服務(wù)器端文件的

18、輸入字符try in= new BufferedReader(newInputStreamReader(socket.getlnputstream();new PrintStream(.getOutputStream(); out=獲得想訪問的文件名稱)1; String src=in.readLine().split(將瀏覽器想獲得的文件名稱輸岀至提示框socket /從瀏覽器提交的請求頭部中/frame .addHint(獲得服務(wù)尠+時間+newDate().toLocaleString()+屜湜);/對瀏覽器想獲得的文件名稱進(jìn)行去除?后面內(nèi)容處理/ 示例 : /index.html?a=

19、b -> /index.htmlint index=src.indexOf(?);if (index>=O)src.substring(O,index);/如果瀏覽器沒指定訪問的頁面,則返回index.html頁面內(nèi)容if (屜尯.equals(src) src=屜椯摮硥栮浴屬:File srcFile= new File( 桜浴屬 +src);/如果瀏覽器訪問的頁面不存在,則返回 404.html頁面內(nèi)容.if (!srcFile.exists()|!srcFile.canRead();桜浴屬?栮浴屬File( newsrcFile=/輸岀響應(yīng)頭部信息out.println(?吠

20、屐??傳屋);out.println(服務(wù)器:IIS Web 服務(wù)器嘠?);out.println(最后修改時間?+newDate(srcFile.lastModified();out.println(文件總字節(jié):+getContentType(srcFile);out.println(文件總長度?+srcFile.length();out.println( 時間?+ new Date();while out.write(buffer,0,i);out.println();fin= new BufferedlnputStream(newFilelnputStream(srcFile);1024

21、*8; intbytebyte buffer=newi=-1;/輸岀響應(yīng)體部信息(i=fin.read(buffer)!=-1) (Exception e) catch e.printStackTrace(); finallytry )in.close();null (in!= if)out.close(); (out!=ifnull )fin.close();(fin!=if null(Exception e)catch 文件的接收 / String getContentType(File file) public StringfileName=file.getName(););String

22、 type=fileName.substring(fileName.indexOf(?>空 String result=;楜慭敧?楧屨 ?楧屨(if .equals(type) result=;?瑨汭(ifelse .equals(type) result=瑜硥屴栯浴屬;瑜硥屴栯浴屬?瑨屭(ifelseelse .equals(type) result=;瑜硥屴瀯僅湩.equals(type) result=?硴屴(if;.equals(type) result=?浸屬(if else瑜硥屴砯汭 result; return調(diào)試及運(yùn)行結(jié)果四、.啟動用exe4j生成的 myserver.exe應(yīng)用程序初始化如圖開啟服務(wù)器,單擊開始8080設(shè)置端口.打開瀏覽器地址欄輸入 -pc:8080/得到結(jié)果如圖服務(wù)器端結(jié)果.單擊停止,暫停服務(wù)器服務(wù)五、總結(jié)通過此次實驗,我基本了解了 Web服

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論