使用 Spring core 的 DigestUtils
计算文件的 MD5。
大圣,此去欲何?踏南天,碎凌霄。若一去不回…… 便一去不回!
Java 使用 FTP 等用 Apache Commons Net
就可以了:
Apache Commons Net™ library implements the client side of many basic Internet protocols. The purpose of the library is to provide fundamental protocol access, not higher-level abstractions. Therefore, some of the design violates object-oriented design principles. Our philosophy is to make the global functionality of a protocol accessible (e.g., TFTP send file and receive file) when possible, but also provide access to the fundamental protocols where applicable so that the programmer may construct his own custom implementations (e.g, the TFTP packet classes and the TFTP packet send and receive methods are exposed).
需要点击网页上的一个按钮打开本机上的文件或者修改本地的配置文件,由于安全的限制浏览器不能直接访问本地文件系统。为了实现这个功能,可以本地启动一个 Web 服务,浏览器访问这个 Web 服务(localhost),然后使用 Web 服务中的代码来访问本地文件系统。为了启动一个 Web 服务,一般我们会选择 Tomcat,Jetty,Websphere 等作为 Web 服务器响应 HTTP 请求,对于我们这么小的一个需求,就有些重量级了,如果能像打开一个普通程序一样打开程序就能启动 Web 服务就好了。
jQuery 的 ajax
能给不同的响应状态码指定回调函数,例如当连不上服务器(服务器没启动,网络有问题等)时调用 statusCode
中 0
的方法,连上了服务器,但是找不到要访问的 URL 则调用 statusCode
中 404
的方法。
最佳实践:每个表都应该有一列使用 timestamp
用于自动记录更新时间,这一列不需要在 Java 类中出现,如果需要记录创建时间,则使用 datetime
。
MySQL 把 timestamp 值从当前的时区转换到 UTC 再存储,获取时再从 UTC 转回当前的时区,而 datetime 存储和显示都是一样的,不能区分时区,就像一个静态的字符串一样。
MySQL 时间和 Java 的时间类对应关系:
jQuery ui
提供了拖拽元素,拖拽排序等功能,例如要让一个元素能够被拖拽,只要给它执行 draggable()
函数即可,要实现 ul li
拖拽排序,只要在 ul 上执行函数 sortable()
就能实现了,具体更多的例子请参考 jQuery UI 实例 - 拖动
string-format.js
'http://www.xtuer.com/article/{id}'.format({id: 123})
'http://www.xtuer.com/article/{0}'.format(123)
在 Spring 上传文件 介绍了在 SpringMVC 中怎么上传文件,这里将介绍 SpringMVC + Ajax + 拖拽进行文件的上传,使用的是 jQuery 的文件上传插件 jQuery File Upload
,其主页为 http://plugins.jquery.com/blueimp-file-upload/
Spring 中让一个方法在新线程中运行,只需要给方法加上 @Async
注解就可以(当然也可以自己直接创建一个线程实现异步执行)。
典型的使用如用户注册后需要发送一封邮件进行验证,邮件发送完成的时间取决于很多因素,例如网络快的时候发的快一些,慢的时候需要多一些的时间。如果使用同步的方式发送邮件,有可能需要等很久邮件才发送完成然后用户才能得到注册成功的响应,体验不是很好,如果使用异步的方式发送邮件,在发邮件的同时用户就被告知注册成功,请去收件箱中查看邮件进行注册验证(异步的方式还可以使用 MQ)。