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-dataapplication/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
例子
特别感谢
Summer Project的更多相关文章
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- ASP.NET Core project.json imports 是什么意思?
示例代码: "frameworks": { "netcoreapp1.0.0": { "imports" : "portable- ...
- PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.
PhpStorm和WAMP配置调试参数 问题描述: Error. Interpreter is not specified or invalid. Press “Fix” to edit your p ...
- Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)
作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...
- CSharpGL(20)用unProject和Project实现鼠标拖拽图元
CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...
- Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事
前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...
- My First Android Application Project 第一个安卓应用
一.前言: 安卓(Android):是一种基于Linux的自由及开放源代码的操作系统,主要用在移动设备上,如手机.平板电脑.其他的设备也有使用安卓操作系统,比如:电视机,游戏机.数码相机等等. 二.具 ...
- ASP.NET Core中的project.json何去何从?
Shawn Wildermuth (https://wildermuth.com/2016/05/12/The-Future-of-project-json-in-ASP-NET-Core) If y ...
- 【原创】记一次Project插件开发
一.开发背景 最近在使用微软的Office Project 2010 进行项目管理,看到排的满满的计划任务,一个个地被执行完毕,还是很有成就感的.其实,不光是在工作中可以使用Project进行项目进度 ...
随机推荐
- Python Cookbook 数据结构和算法
1.查找最大或最小的N个元素 import heapq nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2] print(heapq.nlargest(3, n ...
- java控制多线程同时写一个文件
最近出现一个需求,大体要做的就是控制多线程同时操作一个文件.当时第一个反应是不要用synchronized,太low了,然后我就使用了读写锁ReentrantReadWriteLock,然后写完静下来 ...
- “放到桌面”的Servlet实现
复习下Servlet下载文件, 当response把ContentType设置成application/xxxx的时候呢,浏览器会默认启动下载,而不是试图打开. 通过给httpHeader里面加入内容 ...
- 圈水池 nyoj 78 凸包算法
圈水池 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水, ...
- j2ee之监听页面请求
本博客的起因是我想监听浏览器端每个页面都访问了哪些资源~~: 我是个菜鸡,所以我要记在我的小本本上,我怕忘了又~~~: 代码我是写在springboot2.1中的,有兴趣的同学可以玩一下~ 1:代码如 ...
- E - Coin Change UVA - 674 &&(一些记录路径的方法)
这一道题并不难,我们只需要将dp数组先清空,再给dp[0]=1,之后就按照完全背包的模板写 主要是我们要证明着一种方法不会出现把(1+3+4)(1+4+3)当作两种方法,这一点如果自己写过背包的那个表 ...
- UiAutomator2.0 - 获取同行控件
目录 问题:UI测试时,在同一个界面出现相同的属性的控件(如图),对于这种控件的获取很是无奈.如果直接通过控件id去查找的话总是会返回界面该类型的第一个控件. 解决: 1.UiObject2 中已经给 ...
- python socket.error: [Errno 24] Too many open files
以openwrt AR9331开发板为例,socket连接到1019个就报错 “python socket.error: [Errno 24] Too many open files” 1.查看开发板 ...
- ArrayList源码学习
1.ArrayList:基于数据实现,允许出现空值和重复元素,当ArrayList中添加的元素数量大于底层数组容量是,会通过扩容机制重新生成一个更大的数组.(非线程安全) 2.源码分析 构造函数 /* ...
- 从分布式一致性到共识机制(二)Raft算法
春秋五霸说开 春秋五霸,是指东周春秋时期相继称霸主的五个诸侯,“霸”,意为霸主,即是诸侯之领袖.典型的比如齐桓公,晋文公,春秋时期诸侯国的称霸,与今天要讨论的Raft算法很像. 一.更加直观的Raft ...