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/plainapplication/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的更多相关文章

  1. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  2. 记一个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 ...

  3. ASP.NET Core project.json imports 是什么意思?

    示例代码: "frameworks": { "netcoreapp1.0.0": { "imports" : "portable- ...

  4. 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 ...

  5. Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)

    作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...

  6. CSharpGL(20)用unProject和Project实现鼠标拖拽图元

    CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...

  7. Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事

    前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...

  8. My First Android Application Project 第一个安卓应用

    一.前言: 安卓(Android):是一种基于Linux的自由及开放源代码的操作系统,主要用在移动设备上,如手机.平板电脑.其他的设备也有使用安卓操作系统,比如:电视机,游戏机.数码相机等等. 二.具 ...

  9. ASP.NET Core中的project.json何去何从?

    Shawn Wildermuth (https://wildermuth.com/2016/05/12/The-Future-of-project-json-in-ASP-NET-Core) If y ...

  10. 【原创】记一次Project插件开发

    一.开发背景 最近在使用微软的Office Project 2010 进行项目管理,看到排的满满的计划任务,一个个地被执行完毕,还是很有成就感的.其实,不光是在工作中可以使用Project进行项目进度 ...

随机推荐

  1. 数据库运维平台~Yearning测试与总结

    一 部署   1 docker-compose up -d 即可非常方便   2 mysql安装   3 inception安装二 默认账号   默认用户admin 密码: Yearning_admi ...

  2. C# - 设计模式 - 模板模式

    模板模式 问题场景 咖啡和茶派生于抽象类饮料,咖啡和茶都具有烧水的方法,所以可以将烧水的方法提取到抽象类饮料中去实现,而咖啡具有一个向杯子加咖啡粉的方法,茶具有一个向杯子加茶叶的方法,看起来两个方法是 ...

  3. 【转】web.xml中的contextConfigLocation在spring中的作用

    一.spring中如何使用多个xml配置文件 1.在web.xml中定义contextConfigLocation参数,Spring会使用这个参数去加载所有逗号分隔的xml文件,如果没有这个参数,sp ...

  4. python学习第34天

    # 互斥锁# 进程之间的数据共享 # 关于数据安全的问题# 进程池(自己了解,后面线程部分还会讲) # from multiprocessing import Pool# 线程的概念 (面试的重点)# ...

  5. SpringBoot相关错误

    1.org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V 搭建spr ...

  6. js圆形头像实现

    定义CSS <style> .to{width:100px;height:100px;border-radius:100px} </style> 这样就实现了 主要是borde ...

  7. centos6.6 minimal cannot found a valid baseurl for repo :base

    网上找了很久,说什么NDS1=8.8.8.8,DNS2=4.2.2.2 也有说改ifcfg-eth0文件的 总之我都改了,但都没用 现在我把我修改的流程发上来 1.https://blog.csdn. ...

  8. bzoj 3261

    题目描述:这里 可持久化字典树裸题,可以作为模板使用 首先介绍一下可持久化字典树 可持久化字典树,顾名思义,就是一种可持久化的数据结构,常用于处理异或问题 我们看一下题目,发现要求一个最大异或和,但是 ...

  9. status 返回当前请求的http状态码

    status属性返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取.完整的HTTP状态码如下: 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分 101 ...

  10. Sentry部署

    前期准备 [root@Aaron ~]# uname -r 3.10.0-327.el7.x86_64 [root@Aaron ~]# uname -a Linux Aaron 3.10.0-327. ...