Java web app 開發第一步 – 整合Eclipse + Tomcat

以下帶大家一步一步在Eclipse環境中設定Tomcat

  1. 下載Tomcat  (以Tomcat 8.5 為例)
    https://tomcat.apache.org/download-80.cgi
    網頁裡有如下各種格式的壓縮檔,請依照作業系統來選擇,下載完成執行解壓縮

  2. 在Eclipse 偏好設定 Server –> Runtime Environments –> Add 把 Tomcat 加進來

  3. 選擇 Tomcat 所在位置 , Finish, 設定完成!

  4. 接著,打開 servers view  (Window –> Show View –> Servers)

  5. 點擊 view 裡面的超連結,選擇 Tomcat 8.5,會出現剛才所設定的 server runtime environment,點擊 Finish 完成設定

  6. 我們已經成功把 Tomcat 整合進 Eclipse 開發環境,下一步就是測試一下囉!
    新增一個 Dynamic Web Project,點擊 Next

  7. Project Name –> “HelloWorld”,點擊 Finish

  8. 在 HelloWorld 專案的 WebContent 底下新增 index.jsp

  9. 在 servers view 的 Tomcat 上按右鍵 選擇  “Add and Remove”

  10. 把 HelloWorld 專案加到右邊,Finish

  11. 點擊 servers view 右上方的啟動按鈕

  12. 在console 看到  INFO: Server startup in xxxx ms ,代表啟動成功!我們可以開啟瀏覽器,網址輸入 http://localhost:8080/HelloWorld 看到 index.jsp 的內容

Maven-實作篇 (2)

延續上一回的實作,現在我們將從桌面視窗程式開始!

Desktop

  1. 依照以下資訊,建立 Maven 專案 (使用 maven-archetype-quickstart)
    • groupId: com.appx
    • artifactId: user-service-desktop
    • package: com.appx.userservice.desktop
    • version: 1.0-SNAPSHOT
  2. 這次不實作unit test,所以把 src/test/java 底下 AppTest.java 刪除,同時也移除 POM.xml 裡面 junit 的 dependency
  3. 在 POM.xml 增加以下 plugin 設定,除了 compiler plugin,也使用了 maven-shade-plugin 用來把整個桌面視窗程式打包成單一 jar 檔(包含dependency),可以看到在 package 這個lifecycle build phase 綁定了 shade goal,並且必須指定 main 方法所在的class
    (maven lifecycle的概念非常重要,請參考之前的文章)
  4. 加入 core 專案作為 dependency
  5. 下載以下程式,並放至 src/main/java 底下這個package com.appx.userservice.desktop
    https://drive.google.com/open?id=0B0C215CJ0AjoX2tPLVpVZlJYQkk
  6. 執行 mvn package ,可以發現 target 資料夾底下多了兩個 jar,其中 user-service-desktop-1.0-SNAPSHOT.jar 包含了相關的 dependencies

  7. 可以使用 jar -tf 指令來比較兩個 jar 的內容

    jar -tf user-service-desktop-1.0-SNAPSHOT.jar
    jar -tf original-user-service-desktop-1.0-SNAPSHOT.jar

  8. 執行 jar ,確認一切都 ok,id可以輸入 1 ~ 3,會看到查詢結果

Maven-實作篇 (1)

接下來會帶大家動手實作幾個 Maven 專案,從練習過程中我們會更進一步了解到 Maven 所帶來各種方便的特性!

我們將會建立一個簡單的用戶查詢系統,由三個專案所組成,分別是 core, desktop, web,其中 desktop, web 專案會將core 當作 dependency,如下圖所示:

  • core 專案代表整個系統的核心功能所在
  • desktop 專案負責視窗程式的操作介面
  • web 專案負責網頁的操作介面

Continue reading →

[Java101 基礎篇] 三張圖 搞懂 Shallow Copy 以及 Deep Copy

前言
有些時候,我們會需要將資料(物件) 覆製一份,
方便獨立操作 ~ 卻發現結果跟想像的不一樣。

 

讓我們從程式碼來做個說明~

Sample Code

一個正常的物件  Person p = new Person();

Object Structure
單一物件的結構

 

Shadow Copy

java101_referenceCopy
有二個參考點(References)指到同一份資料

Deep Copy

Deep Copy Result
二個完全獨立的物件

對了~

對參考點的概念(Reference) 還不是很清楚?!
對建構子的運用 還想更進一步嗎?!           可以參考我們提供的教育訓練

 

參考資料:
https://dzone.com/articles/java-copy-shallow-vs-deep-in-which-you-will-swim