1. 程式人生 > >java零基礎教程:從零開發一個Java Web專案要點

java零基礎教程:從零開發一個Java Web專案要點

前言

本文章詳細的列出了開發一個傳統JavaWeb專案需要注意的要點,從環境準備開始到三層架構搭建,需要注意的地方全部羅列出來。

第一部分:環境準備

1.  Maven命令建立web骨架

mvn archetype:create -DgroupId=net.rocketa -DartifactId=mywebapp -DarchetypeArtifactId=maven-archetype-webapp

注意web servlet版本(web.xml,3.1),Junit版本指定為4.X(這樣Spring好通過註解的方式來執行單元測試)

2. 注意在IDEA中需要設定好MAVEN工程的Sources/Tests/Resources/Test Resources

屬性。

3. 日誌依賴

slf4j:規範和介面

具體的日誌實現有:

log4j、logback、common-logging

因此我們一般是使用slf4j介面+一種具體的日誌實現+slf4j和這個具體日誌實現的依賴整合

4. 資料庫依賴

有2個依賴,需要注意,一個是驅動,一個是資料庫連線池(C3P0,DBCP...)。

驅動JAR包是執行期需要包含,編譯期不需要的。

5. 持久層框架依賴

說白了,DAO層的框架依賴:MyBatis or Hibernate or ....

比如除MyBatis本身的依賴需要引入之外,還需要引入MyBatis和Spring的整合依賴。

6. Web層依賴

比如,JSP中使用到的一些JSTL、標籤、Ajax訪問JSON等,還有需要注意的是,在編譯期需要引入servlet-api。

7. Spring核心依賴

spring-core、spring-beans、spring-context

8. Spring和DB之間的整合依賴

Spring是需要介入DB的管理的,比如它的宣告式事務。

spring-jdbc、spring-tx

9. Spring對Web的一些整合依賴

spring-web、spring-webmvc

10. Spring對Junit的支援依賴

spring-test

NOSQL對事務的支援不是很好,它主要追求的是效能、高可用、分散式。

MySQL等關係型資料庫對事務的支援是很成熟的,也是很可靠的落地方案。

第二部分:DAO層

NOSQL對事務的支援不是很好,它主要追求的是效能、高可用、分散式。

MySQL等關係型資料庫對事務的支援是很成熟的,也是很可靠的落地方案。

1. 

可以在專案中建立一個SQL檔案,便於SQL的管理。

注意,表的儲存引擎(事務的支援:innodb)、自動增長的特性、編碼、主鍵和索引。

一個良好的習慣是:為所有的表都新增一個建立時間欄位,用於記錄,方便排查。

應該為表名、列名添加註釋,方便其他工程師查閱。

應該注意SQL技巧,比如插入存在唯一約束的表中,如果出現衝突不想報錯的話,可以:insert ignore into ....(可以通過返回的影響行數來進行判斷)

2Dao層實體

一些業務物件的建立,setter/getter/toString等就不說了,需要特別注意的是,除了表的欄位之外,還需要什麼屬性?這裡涉及到一個一對一、一對多,多對多的概念!

3. Dao層介面和mapper sql

MyBatis的特點從SQL(引數+sql)對映到Entity/List(定製SQL、自由傳遞引數、結果集自動賦值)

使用MyBatis的方式SQL寫在XML中,或者註解提供SQL。更加推薦的是XML,因為更加靈活,XML提供的動態拼接功能也是比註解簡單的多。

一個全域性的mybatis配置檔案+具體的SQL檔案+DAO介面:讓我們只需要設計介面,關注業務邏輯,解放出來。

在全域性mybatis配置檔案中重點注意是否開啟駝峰轉換,獲取資料庫自增主鍵,列別名替換列名等。

注意DAO介面和具體的SQL檔案之間的對應關係。

具體SQL寫法中,比如#{},<![CDATA[...]]>等需要引起注意。

輸入引數型別parameterType,如果是多個基本型別,那麼不用給出來。

即便返回的是List物件,我們的resultType依然指定的是集合中的物件型別。

在Mybatis的SQL檔案中是可以通過OGNL表示式來對物件中的一些物件型別的屬性進行賦值的!

表名.xxx  或者 表名.xxx as yyy 對於Mybatis而言,會忽略表名.字首,也會忽略as。

另外,注意在Dao介面中,如果方法有多個基本型別引數,別忘了通過@Param來進行執行期引數標記!

總結:Dao層的工作逐漸演變成介面設計和SQL編寫了,這種程式碼和SQL的分離方式,便於我們進行review,而Dao的拼接將在Service層完成。

4. 一些優化配置

比如,對帶包路徑的型別進行簡化,通過配置掃描包。

比如,批量掃描SQL檔案,通過自動掃描配置檔案。

5. mybatis和spring需要整合

spring需要接管資料庫

JDBC的一些連線資訊,資料庫連線池的一些配置資訊,就是配置DataSource的過程。

spring和mybatis整合的核心

SqlSessionFactory是MyBatis的配置核心,把DataSource注入,並指明MyBatis的全域性配置檔案位置,typeAliasesPackage掃描,mapper檔案位置掃描等。

spring通過動態代理幫助生成Dao的代理實現類(MapperScannerConfigurer)

注入SqlSessionFactory(通過sqlSessionFactoryBeanName),指明Dao介面的包路徑basePackage

總之,配置的一項原則是:約定優於配置!!!

第三部分:進行Spring Junit單元測試

當我們進行了一些配置,寫了一些SQL,Dao介面後,應該要進行Spring Junit單元測試,可以通過IDEA快速的生成測試用例(很好用的一個功能,因為IDEA可以幫助我們快速在test下建立與dao/service介面的同級目錄下生成用例)

在用例中,我們只需要在類上打上註解:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration({"classpath:spring配置檔案"})

載入Spring容器後,我們就可以在用例中注入物件,開始測試了!!!

第四部分:Service層

Service層需要關注幾個要點:

業務物件的封裝、web和service之間進行資料傳遞的DTO、異常的處理(業務異常)

注意Spring事務回退的預設機制是:執行時異常。

因此,我們在service層預設定義的業務異常一般extends RuntimeException。

一般而言,通過:

try{

}catch(業務異常1 e1){

}catch(業務異常2 e2){

}catch(Exception e){

throw new 業務異常(...);

}

要知道,service層可能會發生業務異常,也可能發生一些其他異常,為了Spring都可以感知到,這裡會把Exception異常轉化成執行時異常

第五部分:Controller層

1. Restful

一種優雅的URI表述方式;資源的狀態;狀態的轉移

Restful示例:

GET     /product/list   查詢操作

GET    /product/{productId}/detail

GET     /product/time/now

POST    /product/{productId}/execution 新增、修改操作【非冪等性】

POST    /product/{productId}/{userId}/order

DELETE  /product/{productId}/delete  刪除操作

PUT      修改操作【冪等性】

URL設計:

/模組/資源/{標示}/集合1/...

2.Controller中請求方法的細節處理

考慮幾個方面:請求引數繫結、請求方式限制、轉發與重定向、資料模型賦值、JSON資料返回、Cookie訪問

@RequestMapping(value="/{productId:\\d+}/detail",method=RequestMethod.GET,produces={"application/json;charset=UTF-8"})
@ResponseBody
public String detail(
@PathVariable("productId") Long  productId,@CookieValue(value="userId",required=false) Long userId,Model model){
# return "rediect:/xxx/yyy"
# return "forward:/xxx/yyy"
# return "view"
}

3.整合配置Spring MVC

在web.xml中配置DispatcherServlet攔截請求,並指出Spring相關的配置檔案。

開啟Spring MVC的註解模式:

<mvc:annotation-driven/>

靜態資源請求採用預設的servlet配置

<mvc:default-servlet-handler/>

配置JSP、ViewResolver的prefix「如/WEB-INF/jsp」suffix如.jsp

掃描web相關的Controller:

<context:component-scan base-package="">

OK,先整理到這裡。

學習Java想找到理想的工作還是要把自己的基本功打好,然後開始找個框架實踐,開始框架的學習不要貪多,先守著一個慢慢來,初學最忌貪多嚼不爛。

學習java中有不明白可以加入java交流群:732308174,群裡有志同道合的小夥伴,互幫互助,群裡有不錯的學習教程

相關推薦

java基礎教程開發一個Java Web專案要點

前言 本文章詳細的列出了開發一個傳統JavaWeb專案需要注意的要點,從環境準備開始到三層架構搭建,需要注意的地方全部羅列出來。 第一部分:環境準備 1.  Maven命令建立web骨架 mvn archetype:create -DgroupId=net.rock

Python教程到大師

key 訪問 信息隱藏 隱藏對象 以及 直接 items sea 語句 首先, 什麽是Python? 用python作者Guido van Rossum自己的話來說,Python是這樣的一門語言: "它是一門高級編程語言, 它的核心設計理念是讓所有代碼變得更易閱讀,並

Flutter入門教程構建電商應用(一)

在這個系列中,我們將學習如何使用google的移動開發框架flutter建立一個電商應用。 本文是flutter框架系列教程的第一部分,將學習如何安裝Flutter開發環境並建立第一個 Flutter應用,並學習Flutter應用開發中的核心概念,例如widget、狀態等。 本系列教

Maven教程開始學習到深入瞭解

Maven 簡述 Maven是apache 官方推出的一款專案自動構建工具。這款工具可以方便我們專案依賴的維護,構建,測試,釋出。 不同構建工具的對比 Eclipse 使用eclipse進行專案構建,相對來說,步驟比較零散,不好操作 Ant

webpack4學習(React)--重點細節整理筆記(Webpack 4 教程配置到生產釋出--http://www.css88.com)

一、開始配置webpack4開發環境   cmd開啟操作介面 mkdir 檔名 && cd 檔名   ------建立專案並進入專案目錄 npm init -y   ------初始化建立package.json檔案,-y的意思是初始化時全部選擇yes,

PS經典教程開始設計一個漂亮的網頁

你是否曾經想過設計一個漂亮的網頁,但是卻不知道怎樣入手?說實話,幾年前我也是這樣。當我瀏覽網頁的時候我看到這麼多好看的網頁,我就希望自己有技術創作這樣的設計作品。 今天我可以這麼做了,而且我將教你怎麼做這樣的設計!從根本上,對於這種設計你需要一點photoshop的操作技

思維導圖軟體TheBrain基礎教程如何建立新的“想法”

TheBrain,您的終極數字記憶和無限思維導圖軟體。我們從一個想法跳到另一個想法,構建越來越複雜的網路,直到新想法形成。TheB

手把手教程用Python開發一個自然語言處理模型,並用Flask進行部署

今年企業對Java開發的市場需求,你看懂了嗎? >>>   

技術學習基礎到精通的Python學習路線(附教程

首先,我們先普及一下程式語言的基礎知識。其實無論用任何程式語言來開發程式,都是為了讓計算機幹活,比如編寫一篇文章,下載一首MP3等,而計算機幹活的CPU只認識機器的指令,所以,儘管不同的程式語言差異極大,最後都得“翻譯”成CPU可以執行的機器指令。理論上任何語言幹任何事情幾乎都可以, 但是主要幹什麼

《iOS開發指南基礎到App Store上架》第2版和第3版的區別

新浪微博:東門兜 第3章 UIView與檢視 新書中添加了“3.3 動作與輸出口”。 新書中去掉了 “3.6 螢幕滾動控制元件ScrollView” 放入第4章 “3.10 屏幕布局” 放入第4章 “3.11 選擇器” 放入第5章 “3.12 集合

碼不停蹄(六)開始Java後臺開發,跳出寫Servlet+JDBC的坑,使用輕量級框架Spring+SpringMVC+MyBatis (SSM)

寫在前面:這篇文章是寫給剛剛接觸或者準備學習web/APP應用開發的同學的,分享我的後臺開發經驗,如果你對後臺開發沒有什麼概念,甚至剛剛學完Java的基礎語法,那麼請一定要仔細看我接下來提供的開發方案,這會幫你跳出很多坑,迅速找到入門後臺開發的路。 一、學點底

JAVA基礎入門系列】Day1 開發環境搭建

oracle 零基礎 ati 成功 官方 運行 根目錄 文件目錄 sys 一、安裝JDK java的sdk簡稱JDK ,去其官方網站下載最近的JDK即可。 http://www.oracle.com/technetwork/java/javase/downloads/jdk

開發一個Java Web專案要點

前言 本文章詳細的列出了開發一個傳統JavaWeb專案需要注意的要點,從環境準備開始到三層架構搭建,需要注意的地方全部羅列出來。 第一部分:環境準備 1.  Maven命令建立web骨架 mvn archetype:create -DgroupId=net

現代前端開發路線圖開始,一步步成為前端工程師

編者按:很多人都想學程式設計。但是苦於沒有具體的步驟和指導。比如想找份前端開發的工作,卻不知道應該先學習什麼再學習什麼,也不知道該選擇什麼樣的工具。因為經常被人問到類似的問題,全棧開發者Kamran Ahmed索性在github上制訂了一份現代前端開發的路線圖,並且用一篇文章

學習玩轉HTML5前端+跨平臺開發(假連結(掌握))

假連結:點選之後不跳轉 假連結:點選之後不跳轉 <a href="#"><a><a href="JavaScript"><a>#的假連結會自動回到網頁的頂部,而javascript:的假連結不會自動回到網頁的頂部

學習玩轉HTML5前端+跨平臺開發(表單標籤-非input標籤(掌握))

form表單標籤 <form action = "提交到伺服器地址">       <表單元素> </form>常見的表單元素     <input type = "text" name = "username"> 明文輸入框 

學習玩轉HTML5前端+跨平臺開發(表單練習(理解))

單選框:radio,通過name屬性進行互斥;checked預設選中多選框:checkbox,通過name屬性進行互斥;checked預設選中下拉選中框:select除了按鈕型別的input標籤以外,其他的型別的標籤都可以通過一個value屬性來指定將來提交到伺服器的值提交:

學習玩轉HTML5前端+跨平臺開發(表單標籤-按鈕(掌握))

【表單標籤——按鈕】(需要配合JS使用)1.普通按鈕<input type="button" value="我是按鈕”>2.圖片按鈕<input type="image" src="">3.重置按鈕<input type="reset">

學習玩轉HTML5前端+跨平臺開發(伺服器和瀏覽器 瞭解)

https://www.jianshu.com/p/f6da3875834b1、什麼是瀏覽器主流有5款瀏覽器;都有不同的核心;使用份額最高;處理相容問題,主要處理5種瀏覽器;Google國內國外使用份額最高;2、什麼是伺服器可以理解為超級計算機;伺服器也是一臺電腦,但是配置比

黑馬程式設計師基礎到精通的前端學習路線

隨著網際網路的深入發展,前端開發工程師一躍成為市場上非常搶手的人才。很多同學,包括以前做UI的、Java的、或者對於IT完全零基礎的同學都想學習前端。下圖是網上流傳甚廣的一張前端學習思維導圖,很多初學者表示看到這些密密麻麻的知識點就已經暈了。確實,前端是一門涵蓋面很廣的