Spark 简易入门教程

一、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

猜你喜欢

转载自jeansmo.iteye.com/blog/2343665