一、Spark是什么
Spark是一个微型的Java Web框架,它的灵感来自于Sinatra,它的目的是让你以最小的代价创建出一个Java Web应用。
二、使用Spark
Spark的使用相当简单,首先你需要下载它的jar包以及它所依赖的jar包,或者你也可以直接通过maven来帮你做这件事情:
在pom.xml中修改repository的配置:
1
2
3
4
|
<
repository
>
<
id
>Spark repository</
id
>
</
repository
>
|
再添加spark的依赖
1
2
3
4
5
|
<
dependency
>
<
groupId
>spark</
groupId
>
<
artifactId
>spark</
artifactId
>
<
version
>0.9.8-SNAPSHOT</
version
>
</
dependency
>
|
然后只要下面这一段代码,你就可以输出一个Hello,world了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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!"
;
}
});
}
}
|
打开http://localhost:4567/hello快快看看效果吧。
怎么样?够简单吧,接下来看下Spark中一些重要的组件:
三、Spark中的组件
Routes
在Spark程序中,其请求的处理都是由Route来完成的,一个Route由三部分组成:
- 一个动词,比如get,post,delete,trace等等
- 一个路径,比如前面的例子中的“/hello”
- 回调函数,比如前面的例子中的handle
另外需要注意的一点是,Spark在处理请求进行路径匹配的时候是优先匹配先出现的Route,也就是如果你的请求匹配到了多个Route,那么Spark会调用先出现的那个来处理请求。
另外Spark也支持在路径中设置参数,例如:
1
|
new
Route(
"/user/:username"
){};
|
你可以在handle方法里面通过调用request的params方法来获取到路径中的参数:
1
|
request.params(
":username"
);
|
Filters
除了Routes之外,Spark中另一个重要的组件就是Filter,filter分为before filter和after filter,两者分别可以在请求被Routes处理之前和被Routes处理之后获取Request或者对Response进行修改,比如
Before Filter:
1
2
3
4
5
6
7
8
9
10
|
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:
1
2
3
4
5
6
|
after(
new
Filter() {
@Override
public
void
handle(Request request, Response response) {
response.header(
"foo"
,
"set by after filter"
);
}
});
|
你也可以让Filter只过滤符合特定规则的URL:
1
2
3
4
5
6
7
|
before(
new
Filter(
"/protected/*"
) {
@Override
public
void
handle(Request request, Response response) {
// ... check if authenticated
halt(
401
,
"Go Away!"
);
}
});
|
四、其他
终止一个请求
如果你要在Routes或者Filter中马上终止一个请求,那么你可以调用halt方法来终止,在halt方法,你可以指定状态码或者返回的信息:
1
2
3
4
|
halt();
halt(
401
);
halt(
"This is the body"
);
halt(
401
,
"Go Away!"
);
|
请求重定向
可以调用response的redirect方法来进行请求重定向:
1
|
response.redirect(
"/bar"
);
|
指定端口
Spark采用的默认应用服务器是jetty,默认的端口是4567,如果你要指定其他的端口,那么可以在Routes或者Filter中调用下面方法来指定:
1
|
setPort(
9090
);
// Spark will run on port 9090
|