Spark 简易入门教程(Java的微型Web框架)


今天在reddit上看到了这个有趣的Java Web框架,就写了几个例子稍微感受了一下,顺手把它的文档也翻译的了一下。

一、Spark是什么

Spark是一个微型的Java Web框架,它的灵感来自于Sinatra,它的目的是让你以最小的代价创建出一个Java Web应用。

二、使用Spark

Spark的使用相当简单,首先你需要下载它的jar包以及它所依赖的jar包,或者你也可以直接通过maven来帮你做这件事情:
在pom.xml中修改repository的配置:

<repository>
      <id>Spark repository</id>
      <url>http://46.137.105.19:8081/nexus/content/repositories/spark/</url></repository>

再添加spark的依赖

<dependency>
      <groupId>spark</groupId>
      <artifactId>spark</artifactId>
      <version>0.9.8-SNAPSHOT</version></dependency>

然后只要下面这一段代码,你就可以输出一个Hello,world了:

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也支持在路径中设置参数,例如:

new Route("/user/:username"){};

你可以在handle方法里面通过调用request的params方法来获取到路径中的参数:

request.params(":username");
Filters

除了Routes之外,Spark中另一个重要的组件就是Filter,filter分为before filter和after filter,两者分别可以在请求被Routes处理之前和被Routes处理之后获取Request或者对Response进行修改,比如
Before Filter:

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:

after(new Filter() {
    @Override
    public void handle(Request request, Response response) {
        response.header("foo", "set by after filter");
    }
 });

你也可以让Filter只过滤符合特定规则的URL:

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

四、其他

终止一个请求

如果你要在Routes或者Filter中马上终止一个请求,那么你可以调用halt方法来终止,在halt方法,你可以指定状态码或者返回的信息:

halt();
halt(401);
halt("This is the body");
halt(401, "Go Away!");
请求重定向

可以调用response的redirect方法来进行请求重定向:

response.redirect("/bar");
指定端口

Spark采用的默认应用服务器是jetty,默认的端口是4567,如果你要指定其他的端口,那么可以在Routes或者Filter中调用下面方法来指定:

setPort(9090); // Spark will run on port 9090
文档以及源代码
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值