您的位置:首页 > 编程语言 > Java开发

微型的Java Web框架 Spark

2011-05-25 14:24 288 查看
Spark是一个可以让你以最小的代价快速创建Web应用的轻量级Java web框架,它的灵感来自于Sinatra。

开始使用Spark
Routes
Request
Response
终止一个请求
Filters
请求重定向
指定端口

开始使用Spark

下载spark和spark依赖的类库(或者让maven来为你做这些事情),把它们放在工程classpath下,开始动手:
import static spark.Spark.*;
import spark.*;

public class HelloWorld {

public static void main(String[] args) {

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

}

}

[/code]
打开下面的链接查看效果:
http://localhost:4567/hello

Routes

Spark程序主要是由一组routes构成。一个route由三个部分组成:

动词 (get, post, put, delete, head, trace, connect, options)

路径 (/hello, /users/:name)

回调函数 ( handle(Request request, Response response) )

注意!Spark是根据Routes定义的顺序来匹配的。Spark会调用第一个和请求匹配的Routes。

....

get(new Route("/") {
@Override
public Object handle(Request request, Response response) {
// .. Show something ..
}
});

post(new Route("/") {
@Override
public Object handle(Request request, Response response) {
// .. Create something ..
}
});

put(new Route("/") {
@Override
public Object handle(Request request, Response response) {
// .. Update something ..
}
});

delete(new Route("/") {
@Override
public Object handle(Request request, Response response) {
// .. annihilate something ..
}
});

options(new Route("/") {
@Override
public Object handle(Request request, Response response) {
// .. appease something ..
}
});

....


可以在Route的路径中指定参数,然后通过调用request对象的params方法来获得:
// matches "GET /hello/foo" and "GET /hello/bar"
// request.params(":name") is 'foo' or 'bar'
get(new Route("/hello/:name") {
@Override
public Object handle(Request request, Response response) {
return "Hello: " + request.params(":name");
}
});

Request

handle方法的request参数提供了和请求相关的信息和功能:
....
request.body();               // request body sent by the client
request.contentLength();      // length of request body
request.contentType();        // content type of request.body
request.headers();            // the HTTP header list
request.headers("BAR");       // value of BAR header
request.host();               // "example.com"
request.ip();                 // client IP address
request.pathInfo();           // the path info
request.port();               // the server port
request.queryParams("FOO");   // value of FOO query param
request.queryParams();        // the query param list
request.raw();                // raw request handed in by Jetty
request.requestMethod();      // The HTTP method (GET, ..etc)
request.scheme();             // "http"
request.url();                // "http://example.com/foo"
request.userAgent();          // user agent
....

Response

handle方法的response参数提供了和响应相关的信息和功能:
....
response.body("Hello");        // sets content to Hello
response.header("FOO", "bar"); // sets header FOO with value bar
response.raw();                // raw response handed in by Jetty
response.redirect("/example"); // browser redirect to /example
response.status(401);          // set status code to 401
response.type("text/xml");     // set content type to text/xml
....

终止一个请求

如果想要在一个filter或者route中马上终止一个请求,那么就使用:
halt();


当然在halt的时候你也可以指定返回的状态:
halt(401);


或者是返回的信息:
halt("This is the body");


或者都指定:
halt(401, "Go Away!");

Filters

Before filter在request之前执行,它们可以读取request,也可以读取/修改response。 如果想要停止执行filter,那么就调用halt方法:
before(new Filter() { // matches all routes
@Override
public void handle(Request request, Response response) {
boolean authenticated;
// ... check if authenticated
if (!authenticated) {
halt(401, "You are not welcome here");
}
}
});


After filter在每一个request之后执行,它们可以读取request,也可以读取/修改response:
after(new Filter() {
@Override
public void handle(Request request, Response response) {
response.header("foo", "set by after filter");
}
});


你可以为filter指定pattern,这样它们就只过滤符合pattern的请求:

before(new Filter("/protected/*") {
@Override
public void handle(Request request, Response response) {
// ... check if authenticatedhalt(401, "Go Away!");}
});

请求重定向

你可以通过redirect方法使一个请求重定向:
response.redirect("/bar");

指定端口

默认情况下,Spark监听的端口是4567。如果你想要指定别的端口,那么就在routes或者filters里面调用下面的方法:
setPort(9090); // Spark will run on port 9090
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: