Summer Project
Summer Project
Summer是一个用于学习交流,基于Netty4.x的简单mvc库。
使用
- 快速开始
public class Application {
public static void main(String[] args) {
Summer.me()
.before("/example/*", (request, response) -> {
log.debug("path: {}", request.path());
// pass
return true;
})
.get("/example", (request, response) -> response.json(Result.of("summer *_*!!!")))
.get("/example/:id", (request, response) -> response.text(request.paths().get("id")))
.post("/example/:id", (request, response) -> response.text(request.paths().get("id")))
.put("/example/:id", (request, response) -> response.text(request.paths().get("id")))
.delete("/example/:id", (request, response) -> response.text(request.paths().get("id")))
.listen(9000)
.serve();
}
}
- 自定义
public class Application {
public static void main(String[] args) {
ExampleController controller = new ExampleController();
// 获取一个summer实例
Summer summer = Summer.me();
Router router = summer.router();
// 自定义notFound处理
router.notFound((request, response) -> response.text("404"));
// 自定义错误处理
router.failureHandler((request, response, t) -> response.text("500"));
// 注册路由
router.get("/example/text", controller::text);
router.get("/example/json", controller::json);
// http服务监听9000端口,并启动服务
summer.listen(9000).serve();
}
}
关于
Request
命名参数
显然,:name
就是一个命名参数,可以通过request.paths().get("name")
方法获取命名参数。
模式匹配: /user/:name
/user/zhangsan 匹配
/user/lisi 匹配
/user/wangwu/zhaoliu 不匹配
/user/ 不匹配
注意: :name
name 必须为字母[a-zA-Z], 否则视为精确匹配!
前置钩子
Ant风格:
?
匹配一个字符*
匹配一个或多个字符**
匹配一个或多个目录
请求体
request.body()
方法支持下列Content-Type
:
multipart/form-data
application/x-www-form-urlencoded
对于application/json
请求头, 使用request.json()
方法即可。
文件上传
request.files()
request.file(name)
拿到FileUpload
对象,操作文件。
Response
写响应
response.text(text)
response.json(json)
Content-Type
(text/plain
和application/json
)分别会被添加到响应头。
文件下载
使用下面的方法:
response.sendFile(file)
重定向
response.redirect(targetUrl)
将会设置http状态码为302
,并添加Location
到响应头。
静态资源
Summers.summer()
// 静态资源
.staticFile("/static", "/developer/Code/summer")
.listen(9000)
.serve();
例如,http://ip:9000/static/some.txt
将会被映射为本地文件路径/developer/Code/summer/some.txt