簡介
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!";
}
});
基本上把這段程式放在 main() 中後啟動,就會啟動 spark 內搭的 jetty 完成程式的佈署及服務開啟。
安裝
1. 建立 Maven Project2. 加入 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 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);
//前置過濾器
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(埠號);
沒有留言:
張貼留言