2014-12-16

Hello Vaadin

Vaadin 是什麼?

一個 Java Web Framework,和以前用過的 SpringMVC Framework 或 Struts 2 相當的不同。

Vaadin 由 Server side 掌控 Client side,用類似 AWT 或 Android UI 的開發方式來開發 Web,簡言之,可以在不碰 Client side 技術(HTML、Javascript 與 CSS)的前提下完成一個網站。

這樣的設計模式優點在於,只要用 Java 就可以完成所有事情,而且不用管瀏覽器不相容的問題。

直接開工吧!

環境安裝

JavaSDK  必須 6 以上,建議用 8。

Eclipse IDE for Java EE Developers,目前用的是 Luna。

Apache Tomcat 8。

Apache IvyDE Plugin - Eclipse Plugin,Vaadin Plugin 需要,Update site 為 http://www.apache.org/dist/ant/ivyde/updatesites,勾選如下圖。


Vaadin Plugin - Eclipse Plugin,Update site 為 http://vaadin.com/eclipse,由於是透過 Ivy 下載 Vaadin 需要的 library,所以要安裝很久。


嗨,你好!

Eclispe > File > New... > Project... > Vaadin > Vaadin 7 Project


基本上只要輸入 Project name 就夠了,但為了在 Eclipse 裡起 Tomcat,Target runtime 也要設定,如果沒有安裝 Tomcat,可以現在安裝。



其他預設值只要確定沒問題就可以了,按 Next。

不知道為何「Generate web.xml...」預設沒有勾選,還是勾起來吧。


建立完成,預設目錄檔案如下。


打開 Servers View,若沒有想要的 Tomcat,可以按右鍵 > New...來建立,記得將剛建立的 Vaadin project 加入。



然後在 Servers View 找到剛建立的 Tomcat,按右鍵 > Start 或 Debug,完成後,開瀏覽器到 http://localhost/HelloVaadin,port 要看 Tomcat 的設定。



噹,一行 Client side 程式都沒寫到,就完成一個小小的功能。

發生什麼事了?

先來看看唯一的一隻 Java,HellovaadinUI.java。
@WebServlet 是 Servlet 3.0 以後才有的功能,重點在 init() 裡,建立 Layout 並設定,建立 Button 並加上 ClickListener,就這樣。

@SuppressWarnings("serial")
@Theme("hellovaadin")
public class HellovaadinUI extends UI {

 @WebServlet(value = "/*", asyncSupported = true)
 @VaadinServletConfiguration(productionMode = false, ui = HellovaadinUI.class)
 public static class Servlet extends VaadinServlet {
 }

 @Override
 protected void init(VaadinRequest request) {
  final VerticalLayout layout = new VerticalLayout();
  layout.setMargin(true);
  setContent(layout);

  Button button = new Button("Click Me");
  button.addClickListener(new Button.ClickListener() {
   public void buttonClick(ClickEvent event) {
    layout.addComponent(new Label("Thank you for clicking"));
   }
  });
  layout.addComponent(button);
 }

}
有趣的一點是,Vaadin 並不是將這些 Java 轉成 HTML 等等的 Client side 語言,而是全部都是用 Javascript 與 AJAX 來達成。

可以去看看產出網頁的原始碼就知道,可見的頁面都是 Javascript 產生的,所以在原始檔裡試看不到的,而且使用者每一個動作(互動)都是透過 AJAX 送回 Server side 處理的。

WebContent 目錄下可見的檔案只有一些 CSS 和 web.xml,web.xml 是一定要的,而 CSS 檔則表示 UI 是可以客制的。

另外在根目錄下可以看到 ivy.xml,這裡先看一個重要的設定。
<?xml version="1.0"?>
<!DOCTYPE ivy-module [
 <!ENTITY vaadin.version "7.3.6">
]>
設定 Vaadin 使用的版本。

這裡要分清楚的是,Vaadin Plugin 的版本和 Vaadin 的版本是不一樣的,Vaadin Plugin 是 Eclipse plugin,而 Vaadin 指的是 Vaadin Framework。

每個 Eclipse 只會有一個 Vaadin Plugin,但是每個 Vaadin project 可以使用不同的 Vaadin 版本,就是從 Ivy.xml 裡設定的。

Ivy.xml 設定後不會立即生效,得從專案名稱按右鍵 > Ivy > Resolve 來下載指定版本的 Vaadin,當然得花一些時間。

如果已經用過 Tomcat 後才更改 Vaadin 版本,得清空 Tomcat 的暫存檔,在 Servers View 找到 Tomcat 按右鍵 > Clean... 與 Clean Tomcat Work Directory...。

而 Vaadin Plugin 的更新則是從 Eclipse > Help > Check for Updates... 來的。
---
---
---

沒有留言:

張貼留言