• spark学习


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

    一、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
  • 相关阅读:
    .NET基础回顾(二)
    python 三元表达式、列表推导式、生成器表达式
    python 函数相关定义
    python 匿名函数
    python递归函数
    内置函数
    迭代器、生成器、面向过程编程
    python 函数对象、函数嵌套、名称空间与作用域、装饰器
    python django ORM 性能优化 select_related & prefetch_related
    python 函数
  • 原文地址:https://www.cnblogs.com/lyxblogs/p/5610999.html
Copyright © 2020-2023  润新知