Content Table

Java 使用 FTP

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 服务的 REST 框架 Spark Framework

需要点击网页上的一个按钮打开本机上的文件或者修改本地的配置文件,由于安全的限制浏览器不能直接访问本地文件系统。为了实现这个功能,可以本地启动一个 Web 服务,浏览器访问这个 Web 服务(localhost),然后使用 Web 服务中的代码来访问本地文件系统。为了启动一个 Web 服务,一般我们会选择 Tomcat,Jetty,Websphere 等作为 Web 服务器响应 HTTP 请求,对于我们这么小的一个需求,就有些重量级了,如果能像打开一个普通程序一样打开程序就能启动 Web 服务就好了。

jQuery 404 时调用的方法

jQuery 的 ajax 能给不同的响应状态码指定回调函数,例如当连不上服务器(服务器没启动,网络有问题等)时调用 statusCode0 的方法,连上了服务器,但是找不到要访问的 URL 则调用 statusCode404 的方法。

MySQL 中 datetime 和 timestamp 的区别

最佳实践:每个表都应该有一列使用 timestamp 用于自动记录更新时间,这一列不需要在 Java 类中出现,如果需要记录创建时间,则使用 datetime

MySQL 把 timestamp 值从当前的时区转换到 UTC 再存储,获取时再从 UTC 转回当前的时区,而 datetime 存储和显示都是一样的,不能区分时区,就像一个静态的字符串一样。

MySQL 时间和 Java 的时间类对应关系:

  • datetime: LocalDateTime
  • timestamp: Instant

Future

Future 的作用

  • 作为 ExecutorService.submit(Callable|Runnable) 的返回结果
  • 得到了 Future,说明其相关的任务已经提交给线程池去执行了
  • 获取任务的结果(阻塞): Future.get()
  • 取消任务: Future.cancel()
  • 查看任务是否完成: Future.isDone()

如果线程池执行的任务没有返回结果,直接用 Runnable 就好了,不需要用 Callable (代码里加上无意义的返回语句有点奇怪),Callable 更多是任务执行后有结果返回。

jQuery ui 拖拽

jQuery ui 提供了拖拽元素,拖拽排序等功能,例如要让一个元素能够被拖拽,只要给它执行 draggable() 函数即可,要实现 ul li 拖拽排序,只要在 ul 上执行函数 sortable() 就能实现了,具体更多的例子请参考 jQuery UI 实例 - 拖动

Spring 异步调用

Spring 中让一个方法在新线程中运行,只需要给方法加上 @Async 注解就可以(当然也可以自己直接创建一个线程实现异步执行)。

典型的使用如用户注册后需要发送一封邮件进行验证,邮件发送完成的时间取决于很多因素,例如网络快的时候发的快一些,慢的时候需要多一些的时间。如果使用同步的方式发送邮件,有可能需要等很久邮件才发送完成然后用户才能得到注册成功的响应,体验不是很好,如果使用异步的方式发送邮件,在发邮件的同时用户就被告知注册成功,请去收件箱中查看邮件进行注册验证(异步的方式还可以使用 MQ)。