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进行项目进度 ...
随机推荐
- java abs(绝对值) , max(最大值),min(最小值) 方法的应用
在写程序是,我们常常会计算一个数的绝对值,这时我们可以使用java里的方法来计算 public class Demo1{ public static void main(String [] args) ...
- 剑指Offer编程题3——从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 题目解析 方法1:建立两个vector,第一个用来存储正向访问的数据,第二个用来反向存储. /** * struct L ...
- LeetCode第二十四题-交换链表中节点值
Swap Nodes in Pairs 问题简介:给定链表,交换每两个相邻节点并返回链表. 举例: 输入:1->2->3->4 输出:2->1->4->3 链表结构 ...
- CF1153D Serval and Rooted Tree
题目地址:CF1153D Serval and Rooted Tree 挺好玩儿也挺考思维的一道题 思路:树形DP+贪心 数组 \(d\) 维护这样一个值: 对于一个节点 \(x\) ,它的值最大可以 ...
- 2018-2019-2 20165325 网络对抗技术 Exp4 恶意代码分析
2018-2019-2 20165325 网络对抗技术 Exp4 恶意代码分析 实验内容(概要) 一.系统(联网)运行监控 1. 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,逐步排查并且 ...
- referrer policy
我们知道,在页面引入图片.JS 等资源,或者从一个页面跳到另一个页面,都会产生新的 HTTP 请求,浏览器一般都会给这些请求头加上表示来源的 Referrer 字段.Referrer 在分析用户来源时 ...
- 使用freemarker模板引擎生成word文档的开发步骤
1.准备模板文档,如果word文档中有表格,只保留表头和第一行数据:2.定义变量,将word文档中的变量用${var_name}替换:3.生成xml文件,将替换变量符后的word文档另存为xml文件: ...
- Python爬虫基础之lxml
一.Python lxml的基本应用 <html> <head> <title> The Dormouse's story </title> </ ...
- pptpd免radius限速、限连接+自由定制功能脚本
因为就几个用户懒得上radius,所以手写了一个用户管理脚本. 脚本很简单,具体直接看repo吧. https://github.com/esxgx/pptpd-exscripts
- PDF中的空白页面怎么删除,PDF页面删除技巧
在Word中想要删除其中一页文档的怎么办?直接打开就可以删除了,那么我们如何删除PDF其中几页呢?下面小编就来告诉大家PDF删除页面跟空白页面的方法.想要删除PDF文档中的页面,可以使用PDF编辑器, ...