這篇文章會示範從 0 到 1 打造一個網站應用程式,並整理 Java Web Appication 相關資源如基礎建設、前端網頁、後端 Web API 及資料庫。
Java Web Appication 相關資源
一個 Java Web Appication 分成前端、後端及資料庫。
前端網頁(網址) <–Q1–> RESTful Web Service <–Q2–> Web 伺服器 <–Q3–> 實體資料庫
需打通的關節分三個方面,
- 建立 Java Web Appication 並提供 RESTful Web Service
- 透過 War 檔發佈至容器: 將程式發佈至伺服器供前端存取
- 讓撰寫的 RESTful Web Service 存取實體資料庫
語法教學資源
Coding Conventions,推薦撰寫方式及風格上的統一,用意在於方便閱讀及增進效能。
- Java 後端 (http://www.oracle.com/technetwork/java/codeconventions-150003.pdf )
- JavaScript 前端 (http://www.w3schools.com/js/js_conventions.asp )
語法教學資源
- Java (http://openhome.cc/Gossip/Java/ )
- JavaScript (http://www.w3schools.com/js/default.asp )
- JavaScript Practice (https://www.codecademy.com/tracks/javascript )
OpenSource 平台
- 前端 (http://codepen.io/ )
- 資料庫 [MySQL] (http://www.codedata.com.tw/database/mysql-tutorial-getting-started )
JDK 多版本管理工具,方便在同樣的機器上使用多版本 Java
相關 Framework 學習
- Jersey (https://jersey.java.net/documentation/latest/ )
- Jersey (http://examples.javacodegeeks.com/category/enterprise-java/rest/jersey/ )
IDE (Integrated Development Environment) 選擇
- Eclipse (http://www.vogella.com/tutorials/Eclipse/article.html )
- NetBeans (https://netbeans.org/kb/docs/java/quickstart.html )
- Intellij idea (https://www.jetbrains.com/idea/ )
這篇附上 Eclipse 的相關快捷鍵,另外建議自動完成須更改一下設定,讓鍵入每一字的時候都可以出現。設定位置在 Window → Preferences → Java → Editor → Content Assist,Auto activation triggers for Java 為 IDE 遇到何種字元會自動啟動提示,請改為 .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ(,;
,就會遇到什麼字元都自動提示惹。
快捷鍵 | 功能 |
---|---|
Ctrl+Shift+T | Opening a class |
Ctrl+Shift+R | Opening a Resourse |
F3 or ctrl+mouse click | go into a class |
Ctrl+O | Quick Outline |
Ctrl+H | Search menu |
Ctrl+J | Incremental Find |
Ctrl+Shift+/ | 全部收合 |
Ctrl+* | 全部展開 |
Ctrl+Shift+F | 自動排版 |
打通三個關節開發 API 後端服務
系統配置上 Java 也有三種,依照需求會選用不同版本,如下:
- SE(Standard Edition)
- ME(MicroEdition)
- EE(Enterprise Edition)
介紹文連結(http://www.codedata.com.tw/book/java-basic/index.php?p=ch1-2 )
開工前,請先下載 JDK (Java Development Kit),從翻譯來看就是開發工具組,JDK 中就包含 JRE (Java Runtime Environment),有 JRE Java 程式就可以執行了。記得設環境變數,讓電腦找到工具組!!! 不然就!!! 什麼事都不會發生 XD
因為要寫 Web 應用,所以選擇 Java EE,下面是 EE 肚子裡裝 der 東西 XDDD
創建 Java Web Appication
首先!建立 Dynamic Web Project 並選擇 Runtime Server
可勾選自動生成 Web.xml ,或是自己輸入。
目標: 利用 Jersey 這個 Framework 實做功能並發佈到湯姆貓上, 未使用自動建構工具前,需自行下載 Library 並放進 WebContent/Web-INF/lib 資料夾裡,這是 War 檔中固定的架構勿更改。
實作: 新增相關 class,並按照範例寫作,可依照這篇提供的範例 (http://www.vogella.com/tutorials/REST/article.html ),做到第六章即可。
完成之後我們就一次打通了 Q1 及 Q2 了 ╰( ̄︶ ̄)╯
前端網頁(網址) <—Q1—> RESTful Web Service <—Q2—> Web 伺服器
A1:利用 Jersey 寫出 RESTful Web Service
A2:JBoss 可利用 Export War 檔,將檔案發佈至 Server
透過 Jersey RESTful Service 寫入資料庫
現在剩下最後一個 Q3 惹!!!!!!!!!!
Web 伺服器 <—Q3—> 實體資料庫
Q3:如何讓撰寫的 RESTful Web Service 存取實體資料庫?
A3:複習 Java 連接 MySQL 的練習,並整合進 RESTful Service 中。
按照以下範例:
1 |
|
為了避免一些問題,可以參考廣為流傳的設計模式,像是 Singleton Design。
設計模式,提供了大家程式架構的參考,在這範例中的 ArticleDao,就有用到 Singleton 的概念,就是單一個 Instance。
Singleton 模式可以保證一個類別只有一個 Instance。
1 | public enum ArticleDao { |
其他地方則透過 ArticleDao.instance.getModel().values()
來叫用內部資料。底下簡單示範了怎麼從 sqlite 中撈出 thing 中的所有資料。
1 | public class TestSqlite { |
什麼是 JNDI
JNDI (Java Naming and Directory Interface ),看了一陣子原文介紹之後,真心覺得發明一堆奇怪的名詞的目的在於!!!讓人覺得自己很蠢,導致會覺得作者很猛 XDDD 然後留一個小難跨過的 Gap,來讓知識不普及 XDDD
譬如當我們想搞一個後端資料連結用的服務,那顯然需要把他配置到你的 Server 上,同時也會需要一個 JNDI name ,接著這個 JNDI Name 跟 interface 就都會被註冊到 JNDI Service。
當 Client 程式在執行時,要先去找 (lookup()) 到一個後端資料連結的 interface ,如果小幸運找到在 JNDI Service 裡面,這時候 JNDI Service 會回給你一個 remote 的 reference ,取得的這個 remote reference 是一個 Object ,有了這個 Object ,你就可以用它做你想做的事情,譬如去得到一個後端連結(getConnection)…
所以簡單來說,雖然是你做你的我做我的,不過出一張嘴的才是算數的,反正最後給我弄出這樣那樣的 OOO 讓我可以用就好,然後打雜小弟就可以開始努力實做出各種來提供,後人也就不用了解像是帳號密碼 IP 位置或是 Driver 去哪下載惹。
資料物件名詞 (取名主要用來辨識關係)
- POJO (pure old java object)
1 | public class Employee { |
- DAO (data access objects)
主要配合資料庫 - PO (persistant object)
Hibernate example: 當 POJO 被實體化(instance) 有 set 值,接著進入 session 後。 - DTO(data transfer object)
POJO 永久化成 PO,PO 組合成 DTO。 - JavaBean
POJO 可序列化,有一個無參數的建構子,使用 getter 和 setter 方法來訪問屬性。 - XML,JSON
都是 Web 常用的傳輸格式。
現況:表中有 100 個欄位,則相對應的 PO 有 100 個屬性。
情境:界面上只需顯示 10 個欄位。
實作:Client 向服務端取值,服務端不需傳全部的 PO,此時將只有 10 個屬性及傳遞的參數組成 DTO 來傳遞結果。
Hibernate
操作物件就可以完成讀寫資料庫,是一個結合 JDBC 和物件的 Framework。
@標註
主要就是對程式碼加些@標註,給人看也給機器讀。之前看過的 @Override 就是內建的一個標註,就是要進行 parent 函數覆寫的意思,@Deprecated 被標注的方法或類型已不再推薦使用。
用在其他 Annotation 上的 Annotation
@Retention
: 確定標註的生命周期, 用一個 Enum 的 RetentionPolicy 參數設定@Documented
: 文檔化@Target
: 表示標註適用的範圍,也用 Enum 的 EnumType 的參數設定@SessionScope
@Inject
: 針對資料的標註,@JsonProperty 改變 JSON 名稱
1 | public class Name { |
自訂標註則需要用到 @interface
,不同於 interface,這次使用的是@interface
1 | public Test { |
按照上面這樣撰寫後,其他地方就可以使用 @Test 做為自定標註了。
下一篇文章我們會介紹如何如何使用 Jersey 這套框架來開發 RESTful Web services。
喜歡這篇文章,請幫忙拍拍手喔 🤣