网站:http://sparkjava.com/documentation#getting-started
有些东西不知道怎么翻译,所以可能有用词不准确的地方。英语好的可以直接去官网看,我这说是个笔记,其实很多地方就是个摘抄。看中文查询比较快速,这篇文章主要给自己查询用。
做server需要学习网络这是一定的,接触新技术可能也会有更多不知道的东西。沿袭李笑来的规劝,学习不用太完美主义,有些概念不了解,只要没到非用不可的程度,就不要节外生枝,先放一放。学大体的内容。毕竟你爱看电视,但是也不一定知道怎么做一个电视。
||目录||
启动server
Route
Halting 停止访问
Filters 设置验证 过滤器
(持续更新。。)
启动server
如何开启server?
发送request之后,自动开启
你可以设置如果初始化失败的信息
initExceptionHandler((e) -> System.out.println("Uh-oh"));
default:
private Consumer<Exception> initExceptionHandler = (e) -> {
LOG.error("ignite failed", e);
System.exit(100);
};
如何关闭server?
stop();
Route
route是spark 里最重要的一部分,因为整个的请求就是一个route的集合。
route一般由三个部分组成:
- 动词: verb (get, post, put, delete, head, trace, connect, options)
- 路径: path (/hello, /users/:name)
- 返回: callback (request, response) -> { }
如果想要调用相关的request必须与route相匹配。
get("/", (request, response) -> {
// Show something
});
post("/", (request, response) -> {
// Create something
});
put("/", (request, response) -> {
// Update something
});
delete("/", (request, response) -> {
// Annihilate something
});
options("/", (request, response) -> {
// Appease something
});
Route的路径中(path)可以有通过params()和splat()调用的参数。
// matches "GET /hello/foo" and "GET /hello/bar"
// request.params(":name") is 'foo' or 'bar'
get("/hello/:name", (request, response) -> {
return "Hello: " + request.params(":name");
});
// matches "GET /say/hello/to/world"
// request.splat()[0] is 'hello' and request.splat()[1] 'world'
get("/say/*/to/*", (request, response) -> {
return "Number of splat parameters: " + request.splat().length;
});
路径组(Path groups)=> path()
适合不同类class的request
path("/api", () -> {
before("/*", (q, a) -> log.info("Received api call"));
path("/email", () -> {
post("/add", EmailApi.addEmail);
put("/change", EmailApi.changeEmail);
delete("/remove", EmailApi.deleteEmail);
});
path("/username", () -> {
post("/add", UserApi.addUsername);
put("/change", UserApi.changeUsername);
delete("/remove", UserApi.deleteUsername);
});
});
Halting 停止访问
在route 和 filter(之后会介绍) 里用于立即关闭requst
halt(); // 停止
halt(401); // 返回状态status并停止
halt("Body Message"); // 返回信息并停止
halt(401, "Go away!"); // 返回状态status,信息并停止
Filters 设置验证 过滤器
这里有三种filter
- before each request
- after each request
- after after-filters.
前者是在任何request之前要先进行验证,后者是在request之后进行验证。至于为啥要after我也不知道,如果有同学知道欢迎帮着科普一下。第三种是在第二种之后。
filter不是一定要有path的。
before((request, response) -> {
boolean authenticated;
// ... check if authenticated if (!authenticated)
{
halt(401, "You are not welcome here");
}
});
after((request, response) -> {
response.header("foo", "set by after filter");
});
afterAfter((request, response) -> {
response.header("foo", "set by afterAfter filter");
});
//有path的
before("/protected/*", (request, response) -> {
// ... check if authenticated halt(401, "Go Away!");
});