2014年3月10日 星期一

Java Spark Framework


簡介


Github URL: https://github.com/perwendel/spark

Spark 是以 Ruby Sinatra 為範本的 Java 版本,可以用很少的程式碼量快速建構 Web 系統。
舉個簡單的例子:

假設使用 http://主機名稱:埠號/hello 這樣的 URL 作為一項 Web 服務,其回傳 "Hello World!",其程式碼寫法為:

get(new Route("/hello"
   @Override
   public Object handle(Request request, Response response) {
      return "Hello World!";
   }

});

意思是:建立 Http Get 能進行存取的 /hello 服務。
基本上把這段程式放在 main() 中後啟動,就會啟動 spark 內搭的 jetty 完成程式的佈署及服務開啟。

安裝

1. 建立 Maven Project
2. 加入 dependency 設定:
<dependency>
        <groupId>com.sparkjava</groupId>
        <artifactId>spark-core</artifactId>
        <version>1.1.1</version>
    </dependency>
3. 可以試著執行 mvn clean 讓相依的 Jar 檔下載至 local 。

執行運作

 mvn exec:java -Dexec.mainClass="${完整.類別名稱}"

程式範例

1. 存取網址的一部分作為參數。例:http://主機名稱:埠號/users/Sherlock,這裡希望 Sherlock 作為參數,讓程式進行處理:

get(new Route("/users/:name") {
            @Override
            public Object handle(Request request, Response response) {
                return "Selected user: " + request.params(":name");
            }

        });

意思是:視 :name 為參數,在程式裡能透過 Request 物件的 params 這個 Map 物件取得。(:name為 key, Sherlock 為 value)

2. 存取網址中的 query string:

//取得所有 query 參數           
Set<String> queryParams = request.queryParams();

//取得指定名稱的參數值
request.queryParams("參數名稱");

//取得整串 query string

request.queryString();

3. 存取各個 scope 的 attribute 值:

//getter
request.attribute("attribute_name_to_read");

//setter
request.attribute("attribute_name", "attribute_value");

//取得 Session scope 的 attribute
Session session = request.session();
session.attribute("session_attribute_name");

4. 存取 header

//getter
request.headers("header_name");

//setter (response物件)
response.header("header_name", "header_value");

5. 存取 cookie

//getter
request.cookie("cookie_name");

//setter (response物件)
response.cookie("cookie_name", "cookie_value");

//指定 cookie 有效期限
final int MAX_AGE = 1000;
response.cookie("cookie_name", "cookie_value", MAX_AGE);

6. 實作 filter

//前置過濾器
before(new Filter("/hello") {
  @Override
  public void handle(Request request, Response response) {
    //implements ...
  }
});

//後置過濾器
after(new Filter("/hello") {
 @Override
  public void handle(Request request, Response response) {
    //implements ...
 }

});

7. View 的實作

Route 有不同的子類支援不同的輸出格式:
 1) TemplateViewRoute : 輸出 HTML 範本
 2) ResponseTransformerRoute


8. 變更 listen port

直接呼叫 setPort(埠號); 



這裡對於不同的 View 沒有舉太多例子,視需求再到網路上找找資訊即可。


沒有留言:

張貼留言