javaweb程序設(shè)計(jì)任務(wù)教程源代碼(java web程序設(shè)計(jì)任務(wù)教程源碼)
本篇文章給大家談?wù)刯avaweb程序設(shè)計(jì)任務(wù)教程源代碼,以及java web程序設(shè)計(jì)任務(wù)教程源碼對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
- 1、如何快速讀懂項(xiàng)目源碼javaWeb
- 2、javaweb 做一個(gè)通訊錄的小項(xiàng)目 求源代碼 急求。
- 3、怎樣高效的閱讀JavaWeb項(xiàng)目源代碼
- 4、如何用Java實(shí)現(xiàn)Web服務(wù)器
如何快速讀懂項(xiàng)目源碼javaWeb
一:學(xué)會(huì)如何讀一個(gè)JavaWeb項(xiàng)目源代碼 步驟:表結(jié)構(gòu)-web.xml-mvc-db-spring
ioc-log- 代碼
1、先了解項(xiàng)目數(shù)據(jù)庫(kù)的表結(jié)構(gòu),這個(gè)方面是最容易忘記 的,有時(shí)候我們只顧著看每一個(gè)方法是怎么進(jìn)行的,卻沒(méi)
有去了解數(shù)據(jù)庫(kù)之間的主外鍵關(guān)聯(lián)。其實(shí)如果先了解數(shù)據(jù) 庫(kù)表結(jié)構(gòu),再去看一個(gè)方法的實(shí)現(xiàn)會(huì)更加容易。
2、然后需要過(guò)一遍web.xml,知道項(xiàng)目中用到了什么攔
截器,監(jiān)聽(tīng)器,過(guò)濾器,擁有哪些配置文件。如果是攔截 器,一般負(fù)責(zé)過(guò)濾請(qǐng)求,進(jìn)行AOP 等;如果是監(jiān) 可能是定時(shí)任務(wù),初始化任務(wù);配置文件有如使用了 spring
后的讀取mvc 相關(guān),db 相關(guān),service 相關(guān),aop 相關(guān)的文件。
3、查看攔截器,監(jiān)聽(tīng)器代碼,知道攔截了什么請(qǐng)求,這
個(gè)類完成了怎樣的工作。有的人就是因?yàn)槿鄙倭诉@一步, 自己寫(xiě)了一個(gè)action,配置文件也沒(méi)有寫(xiě)錯(cuò),但是卻怎么
調(diào)試也無(wú)法進(jìn)入這個(gè)action,直到別人告訴他,請(qǐng)求被攔
4、接下來(lái),看配置文件,首先一定是mvc相關(guān)的,如 springmvc
中,要請(qǐng)求哪些請(qǐng)求是靜態(tài)資源,使用了哪些 view 策略,controller 注解放在哪個(gè)包下等。 然后是db 相關(guān)配置文件,看使用了什么數(shù)據(jù)庫(kù),使用了
什么orm框架,是否開(kāi)啟了二級(jí)緩存,使用哪種產(chǎn)品作 為二級(jí)緩存,事務(wù)管理的處理,需要掃描的實(shí)體類放在什 么位置。最后是spring 核心的ioc
功能相關(guān)的配置文件, 知道接口與具體類的注入大致是怎樣的。當(dāng)然還有一些如 apectj 置文件,也是在這個(gè)步驟中完成
5、log
相關(guān)文件,日志的各個(gè)級(jí)別是如何處理的,在哪些 地方使用了log 記錄日志
6、從上面幾點(diǎn)后知道了整個(gè)開(kāi)源項(xiàng)目的整體框架,閱讀 每個(gè)方法就不再那么難了。
7、當(dāng)然如果有項(xiàng)目配套的開(kāi)發(fā)文檔也是要閱讀的。
javaweb 做一個(gè)通訊錄的小項(xiàng)目 求源代碼 急求。
先設(shè)計(jì)數(shù)據(jù)庫(kù)中通訊錄表格(字段有:id,聯(lián)系人姓名,手機(jī)號(hào),備注),然后,hebinate實(shí)現(xiàn)數(shù)據(jù)庫(kù)表到j(luò)avabean的映射,同時(shí)也會(huì)生成對(duì)通訊錄表格的增刪改查的基本sql語(yǔ)句對(duì)應(yīng)的接口。然后你再寫(xiě)一個(gè)Servlet,連接頁(yè)面自己數(shù)據(jù)庫(kù)操作接口即可
怎樣高效的閱讀JavaWeb項(xiàng)目源代碼
首先要理清楚代碼結(jié)構(gòu)和業(yè)務(wù)結(jié)構(gòu)(應(yīng)該有些文檔或者大的流程圖),這是閱讀具體代碼的前提。
閱讀Java?web項(xiàng)目的代碼:
你需要找到
View層的代碼:前端頁(yè)面、圖片、資源文件都在其中。
Controller層的代碼:控制試圖與模型層以及數(shù)據(jù)傳遞。
Service層的代碼:業(yè)務(wù)邏輯。
Dao層的代碼:數(shù)據(jù)庫(kù)訪問(wèn)邏輯。
從web.xml?-?appcontext.xml?-?xxx
如何用Java實(shí)現(xiàn)Web服務(wù)器
一 HTTP協(xié)議的作用原理
WWW是以Internet作為傳輸媒介的一個(gè)應(yīng)用系統(tǒng) WWW網(wǎng)上最基本的傳輸單位是Web網(wǎng)頁(yè) WWW的工作基于客戶機(jī)/服務(wù)器計(jì)算模型 由Web 瀏覽器(客戶機(jī))和Web服務(wù)器(服務(wù)器)構(gòu)成 兩者之間采用超文本傳送協(xié)議(HTTP)進(jìn)行通信 HTTP協(xié)議是基于TCP/IP協(xié)議之上的協(xié)議 是Web瀏覽器和Web服務(wù)器之間的應(yīng)用層協(xié)議 是通用的 無(wú)狀態(tài)的 面向?qū)ο蟮膮f(xié)議 HTTP協(xié)議的作用原理包括四個(gè)步驟
( ) 連接 Web瀏覽器與Web服務(wù)器建立連接 打開(kāi)一個(gè)稱為socket(套接字)的虛擬文件 此文件的建立標(biāo)志著連接建立成功
( ) 請(qǐng)求 Web瀏覽器通過(guò)socket向Web服務(wù)器提交請(qǐng)求 HTTP的請(qǐng)求一般是GET或POST命令(POST用于FORM參數(shù)的傳遞) GET命令的格式為
GET 路徑/文件名 HTTP/
文件名指出所訪問(wèn)的文件 HTTP/ 指出Web瀏覽器使用的HTTP版本
( ) 應(yīng)答 Web瀏覽器提交請(qǐng)求后 通過(guò)HTTP協(xié)議傳送給Web服務(wù)器 Web服務(wù)器接到后 進(jìn)行事務(wù)處理 處理結(jié)果又通過(guò)HTTP傳回給Web瀏覽器 從而在Web瀏覽器上顯示出所請(qǐng)求的頁(yè)面
例 假設(shè)客戶機(jī)與 /mydir/l建立了連接 就會(huì)發(fā)送GET命令 GET /mydir/l HTTP/ 主機(jī)名為的Web服務(wù)器從它的文檔空間中搜索子目錄mydir的文件l 如果找到該文件 Web服務(wù)器把該文件內(nèi)容傳送給相應(yīng)的Web瀏覽器
為了告知 Web瀏覽器傳送內(nèi)容的類型 Web服務(wù)器首先傳送一些HTTP頭信息 然后傳送具體內(nèi)容(即HTTP體信息) HTTP頭信息和HTTP體信息之間用一個(gè)空行分開(kāi)
常用的HTTP頭信息有
① HTTP OK
這是Web服務(wù)器應(yīng)答的第一行 列出服務(wù)器正在運(yùn)行的HTTP版本號(hào)和應(yīng)答代碼 代碼 OK 表示請(qǐng)求完成
② MIME_Version
它指示MIME類型的版本
③ content_type 類型
這個(gè)頭信息非常重要 它指示HTTP體信息的MIME類型 如 content_type text/指示傳送的數(shù)據(jù)是HTML文檔
④ content_length 長(zhǎng)度值
它指示HTTP體信息的長(zhǎng)度(字節(jié))
( ) 關(guān)閉連接 當(dāng)應(yīng)答結(jié)束后 Web瀏覽器與Web服務(wù)器必須斷開(kāi) 以保證其它Web瀏覽器能夠與Web服務(wù)器建立連接
二 Java實(shí)現(xiàn)Web服務(wù)器功能的程序設(shè)計(jì)
根據(jù)上述HTTP協(xié)議的作用原理 實(shí)現(xiàn)GET請(qǐng)求的Web服務(wù)器程序的方法如下
( ) 創(chuàng)建ServerSocket類對(duì)象 監(jiān)聽(tīng)端口 這是為了區(qū)別于HTTP的標(biāo)準(zhǔn)TCP/IP端口 而取的
( ) 等待 接受客戶機(jī)連接到端口 得到與客戶機(jī)連接的socket
( ) 創(chuàng)建與socket字相關(guān)聯(lián)的輸入流instream和輸出流outstream
( ) 從與socket關(guān)聯(lián)的輸入流instream中讀取一行客戶機(jī)提交的請(qǐng)求信息 請(qǐng)求信息的格式為 GET 路徑/文件名 HTTP/
( ) 從請(qǐng)求信息中獲取請(qǐng)求類型 如果請(qǐng)求類型是GET 則從請(qǐng)求信息中獲取所訪問(wèn)的HTML文件名 沒(méi)有HTML文件名時(shí) 則以l作為文件名
( ) 如果HTML文件存在 則打開(kāi)HTML文件 把HTTP頭信息和HTML文件內(nèi)容通過(guò)socket傳回給Web瀏覽器 然后關(guān)閉文件 否則發(fā)送錯(cuò)誤信息給Web瀏覽器
( ) 關(guān)閉與相應(yīng)Web瀏覽器連接的socket字
下面的程序是根據(jù)上述方法編寫(xiě)的 可實(shí)現(xiàn)多線程的Web服務(wù)器 以保證多個(gè)客戶機(jī)能同時(shí)與該Web服務(wù)器連接
程序 WebServer java文件
//WebServer java 用JAVA編寫(xiě)Web服務(wù)器
import java io *
import *
public class WebServer {
public static void main(String args[]) {
int i= PORT=
ServerSocket server=null
Socket client=null
try {
server=new ServerSocket(PORT)
System out println( Web Server is listening on port +server getLocalPort())
for ( ) {client=server accept() //接受客戶機(jī)的連接請(qǐng)求
new ConnectionThread(client i) start()
i++
}
} catch (Exception e) {System out println(e) }
}
}
/* ConnnectionThread類完成與一個(gè)Web瀏覽器的通信 */
class ConnectionThread extends Thread {
Socket client //連接Web瀏覽器的socket字
int counter //計(jì)數(shù)器
public ConnectionThread(Socket cl int c) {
client=cl
counter=c
}
public void run() //線程體
{try {
String destIP=client getInetAddress() toString() //客戶機(jī)IP地址
int destport=client getPort() //客戶機(jī)端口號(hào)
System out println( Connection +counter+ connected to +destIP+ on port +destport+ )
PrintStream outstream=new PrintStream(client getOutputStream())
DataInputStream instream=new DataInputStream(client getInputStream())
String inline=instream readLine() //讀取Web瀏覽器提交的請(qǐng)求信息
System out println( Received +inline)
if (getrequest(inline)) { //如果是GET請(qǐng)求
String filename=getfilename(inline)
File file=new File(filename)
if (file exists()) { //若文件存在 則將文件送給Web瀏覽器
System out println(filename+ requested )
outstream println( HTTP/ OK )
outstream println( MIME_version )
outstream println( Content_Type text/ )
int len=(int)file length()
outstream println( Content_Length +len)
outstream println( )
sendfile(outstream file) //發(fā)送文件
outstream flush()
} else { //文件不存在時(shí)
String notfound=
Error file not found
outstream println( HTTP/ no found )
outstream println( Content_Type text/ )
outstream println( Content_Length +notfound length()+ )
outstream println( )
outstream println(notfound)
outstream flush()
}
}
long m =
while (m ) {m ++ } //延時(shí)
client close()
} catch (IOException e) {
System out println( Exception +e)
}
}
/* 獲取請(qǐng)求類型是否為 GET */
boolean getrequest(String s) {
if (s length() )
{if (s substring( ) equalsIgnoreCase( GET )) return true
}
return false
}
/* 獲取要訪問(wèn)的文件名 */
String getfilename(String s) {
String f=s substring(s indexOf(′ ′)+ )
f=f substring( f indexOf(′ ′))
try {
if (f charAt( )==′/′)
f=f substring( )
} catch (StringIndexOutOfBoundsException e) {
System out println( Exception +e)
}
if (f equals( )) f= l
return f
}
/*把指定文件發(fā)送給Web瀏覽器 */
void sendfile(PrintStream outs File file) {
try {
DataInputStream in=new DataInputStream(new FileInputStream(file))
int len=(int)file length()
byte buf[]=new byte[len]
in readFully(buf)
outs write(buf len)
outs flush()
in close()
} catch (Exception e) {
System out println( Error retrieving file )
System exit( )
}
}
}
程序中的ConnectionThread線程子類用來(lái)分析一個(gè)Web瀏覽器提交的請(qǐng)求 并將應(yīng)答信息傳回給Web瀏覽器 其中 getrequest()方法用來(lái)檢測(cè)客戶的請(qǐng)求是否為 GET getfilename(s)方法是從客戶請(qǐng)求信息s中獲取要訪問(wèn)的HTML文件名 sendfile()方法把指定文件內(nèi)容通過(guò)socket傳回給Web瀏覽器
對(duì)上述程序的getrequest()方法和相關(guān)部分作修改 也能對(duì)POST請(qǐng)求進(jìn)行處理
三 運(yùn)行實(shí)例
為了測(cè)試上述程序的正確性 將編譯后的WebServer class ConnectionThread class和下面的l文件置于網(wǎng)絡(luò)的某臺(tái)主機(jī)的同一目錄中(如 主機(jī)NT SRV的C JWEB目錄)
程序 l文件
這是用JAVA寫(xiě)出的WEB服務(wù)器主頁(yè)
年 月 日
首先在該主機(jī)上用java命令運(yùn)行WebServer class
C jwebjava webserver
然后在客戶機(jī)運(yùn)行瀏覽器軟件 在URL處輸入WebServer程序所屬的URL地址(如 ) 就在瀏覽器窗口顯示出指定的HTML文檔
注意 不能缺省端口號(hào) 如缺省 則運(yùn)行該主機(jī)的正常WEB服務(wù)器
lishixinzhi/Article/program/Java/hx/201311/26626
關(guān)于javaweb程序設(shè)計(jì)任務(wù)教程源代碼和java web程序設(shè)計(jì)任務(wù)教程源碼的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。