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());// passreturn 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

例子

这里

特别感谢

  • netty
  • spring-framework
  • blade
  • shiro
  • motan

转载于:https://www.cnblogs.com/bener/p/9174727.html

Summer Project相关推荐

  1. ideal如何创建dynamic web project

    步骤如下 ① file -> new -> project ② 选择 Java Enterprise -> next ③ create project from template - ...

  2. This version of Android Studio cannot open this project, please retry with Android Studio 3.5 or new

    今天github 下载一个库 导入 as 提示 This version of Android Studio cannot open this project, please retry with A ...

  3. Error:The SDK Build Tools revision (23.0.3) is too low for project ':app'. Minimum required is 25.0.

    导入github上项目的时候出现 Error:The SDK Build Tools revision (23.0.3) is too low for project ':app'. Minimum ...

  4. Error:(49, 1) A problem occurred evaluating project ':guideview'. Could not read script 'https://r

    出现问题如下: Error:(49, 1) A problem occurred evaluating project ':guideview'. > Could not read script ...

  5. IntelliJ IDEA 的Project structure说明

    IntelliJ IDEA 的Project structure可以在File->Project structure中打开,同时,在新建项目是IDE一般用向导的方式让你填写Project str ...

  6. 将Project的内容导出成单独的XPO文件

    AX跟VSS整合的版本管理可以通过创建知识库将当前层的代码全部签入到VSS中,但是如果不是一个团队开发solution,而是针对客户的需求随时做得一些小改动,一般都希望以Project的形式组织代码和 ...

  7. linux vim project,vim插件project的用法

    用任何编辑器写代码,文件管理的方便与否对编码效率影响很大.一般的IDE都有文件管理功能,并且用来的不错.在vim中,要实现较好的文件管理功能一般都靠插件.在有米实习的第一个月,自己一直用NERDTre ...

  8. android studio 同类,让Android Studio的Project视图和Anroid视图类似

    关于AS的Project与Android视图的不同,可以看我的博文 http://blog.csdn.net/siyehuazhilian/article/details/42123563 Andro ...

  9. invalid project description._[Project教程] 在Project软件中如何处理加班工时

    在微软Project软件中有处理加班工时的功能,但是我在系统课程中没有讲,为什么呢?就像Project软件中的[进度线]功能,这个功能还不够完善,所以暂时不建议大家使用.加班工时这个问题也是如此,总体 ...

  10. There's no Qt version assigned to this project for platform Win32/Win64

    Qt5.8+ vs2010和vs2015都出现这个问题,无论是32bit还是64bit平台 解决方法: 1:注意:打开main.cpp文件,否则 "Qt Project Settings&q ...

最新文章

  1. (0009) iOS 开发之友盟统计分析SDK已全面支持HTTPS的更新
  2. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
  3. 【转自元宝兄】关于delphi Com+调用C# DLL的一点说明
  4. 【Android FFMPEG 开发】FFMPEG 获取 AVStream 音视频流 ( AVFormatContext 结构体 | 获取音视频流信息 | 获取音视频流个数 | 获取音视频流 )
  5. [Java基础]Map集合的遍历
  6. 一段Big5繁体转换简体GB2312的程序
  7. mysql query sql_sql:query 标签
  8. C++总结笔记(五)——构造函数和析构函数
  9. 虚幻4毛发系统_虚幻引擎复活!苹果与Epic对决,有哪些游戏险些中枪?
  10. vue createApp(),mount(),生命周期钩子函数执行顺序
  11. ffmpeg转码测试命令
  12. 微信注册验证成功之后不跳转_想申请小号的网友福利来了:绑定了微信的手机号怎么注册新的微信...
  13. LCD 触摸屏调试记录
  14. Python-PyGame 坦克大战小游戏
  15. windows系统清除电脑地址栏文件(夹)路径
  16. android textview 淡入淡出,TextView淡入淡出效果
  17. 关于“档案大数据”的非主流看法
  18. 兼容QQ浏览器,UC浏览器滚动到底部
  19. 原生JS使用input上传图片
  20. Qt之Switch菜单

热门文章

  1. 代码对比工具:我最喜欢用的还是这几个
  2. 普通程序员如何走出困境?
  3. 【电脑技巧】win10怎么查看电池的损耗情况
  4. 杜比介绍 杜比数位 Dolby
  5. 教程┊解决使用USB键盘进行游戏后按任意键出现蓝屏的错误
  6. 高通平台android 8.1基线某款usb camera打开dev/video1出错
  7. 2023年基建工程(设计规划施工)经验分享,超多干货
  8. JasperReport
  9. 从字节中取出1bit数据
  10. SDIO - 1bit / 4bit V2.0 协议深度解析-简单易懂协议详解