http://www.nutzam.com/core/basic/maven.html/# 官方API手册
https://nutz.cn/yvr/list NutzCN论坛 基本的BUG都能找到
起码 Java 是一门优美的编程语言,经过10多年的发展,它几乎已经被应用到了任何地方,在高端的企业服务器上, 手持设备的芯片里,车载设备,智能家电甚至火星车上。在功能上,它广泛的涉足到了软件应用的各个领域,现在, 它开始向桌面和图像处理方面频频发力。 从历史上看它是一门成熟的语言,从现在来看,它是世界上使用最广泛的 语言,从将来看,它是最有前途的语言(现在它依然充满了活力和创新)。
但是,在越来越流行的 Web 开发领域, Java 似乎逐渐露出了疲态。是的,脚本语言们卷起了一场热潮,似乎已经 快可以用“革命”两个字来形容了。而Java,被“脚本小子们”诟病最多的便是 低下的开发效率。
但是,真的是这样的吗?
从本质上来说, Java 语言本身为程序员提供的帮助只有两点,一是语言的语法,二是内置的类库。 现在 从事 Web 开发,大多是采用第三方的类库(或者说是框架),比如流行的 SSH。 所谓 Java 在 Web 开发的低效,不妨这样说比较贴切一些: 采用第三方类库进行开发比较低效。
为了证明这一点,我写作了 Nutz, 它是一组轻便小型的框架的集合, 各个部分可以被独立使用。 而 Nutz 的目标 就是
在力所能及的情况下,最大限度的提高Web开发人员的生产力。
是的,提高生产力是这个框架唯一的目标。 就像 Java 设计之初,考虑最多的是程序员的易用性和运行时效率 的权衡, Nutz 也是这样。希望通过 Nutz, Java 的开发人员可以获得更快的开发速度,更少的代码量,并且这些 以不损害运行时效率为前提。
支持的环境
http://www.nutzam.com/core/mvc/overview.html
几句话的介绍
Nutz.Mvc 是要和一个 Web 服务器 (比如 Tomcat)一起工作的,它存在的意义就是要把一个标准的 HTTP 请求,转发到某一个 Java 函数中。
它的特点是:
每一种 HTTP 请求,标识就是一个 URL,而每一个 Java 函数怎样和一个 URL 关联呢? 最直接的办法就是在函数上声明一个 注解,这个注解,在 Nutz.Mvc 中,叫 @At
为了能让你更快速直观的了解 Nutz.Mvc 的工作方式,我提供下面两张图:
每一次请求,都经过如下流程
Nutz.Mvc 根据 @At 注解,将一个 HTTP 请求映射到了一个函数,函数只有一个参数,会被路径参数 (1045) 填充。
更详细的流程
声明了 @At 的函数被称为 入口函数
*
任何一个请求,都会经过四道工序
A - 过滤: 你通过 @Filters 注解可以为你的入口函数定义任意多的过滤器
1.
B
适配 这个过程将 HTTP 输入流转换成
入口函数
的参数数组
C
调用 调用
入口函数
,你在里面需要调用相关的业务层代码。
D
渲染 根据
入口函数
的返回,渲染 HTTP Response。
如果返回是个 View,则用这个 View 来渲染 null (null? 是的,你没看错,这种情况 View 接口第三个参数会是 null)
否则用函数的 @Ok 注解声明的 View 来渲染入口函数的返回对象
*
如果你的函数处理过程中抛出了异常,用 @Fail 注解声明的 View 来渲染异常对象
*
返回值会保存在request的attr中,名字是obj
这个就是和Mybaits , JPA , Hibernate 作用一样的持久层框架,用起来非常简单
http://www.nutzam.com/core/dao/hello.html
Ioc 的概念
Nutz.Ioc 从概念上是很简单:将一部分关于对象的依赖关系单独存储在某种介质里,并且 提供一个接口帮助使用者获得这些对象。
但是将依赖关系存储在什么地方呢? Spring 选的是 XML, Guice 选的 Java (硬编码)
Nutz.Ioc 核心逻辑并没有限定配置信息的存储方式,但它还是提供了一个默认的配置文件 编写方式 – JSON。因为
当然,你可以扩展它,提供自己的配置文件加载方式, Nutz.Ioc 不反对你这样,它甚至 有点鼓励你这样,虽然 JSON 方式的配置文件书写方式已经工作的很好了。
http://www.nutzam.com/core/dao/hello.html
想必玩过Spring的 都对Aop不陌生吧简单来描述就是将你要干的事情切入到指定方法前或者后进行运行
重要提醒:
http://www.nutzam.com/core/dao/hello.html
什么是JSON?
JSON的官方定义 : 一种轻量级的数据交换格式
基本形式如下(严格的JSON格式并不允许注释,但Nutz.Json支持Java风格的注释)
{
/** 块注释 */
name : "wendal", // 行末注释
email: "wendal1985@gmail.com", // 名值对, 即Map类型的Key-Value
tags : ["java", "python", "linux"], // 数组, 即List或Array
pets : [ //数组元素可以是对象,数组,普通值
{
name : "dongdong",
type : "dog",
age : 10
},
{
name : "fengfeng",
type : "unkown",
age : -1,
food : "dog"
}
]
}
Nutz对Json的理解
Nutz把Json结构理解为Map-List, 即Map类型及List类型的嵌套
在Nutz中对Json的操作大多数情况下仅一行语句搞定.
http://www.nutzam.com/core/dao/hello.html
http://www.nutzam.com/core/dao/hello.html
为什么需要 EL 表达式引擎
你,对,就是你,正在看这篇文章的人,我虽然不认识你,但是 我可以负责任的说, 如果你看到这个标题就心里在悄悄的呼喊: “靠,他们连这个都有!我省事了,哇哈哈哈和”。 那么,你绝对属于百分之一的特例。 就是说,绝大多数人的绝大多数项目,是不需要 一个嵌入式的表达式引擎的。因此,提供这个功能的目的就是:
满足一小撮人的一小撮要求
但是,"一小撮人"的"一小撮要求"有很多,作为一个小众类库,为什么单单打算支持这个特性呢? 下面是我的理由:
这个功能是其它模块功能的基础,我们需要它
可能因此吸引其他的开发者对 Nutz 的兴趣
需要嵌入式表达式引擎的人是 Java 开发者的少数人,但是这些人也应该比 Nutz 的用户要多
这些人基本上编程水平要强一些
其他的提交者对增加这个特性没有特别强烈的反对
为什么需要 Mapl 结构
一直以来都没有刻意的去思考说需要 Mapl 结构这样的东西. 所谓 Mapl 结构就是 Map-List 结构,我原来就叫 maplist 后来被灰太郎说太长,就改成 “mapl” 了
最初都是 wendal 在重写JSON的时候, 将JSON理解成了Mapl结构. 然后突然在某一天发现, 咦, Mapl对象还可以这么用, 那么用, 慢慢的, 以Mapl 基础的小功能点越来越多, 已经不能够完全的与JSON概念协调, 所以才有了这样一个中间结构.
恩, 上面那段是给灰太狼, wendal看的. 我想你肯定看得头有点大, 要不我再说直白点, Mapl结构 就是为Json服务的, 为什么呢? MD, Json.fromJson()忒难用了, 要是只给它一个Reader, 而不给Type, 那它给我返回的就是 Mapl结构 , 苍天呀, 大地呀, 烦都烦死了.
我要取其中的某个值, 我得遍历N层的Map, List, 每次写这种东西的时候, 我都想哭, 所以干脆对它封装吧, 越封越多, 然后就有了这玩意…
当然, 它也与EL一样满足一小撮人的一小撮要求
提醒: Mapl这个名词,是MapList的缩写
什么是 Mapl 结构?
一种以 Map, List 接口对象所组织起来的结构体系. 类似于JSON结构便于JAVA在内存中处理的结构. 主要提供键值对, 与列表的有机组合, 因这种结构只由Map, List组成, 因些称其为Mapl结构.
Map a = new HashMap();
a.put("name","a");
Map b = new HashMap();
b.put("name","b");
Map c = new HashMap();
c.put("name","c");
List list = new ArrayList();
list.add(a);
list.add(b);
list.add(c);
Map d = new HashMap();
d.put("items", list);
通过上面的代码我们就组织了一个Mapl结构, 它等效于以下的JSON文档:
{"items":[{"name":"a"},{"name":"b"},{"name":"c"}]}
当然, Mapl.仅可以用来表示JSON, 也可以用来表示JAVA对象的结构, 然后有了Mapl., 你会发现, 做转换, 合并, 都是非常轻松滴~~~
具体规则:
http://www.nutzam.com/core/dao/hello.html
什么是函数糖?
Java 的语法比 C/C++ 友好很多, 因为它设计之初,就是为了考虑到程序员的使用是否舒适。 当然很多事情愿望是美好的,现实是残酷的。Java 语言本身的语法仍然不可避免的带有着 10年前那种 的僵硬和严谨。这里是一些小小的尝试,你会发现,大多数情况,通过一些静态函数,一行代码完全 可以做很多事情, 而且比“甜甜”的 Ruby 也差不了太多。
你可以查看 org.nutz.langGit@OSC镜像 下 的源代码。为了便于你学习,我将里面部分最常用的用法列在文档里,便于快速学习查看。
我希望在 80% 以上的情况下,这些函数能让你有效的缩短你代码的体积,并且增加代码的可读性。
http://www.nutzam.com/core/dao/hello.html
类型强好,还是类型弱好?
强类型好,尤其是对编译器友好。而且 IDE 支持的比较好。 弱类型好,因为程序员写程序的时候,不需要考虑类型,只需 要考虑逻辑。
其实,即使是 Javascript,这样的弱类型语言,也不能很好的将类型互相转换的很好。
我希望在我编程的时候,大多数时间都强类型。我感觉很安全,但是当我想模糊类型的时候,我能有一个工具,帮我把任何 类型转成我希望的另外的类型。当然,我自己定义的对象,我并不介意写一个转换过程,但是请只让我写一次。
所以,这就是 Nutz.Castors
http://www.nutzam.com/core/dao/hello.html
反射的意义
Java 是静态语言。但是 JVM 却不那么静态。静态语言的好处是,IDE 可以提供很高级的重构功能。缺点是你的代码 会比较僵化,像 Javascript 一样的动态语言(或者说,后绑定语言),在编写程序时的随心所欲,估计 Java 程序员 是享受不到了。 但是好在 Java 还提供了“反射”。
在任何时候,你如果想在运行时决定采用哪个实现类,或者调用哪个方法,通过反射都可以实现,虽然不那么方便 (你需要捕捉很多无聊的异常),虽然不那么快。
既然这样,那么能不能让反射工作的更好一些呢? org.nutz.langGit@OSC镜像 包提供了 Mirror<T>
类,通过它,你可以更方便的使用反射的特性
http://www.nutzam.com/core/lang/segment.html
什么是代码模板
通过 Java 提供的 String.format() 方法,可以很方便的声明字符串模板,以及占位符。 但是,它不方便的是,如果我的字符串模板两个占位符希望的是同一个值:
什么是文件池
如果大家写一些稍微复杂的应用,可能或多或少的会使用一下临时文件。或者 希望能有一个目录,保存用户上传的文件。你的用法可能有下面两种:
对于网络应用,处理用户上传的文件,有一种比较常用的做法是:
而 Nutz 的文件池,就是为上述这些场景设计的。
http://www.nutzam.com/core/img/overview.html 基础用法
更高级的方法 添加水印 验证码 抠图 …
的是,如果我的字符串模板两个占位符希望的是同一个值:
什么是文件池
如果大家写一些稍微复杂的应用,可能或多或少的会使用一下临时文件。或者 希望能有一个目录,保存用户上传的文件。你的用法可能有下面两种:
对于网络应用,处理用户上传的文件,有一种比较常用的做法是:
而 Nutz 的文件池,就是为上述这些场景设计的。
http://www.nutzam.com/core/img/overview.html 基础用法
更高级的方法 添加水印 验证码 抠图 …
http://www.nutzam.com/core/img/advanced.html
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/120248521
内容来源于网络,如有侵权,请联系作者删除!