Java 專案基礎

這篇文章會提到 Git, Maven, Spring Core, Spring MVC, Hibernate 及 H2。這些是招式,但是其實文章的重點在思路。身為軟體工程師,很多基礎是必須十分熟悉才行,類似練功夫前先學紥馬的動作。這些我們都知道,但是沒做到及格的人,我遇到很不少。所以,我寫這篇文章,以後我就可以直接請有心的人來看就好了。

一、Git

Git 基本上是每個工作者都得學會的技能:工程師、管理師、設計師,是目前使用電腦的人都該學會的基本資訊素養。它提供的好處,在於使我們所有在電腦上的檔案都具有追溯性、都可以保留它們從被生成到刪除所有生命週期背後的故事。

那些故事能幫助我們弄清楚很多事 (人事時物),減少很多人為造成的模糊、摩擦,同時也能顯示專業是如何被形塑出來的。

  1. 確定 Git 是否已安裝,以及其版本。

二、 Maven

下載、解壓縮至指定目錄,然後設定 PATH 環境變數

三、Java

詳見官網

四、創造一個 Web Maven Project。

這個需要學習、記憶嗎?還是問人?不用,只要 Google 一下就行!想好關鍵字、搜尋。我的關鍵字:maven webapp project example。

選擇一個比較可信的來源,然後嚐試它。我選擇 Maven 官網的文章

什麼!照著執行也錯!不過,那又怎樣…有錯誤訊息,就有可以 Google 的關鍵字可用。

我搜尋「Could not find goal ‘create’ in plugin org.apache.maven.plugins:maven-archetype-plugin:3.0.1 among available goals crawl, create-from-project, generate, help, integration-test, jar, update-local-catalog」, 得到結論

https://stackoverflow.com/questions/43744359/creating-maven-multi-module-project-with-eclipse

所以把 create 改成 generate 就好了。來試試:

這次成功了。

看看造出了些什麼?

除了 pom.xml 這個 Maven 用設定檔,另外有 index.jsp 與 web.xml 兩個檔案。我們從什麼地方開始看?我的選擇是先了解我的 Maven 專案有哪些組成,所以我看 pom.xml。

假設我們不太懂 Maven,也不太知道這個 pom.xml 怎麼增加、修改怎麼辦?我想到,這個 pom.xml 是一層層的 XML Node 疊出來的,應該有它的格式、規範吧?

我利用 IDE 把第三層以外的東西折起來:

雖然是很小的範例,不過看得出來:project 是根節點;第二層從 modelVersion 到 url 比較單純,只是文字值;第10行的 dependencies 是 dependency 的複數型,所以裡面包了很多個 dependency 節點也很直覺;第18行的 build 似乎有其他層次的設定。

這些各代表什麼?我用「pom.xml」檔進行 Google,而且是「搜尋圖片」。我挑了張我覺得容易懂的圖:

http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom.html

從圖中,至少可以看出的端倪:

  1. 無論是左上的 POM Relationships、右上的 Build Setting 似乎都沒在檔案裡顯示出來,猜想是邏輯分類,就連 Coordinate 也是。
  2. 我在檔案裡看到的是 project 為根節點,有 POM Relationships 中的 groupId、artifactId及version。
  3. 從上面兩項我猜想:「首字大寫」的文字,應該都不是節點名稱。所以在 xml 中,只看得到小寫文字的部分。例如:build。
  4. 分別用「POM Relationships」、「Build Setting」加上「maven」為關鍵字,應該可以找到更多資訊。我在使用「maven Build Setting」搜尋時,得不到很明確的結果。我再參看 pom.xml 中的內容:

我決定用「maven build finalname」為關鍵字,再試著找看看。得到以下資訊:

就這樣,我弄懂了 finalName 是幹嘛的。

我想下面這一段我有看懂:要 build 整個專案,需要被加入的函式庫(jar),需要被設定引入:

這裡預設加入了 junit。Unit Test 的重要性,不言而喻。不過這版本太小,我希望至少用第4版以上的。所以我決定用「maven junit 4」做為關鍵字進行搜尋。

看來最新版(2014年釋出)的是 4.12。就用吧!所以我變更版本:

既然有了 junit4,就寫個程式來驗證一下。

使用 mvn clean test 指令來清除已編譯過的程式,並重新編譯後,執行測試程式。

有一個測試程式通過。

目前為止,算是為 Maven 為基礎的 web 專案,建立了一個小小的基礎。這時我們可以使用 Git 將這一階段做過記錄。

接下來要向另一個基礎來前進:使用 SpringMVC。要使用 SpringMVC 這個框架,自然要加入不少函式庫 (jar),有些是 Spring Core 的、有些是一般專案都用得到的 log4j … 等。我用「maven spring mvc pom」為關鍵字 Google。

想當然爾,一定有人做過了。這時我們可以選擇複製貼上,不過最好還是逐項看過、將一些設定改成我們要的。

加入函式庫之後,可以開始使用了。對於 Java Web 程式而言,entry point 是什麼呢?web.xml。所以關鍵字是什麼?「spring4 web.xml configuration」試試。

修改自: https://www.mkyong.com/spring-mvc/gradle-spring-4-mvc-hello-world-example-annotation/

servlet-context.xml 的內容該是什麼?其實只要用「spring dispatcherservlet」Google 就可以得知。以下用一個最簡單、使用 JSP 的範例來說明:

DispatcherServlet 使用 InternalResourceViewResolver進行 URL 所要求的資源的解析。例如:當 controller 回傳為 “home” 時,會對應到 WEB-INF/views/home.jsp 檔案。

那 controller 呢?只要產生一個有宣告 @Controller 的 Java 類別即可,因為上面的第4行加上第15行,會讓 Spring 容器自己去找到該類別、視其為 Controller。

既然回傳 home 會對應到 WEB-INF/views/home.jsp,那也得實作該檔案:

home.jsp

為了開發效率,我想使用內嵌式的 Tomcat 來運行,所以加入下面的 plugin 到 pom.xml 中:

然後就可以使用 maven clean tomcat7:run 來啟動 web 啦。

五、加入 H2 & Hibernate

in pom.xml

依 Hibernate 規則配置下面兩個檔案至 resources 目錄下:

hibernate.cfg.xml
hibernate.properties

然後我們就可以使用 H2 & Hibernate:

這裡我先假設了我們有一個 Shop 模型 (model / entity)。

實作如下:

以上就是一個簡單的 Java Web 的基礎整合。

還可以再依其基礎,加上 Security、MQ 等服務。