Java Web 编程入门知识
Java SE 的內(nèi)容基本都講完了.
但是 Java一般用于網(wǎng)絡(luò)編程, 就是所謂的web編程. Java SE講的基本上都是本地程序的內(nèi)容.?
而Java web編程需要在兩個(gè)程序中傳輸數(shù)據(jù), 以后就是Java EE的前提知識(shí)了.
一. 什么是網(wǎng)絡(luò)程序(Web Program)
以前Java SE 的內(nèi)容將的都是java 或 面向?qū)ο蟮幕局R(shí), 所編寫的程序都是本地程序.
那么什么是網(wǎng)絡(luò)程序呢.
定義很簡(jiǎn)單:
???? 能夠接受另一臺(tái)計(jì)算機(jī)發(fā)過(guò)來(lái)的的數(shù)據(jù)或者能夠向另1臺(tái)計(jì)算機(jī)發(fā)送數(shù)據(jù)的程序就是網(wǎng)絡(luò)程序.
為什么要強(qiáng)調(diào)另一臺(tái)計(jì)算機(jī)呢,
因?yàn)樵谕慌_(tái)計(jì)算中兩個(gè)程序有很多方法互相通信(例如互相讀寫同1個(gè)本地文件), 但是這兩個(gè)程序就不一定是網(wǎng)絡(luò)程序了.
二. 什么是ip 地址.
能夠在網(wǎng)絡(luò)上唯一表示1臺(tái)計(jì)算的編號(hào)就是ip地址了, 這個(gè)大家都懂.
在同1層網(wǎng)絡(luò)中, 每臺(tái)主機(jī)都必須有1個(gè)唯一的ip地址.
ip地址是1個(gè)邏輯地址.
三. 數(shù)據(jù)是怎樣在網(wǎng)絡(luò)上傳輸?shù)?
例如計(jì)算機(jī)A發(fā)送1張照片給計(jì)算機(jī)B, 那么這張照片是如何在網(wǎng)絡(luò)傳輸?shù)?
首先, 網(wǎng)絡(luò)上傳輸?shù)亩际嵌M(jìn)制數(shù)據(jù), 所以一張照片是不能在網(wǎng)線上傳輸?shù)?
通常來(lái)講, 發(fā)送端程序會(huì)將這照片轉(zhuǎn)化成字節(jié)數(shù)組, 然后把這個(gè)字節(jié)數(shù)組打包成若干個(gè)數(shù)據(jù)包(DatagramPacket).
然后把數(shù)據(jù)包1個(gè)1個(gè)地放向給B程序. B程序接收到數(shù)據(jù)包后再解封, 得到字節(jié)數(shù)組, 再還原成1張圖片.
所以實(shí)際上網(wǎng)絡(luò)上的數(shù)據(jù)是1個(gè)接1個(gè)的數(shù)據(jù)包在傳輸!
四. 什么端口號(hào)(Port)
一臺(tái)計(jì)算機(jī)可以同時(shí)運(yùn)行多個(gè)網(wǎng)絡(luò)程序.
例如計(jì)算B同時(shí)運(yùn)行著firefox 和 pidigin. B的網(wǎng)卡接受到計(jì)算機(jī)A的數(shù)據(jù)包, 那么B會(huì)將這個(gè)數(shù)據(jù)包分給Firefox 還是 Pidgin來(lái)處理?
為了解決這個(gè)問(wèn)題, 就需要1個(gè)標(biāo)簽. 在同1臺(tái)計(jì)算機(jī)(B)中, 每1個(gè)網(wǎng)絡(luò)程序都必須分配1個(gè)唯一的標(biāo)簽.
例如Firefox 的標(biāo)簽是80,?? Pidgin的標(biāo)簽是9000.
而同樣地, 計(jì)算機(jī)A發(fā)送數(shù)據(jù)包前, 必須為數(shù)據(jù)包貼上1個(gè)標(biāo)簽, 表示將這個(gè)數(shù)據(jù)包發(fā)給目標(biāo)計(jì)算的哪個(gè)程序.
這個(gè)標(biāo)簽實(shí)際上是端口號(hào)碼(port).
假如B網(wǎng)卡接受到1個(gè)數(shù)據(jù)包, 發(fā)現(xiàn)該數(shù)據(jù)包貼上的標(biāo)簽是80, 就會(huì)交給本地占用80端口的程序(Firefox).
所以計(jì)算A發(fā)送數(shù)據(jù)包前, 必須同時(shí)指定數(shù)據(jù)包的目標(biāo)pid地址, 和目標(biāo)程序(端口).
端口1個(gè)用16bit數(shù)字來(lái)表示的, 它的范圍是0 ~ 65535, 1024 以下的端口保留給預(yù)定義的服務(wù), 例如80是網(wǎng)頁(yè), 25是郵件發(fā)送.
oracle的默認(rèn)端口是1521, tomcat默認(rèn)的端口是8080.
一個(gè)防火墻開放了1個(gè)端口(例如8888), 并不是在墻上打開1個(gè)洞, 而是這個(gè)防火墻不會(huì)過(guò)濾掉 端口是8888的數(shù)據(jù)包!
五.協(xié)議
一.協(xié)議定義:
???? 為進(jìn)行網(wǎng)絡(luò)中的數(shù)據(jù)交換(通信)而建立的規(guī)則,標(biāo)準(zhǔn)或約定.
二. 常見協(xié)議
UDP: UDP協(xié)議是無(wú)連接的, 不可靠的傳輸協(xié)議, 類似與寫信.
???? 通俗來(lái)講, 計(jì)算機(jī)A(發(fā)送方) 不會(huì) 關(guān)心 計(jì)算機(jī)B(接收方)的狀態(tài), 直接地把數(shù)據(jù)包發(fā)送出去.
???? 也就是當(dāng)計(jì)算機(jī)B不在線時(shí), 數(shù)據(jù)包可能會(huì)被丟失.
TCP: 面向連接的可靠傳輸協(xié)議, 類似與打電話.
???? 也就是所計(jì)算機(jī)A(發(fā)送方) 必須在發(fā)送數(shù)據(jù)包前 建立一條與計(jì)算B(接受方的) 連接請(qǐng)求, 在這條連接建立后, 才可以發(fā)送數(shù)據(jù). 保證每個(gè)數(shù)據(jù)包都成功地發(fā)送到計(jì)算機(jī)B.
6. 套接字(Socket)
單屏名字很難理解.
實(shí)際上Socket是美國(guó)伯克利大學(xué)在Unix上推出的1個(gè)工具, 程序猿使用這個(gè)工具可以很方便地訪問(wèn)TCP/IP. 從而開發(fā)各種網(wǎng)絡(luò)程序.
隨著Unix的推廣, windows和java也引用了Socket這個(gè)編程模型.
下一遍文章會(huì)詳細(xì)講解基于Socket的UDP編程.
總結(jié)
以上是生活随笔為你收集整理的Java Web 编程入门知识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java print流简介
- 下一篇: Java UDP 编程简介.