為什么要注意項(xiàng)目結(jié)構(gòu)?
- 結(jié)構(gòu)劃分有利于管理文件。
- 代碼要放在 源文件文件夾(src/main/java)下才能正確編譯和執(zhí)行。
項(xiàng)目結(jié)構(gòu)概述
一個(gè)項(xiàng)目project,包含任意個(gè)模塊module。一個(gè)模塊包含任意個(gè)包package。
包是類(lèi)的容器,用于分隔類(lèi)名空間。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-812777.html
- 包的名字有層次關(guān)系,各層之間以點(diǎn)分隔:頂級(jí)域名.公司域名. 項(xiàng)目名. 模塊名。例如:org.apache.rocketmq
- 包名全部小寫(xiě)。
1. 項(xiàng)目目錄
模塊1
模塊2
.gitignore
**.md
2. 模塊目錄
src:(source)存放所有資源和代碼
main:主程序
○ java(源 根):.java文件。
○ resources(資源 根):資源文件,如xml、properties配置文件。
templates:動(dòng)態(tài)頁(yè)面,如 thymeleaf 頁(yè)面。
需要服務(wù)器渲染,所以直接訪問(wèn)是無(wú)意義的,也訪問(wèn)不到。
static:靜態(tài)資源,如 html、css、js、image。
□ 可直接 localhost:8080/hello.html 訪問(wèn)該目錄文件。
□ 也可 return "hello.html"; 跳轉(zhuǎn)。
編譯后,resources和源根在同一目錄下!
○ lib:存放 jar包,需要設(shè)置添加到庫(kù)。
○ webapp:web資源
頁(yè)面靜態(tài)資源:html、css、js、圖片
WEB-INF:固定寫(xiě)法。此目錄下的文件不能被外部(瀏覽器)直接訪問(wèn)。
lib:jar包存放的目錄
web.xml:web 項(xiàng)目的配置文件(3.0規(guī)范之后可以省略)
classes:target中,java編譯生成class文件和資源文件存放的路徑。對(duì)于war項(xiàng)目,配置文件中的classpath就是指這里。
test:測(cè)試程序
java(測(cè)試 根):.java文件。
resources(測(cè)試資源 根):資源文件,如xml、properties配置文件。
pom.xml:maven 配置文件。
target:存放 Maven 構(gòu)建當(dāng)前模塊,所生成的輸出文件。
classes:這就是 classpath。
com.**:存放編譯后的 .class 文件
資源文件:src/main/resources 的所有文件。
模塊配置文件.iml
2.1 java包
項(xiàng)目的 .java 源文件,必須標(biāo)記為源根包。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-812777.html
2.1.1 業(yè)務(wù)處理的包:
1. web/controller包
表現(xiàn)層/展示層/視圖層,用于接受請(qǐng)求。
內(nèi)容:Controller、Filter、Listener、Servlet 文件。
2. service包
服務(wù)層/業(yè)務(wù)層,用于處理業(yè)務(wù)。
基礎(chǔ)響應(yīng)包的創(chuàng)建通常是在Service層實(shí)現(xiàn)類(lèi)(ServiceImpl)中進(jìn)行。
3. dao(Data Access Object)包
數(shù)據(jù)訪問(wèn)層,封裝了對(duì)數(shù)據(jù)庫(kù)的操作。
2.1.2 pojo包:普通bean,區(qū)別于EJB
1. vo(View Object,視圖對(duì)象)包
應(yīng)用場(chǎng)景:接收頁(yè)面的請(qǐng)求數(shù)據(jù);服務(wù)層 向表現(xiàn)層傳遞 用于頁(yè)面展示的數(shù)據(jù)。
2. dto(Data Transfer Object,數(shù)據(jù)傳輸對(duì)象)包
應(yīng)用場(chǎng)景:
§ 表現(xiàn)層返回?cái)?shù)據(jù):為了安全去掉密碼、獲取實(shí)體列表時(shí)去掉正文、防 Map。
§ 服務(wù)層之間傳遞數(shù)據(jù)。
§ 持久層向服務(wù)層提供數(shù)據(jù)。
特點(diǎn):不包含業(yè)務(wù)邏輯。
3. po(Persistant Object,持久化對(duì)象)包
特點(diǎn):不包含業(yè)務(wù)邏輯。setter 方法通常包含字段檢驗(yàn)。
推薦由 XMyBatis 自動(dòng)生成。
應(yīng)用場(chǎng)景:封裝數(shù)據(jù)庫(kù)表的一行數(shù)據(jù)。
4. do(Domain Object、entry)包
從現(xiàn)實(shí)世界中抽象出來(lái)的業(yè)務(wù)實(shí)體。
包含業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)的操作。
不關(guān)心數(shù)據(jù)庫(kù)存儲(chǔ)??砂?controller 層不應(yīng)知道的數(shù)據(jù),如密碼。
軟件包名不可以是關(guān)鍵字名,故不能叫 do。
do 和 dto 的轉(zhuǎn)換:構(gòu)造函數(shù)、不推薦反射。
2.1.3 工具包:
1. utils 包
工具包,封裝通用的工具類(lèi)或方法,如日期處理、字符串處理、文件處理。
這些工具比較獨(dú)立,不依賴于其他模塊或組件。
2. common包
封裝通用的業(yè)務(wù)邏輯或者數(shù)據(jù)結(jié)構(gòu),如緩存、日志、異常處理。
這些功能比較復(fù)雜,需要依賴于其他模塊或組件。
到了這里,關(guān)于【Java工程目錄結(jié)構(gòu)】項(xiàng)目結(jié)構(gòu)和模塊結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!