Nutz中那些好用的工具类
Nutz 是国产的精品开源框架,它全无依赖,只以1兆多的身材,就可以实现SSH全部功能的90%以上。内容主要涵盖了:Ioc、Aop、MVC、Dao、Json等WEB开发的方方面面。
它不仅轻巧,而且稳定高效。在大并发下,性能完全可以与spring mvc比肩。我的很多线上项目都已经开始用它,表现很不错哦。
另外,框架的主要开发者学过UE(User Experience),框架中大量应用着设计模式和巧妙的设计,每个可能的地方都预埋了扩展点,开发人员在框架的使用上会非常的舒服。 谁说国产框架没有精品啦?!推荐大家赶快脱离SSH的魔爪,投入Nutz的怀抱吧。
Nutz除了基本的功能以外,其实还提供了很多非常实用的工具类。这些类虽然没有在官方的文档中体现,但却可以大幅度的减少你的代码行数哦。今天我就给大家来介绍一下:
一、Http 类
Java应用常常有这样的需求,抓取一个网页的内容,模拟浏览器对某个链接发起GET或PUT请求。
怎么办?
当然可以引用Apache HttpClient库,HttpClient对这些需求做了很好的封装。
但问题是,我们需要的只是一个很简单的功能,需要引入笨重的HttpClient吗?而且HttpClient为的解决各种各样的问题,做了很复杂的封装,非常难用呐。
如果你用Nutz那这个问题就很简单了。抓网页内容只需这样:
Response resp = Http.get("http://www.baidu.com");
if (resp.isOK()) {
System.out.println(resp.getContent());
}
发起API调用只需:
Map<String, Object> params = new HashMap<String, Object>();
params.put("name", "root");
params.put("pwd", "123456");
int timeout = 60 * 1000; // 单位毫秒
String apiRet = Http.post("http://api.xxx.com/login", params, timeout);
System.out.println(apiRet);
简单吧!其实Nutz的http包可实现的功能不只这些,另如以下功能也可以手到擒来:
- 使用代理
- 定制http Header、Cookie
- 文件上传
- 设置请求超时时间
更多内容可自行探索 org.nutz.http 包。
二、Tasks 类
很多时候我们都需要定时任务的帮助。例如定时更新数据库,定时刷新缓存,当发生错误后延时重试……
怎么办?
当然可以引用quartz,建一个job,创建一个SchedulerFactory,再绑定Trigger? 太麻烦了,我们只是想要一个简单的定时任务而已。
其实这样的需求有了Nutz后就很简单了,
实现一个Runnable的任务类,然后通过Tasks设置定时调用的间隔时间就行了,如:
Tasks.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("task runing...");
}
}, 10);
Lang.quiteSleep(60 * 1000);
怎么样,简单吧?其实它还能做更多:
- 在指定的延时之后开始以固定的频率来运行任务
- 在指定的时间点开始以固定的频率运行任务
- 两次任务间保持固定的时间间隔
- 返回Future做更高级的任务控制
- 返回定时任务线程池,可做更高级的应用
更多内容可自行探索 org.nutz.lang.Tasks 类,所有方法都有详细注释哦。
三、Conf 加载
每个应用都会有各种配置项,我们需要在程序启动的时候加载这些配置项进行各种操作。
Nutz对配置项做了很好的封装,现在你读取配置文件就很easy啦。
PropertiesProxy property = new PropertiesProxy(“/conf/", “/db.properties”));
String redisIp = property.get("redis.ip");
Int redisPort = property.getInt("redis.port");
注:PropertiesProxy 支持目录扫描哦,目录中的所有 *.properties 配置项全都能读到。
如果你的配置文件是 json 格式的也没关系,可以试试 NutConf 类。
NutConf.load("/conf/");
System.out.println(NutConf.get("serverName"));
注:NutConf 也支持目录扫描,会加载目录中的 *.js 文件。
四、Sockets
如果你想写一个简单的SocketServer服务器,简单的接收用户发来的某些指令进行各种操作,那你选择Nutz就对了,它对这种简单的SocketServer做了很好的封装,你只需写几行代码就搞定了。
Sockets.localListenOneAndStop(9099, "reload", new SocketAction(){
@Override
public void run(SocketContext context) {
System.out.println("重新加载配置文件");
context.writeLine("success");
}
});
简单吧,现在你只需 telnet 172.0.0.1 9090 然后输入 reload,就能重新加载项目中的配置文件了。而且原生的,它支持客户端输入 "close|stop|bye|exit" 来结束服务端的本地监听。
上边只是演示了添加一个动作(SocketAction),其实可以向它放入多个SocketAction来实现各种命令操作。另高级的,服务器端还能支持接收json串,实现更多的参数传入。
更多内容可自行探索 org.nutz.lang.socket 包。
五、NutMap
我们知道,HashMap、HashTable、TreeMap等数据结构可以存放各种类型数据,但如存放的是非泛型数据的话,就需要进行各种类型转换。
但如果你用 NutMap 就没有这种烦恼了,其内置了常见类型的自动转换,相信很多人会用的很爽。
NutMap map = new NutMap();
map.put("name", "bushi");
map.put("age", 63);
map.put("sex", true);
map.put("time", new Date());
System.out.println(map.getString("name"));
System.out.println(map.getInt("age"));
System.out.println(map.getBoolean("sex"));
System.out.println(map.getTime("time"));
六、代码统计
你可能不知道吧,Nutz中还隐藏了一个代码统计工具。它可以对程序源码进行详细的统计,可以准确的分析出程序中代码行、注释行、空白行和导入行为多少等等。
项目快结束了,统计下项目中代码行数,可以满足下自己的虚荣心,同时也好向老板交差。
使用方法非常简单:
File file = new File("E:/qinerg_github/nutz/src/");
CodeStatisticsResult statisticsResult = Code.countingCode(file, "java", true, null);
System.out.println("源码数:" + statisticsResult.getFileCount());
System.out.println("总行数:" + statisticsResult.getTotalLines());
System.out.println("代码行:" + statisticsResult.getNormalLines());
System.out.println("注释行:" + statisticsResult.getCommentLines());
System.out.println("导入行:" + statisticsResult.getImportLines());
System.out.println("空白行:" + statisticsResult.getWhiteLines());
这是我checkout时nutz源码统计结果:
- 源码数:835
- 总行数:74957
- 代码行:39355
- 注释行:20899
- 导入行:5228
- 空白行:9475
代码行近4万,而注释行就有2万多,怎么样,从另一个方面说明nutz的注释率是非常高的,而且是全中文哦。推荐大家读下源码,可以学到很多东东的。
Nutz中那些好用的工具类的更多相关文章
- Java中的4个并发工具类 CountDownLatch CyclicBarrier Semaphore Exchanger
在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 ...
- Java中的AES加解密工具类:AESUtils
本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...
- 【深度精讲】JFinal中的Ret和Kv工具类的区别,你用对了吗?
在JFinal中有两个类Map的工具类,一个是有状态的Ret,一个是无状态的Kv,各种自己的应用场景,你用对了吗? 下面我们从多个方面来探究一下,JFinal针对这两个类的设计: 一.位置-com.j ...
- java中redis的分布式锁工具类
使用方式 try { if(PublicLock.getLock(lockKey)){ //这里写代码逻辑,执行完后需要释放锁 PublicLock.freeLock(lockKey); } } ca ...
- java高并发系列 - 第16天:JUC中等待多线程完成的工具类CountDownLatch,必备技能
这是java高并发系列第16篇文章. 本篇内容 介绍CountDownLatch及使用场景 提供几个示例介绍CountDownLatch的使用 手写一个并行处理任务的工具类 假如有这样一个需求,当我们 ...
- java.util.concurrent中的几种同步工具类
java.util.concurrent并发包中提供了一系列的的同步工具类,这些基础类不管是否能在项目中使用到,了解一下使用方法和原理对java程序员来说都是有必要的.博主在看<java并发编程 ...
- C#中SQLite的使用及工具类
目录 SQLite简介 存储类 亲和类型 引用System.Data.SQLite.dll 软件包分类 使用本机库预加载 常用部署包 工具类 参考资料 SQLite简介 SQLite是一款轻型的数据库 ...
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
//------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...
- Spring中内置的一些工具类
学习Java的人,或者开发很多项目,都需要使用到Spring 这个框架,这个框架对于java程序员来说.学好spring 就不怕找不到工作.我们时常会写一些工具类,但是有些时候 我们不清楚,我们些的工 ...
随机推荐
- LeetCode - Triangle
题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...
- Android 获取可靠的手机编码
项目中出现了将设备和用户信息进行绑定的需求.最先想到的是IMEI串码和IMSI串码.手机登陆的时候一直都没有问题.换了一个平板中之后IMEI和IMSI串码都获取不到了.后来查了一下原因,是因为平板上是 ...
- C# 代码编程规范
1. 类一定要有注释 2. C#代码要用#region包起来,#region之间要留一个且只留一个空行 3. 含义复杂不容易看懂的参数要写注释 4. 方 ...
- 替换html元素
html: <div id='divContainer'> <div id='divBeReplaced'>被替换的元素</div> </div> 1. ...
- Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解
最近一直在整合WebAPI.Winform界面.手机短信.微信公众号.企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索.攻克更多的技术问题,并抽空写写博客,把相 ...
- Nancy 学习-身份认证(Basic Authentication) 继续跨平台
开源 示例代码:https://github.com/linezero/NancyDemo 前面讲解Nancy的进阶部分,现在来学习Nancy 的身份认证. 本篇主要讲解Basic Authentic ...
- Asp.Net WebForm和MVC同样优秀!
不是说MVC不好,而是WebForm并没有那么不堪,和Mvc同样优秀.对说WebForm缺点多的,表示不服,求指教,虽然本人有些见解可能比较浅薄. 看过很多文章和书籍,都会拿MVC模式和WebForm ...
- 15天玩转redis —— 第七篇 同事的一次缓存操作引起对慢查询的认识
上个星期同事做一个业务模块,需要将一个80M的数据存入到redis缓存中,想法总是好的,真操作的时候遇到了HSet超时,我们使用的是C#的 StackExchange.Redis驱动. <red ...
- Tigase数据库结构(1)
Tigase数据库有很多张表,其中最主要的是3张表:tig_users,tig_nodes和tig_pairs. 1.tig_users tig_users存储用户信息,有uid(主键,用户ID),u ...
- sql传入组合字符串批量操作
批量操作时我们可以传入一个有规律的ID或则是其他唯一值字段的组合字符串,然后:select/update/inset......where 字段 in(传入的组合字符串),而且很多时候我们还涉及到其 ...