Grunt - 基于 node.js 构建工具之初体验

自动化构建工具真是缭乱纷呈,最早的 make, nmake, 到 Ant, NAnt, 进化到面向对象的 Maven, Gradle,由 Scala 而起的 SBT, SBuild,再就是今天要说的由 node.js 建立起的生态 Grunt。Grunt 可以做什么呢,理论上只要有相应的插件支持,它可以应对任何构建任务,但它更为有力的表现是在前端方面。

Grunt 是运行在 node.js 环境,由 npm 来安装,所以首先要安装 node.js, npm, 它们俩的安装不多说,我这里的版本分别是:

unmi@localhost ~> node --version
v0.10.24
unmi@localhost ~> npm --version
1.3.21

运行 Grunt 还要安装 grunt-cli, 使用命令 npm install -g grunt-cli,安装后我机器上 Grunt 的版本是 阅读全文 >>

类别: NodeJS. 标签: , , , . 阅读(974). 评论(0) »

Apache 配置 SSL(HTTPS) 并整合 Tomcat

我们在 Tomcat 中可以开启 SSL,用 HTTPS 来访问,见前一篇 快速启用 Tomcat 的 HTTPS 协议访问,不过更接近实际的应用是 Tomcat 只担当 Servlet 容器,HTTPS 协议部份,甚至是静态页面是交给 Apache 的处理,Apache 与 Tomcat 之间有一个通道。当然前端用 F5 那类负载均衡设备就另当别论了。

这里实践一下怎么开启 Apache 的 HTTPS,并与 Tomcat 进行整合的操作。平台是 Mac OS X, Apache2, Tomat8,其他平台或不同版本的应用软件配置类似。

第一步: 生成自签署证书

安全加密的东西都得证书,我们需要用到 openssl,没有就先安装它,命令是:

openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key

上面命令可以指定生成 server.crt 和 server.key 文件的目录,默认产生在当前目录下,假设这两个文件生成在 /etc/apache2 目录下。 阅读全文 >>

类别: Java/JEE, Linux/Unix, Mid-Ware. 标签: , , . 阅读(945). 评论(0) »

PlayFramework 1 输出所有 WS.url() 访问的 URL

记录下这个其实没有多大的意义,新入手 Play 框架的应该直接就是用版本 2 了,只因我们还要系统工作在 Play1 下,所以记下来,估计在 Play2 中已无借鉴作用了。

我们在 Play1 中访问外部 WebService 资源都是用 WS.url(url),然后调用它的 get(), post(), delete() 等相对应的 HTTP 请求方法。我们可以系统中所有通过 WS.url() 访问的 URL, 需找到切面,Play 是在哪里为访问的 URL 创建请求的。

看 WS 类的实现,它是一个 PlayPlugin 插件,其中定义了

private static WSImpl wsImpl = null;

来看 Play 是如何获得 WSImple 实现的,WS 插件的初始化方法中: 阅读全文 >>

类别: PlayFramework. 标签: . 阅读(2,258). 评论(0) »

快速启用 Tomcat 的 HTTPS 协议访问

有时候安全考虑会要开启 Tomcat 的 https 协议访问,最快速的配置,两步

1. 创建 keystore 文件

执行 JDK 带的命令

keytool -genkey -alias tomcat -keyalg RSA

按命令提示各个信息即可,最后在用户主目录下创建了一个 .keystore 文件

2. 配置 Tomcat 使用 keystore 文件

打开 server.xml 找到下面被注释的这段

阅读全文 >>

类别: Java/JEE. 标签: , . 阅读(450). 评论(0) »

JDK8 的 Lambda 表达式 -- 理解新式集合操作

有了前面的 SAM,Lambda 表达式,以及默认接口方法作铺垫后,我们可以去很好的去理解 Java8 用 Lambda  表达式操作集合的基本原理了。此篇我们想要化解的示例代码如下:

如果对其他支持闭包的语言,如 JavaScript, Groovy, Ruby, Scala 等有所了解的话,很容易看出前面的代码输出为

abc
cde 阅读全文 >>

类别: Java/JEE. 标签: , , . 阅读(437). 评论(0) »

JDK8 的 Lambda 表达式 -- 默认和静态接口方法

进入 Java8 之后我们会发现接口可以有方法实现了,这与我们一直看待 Java 接口的观念产生了冲突,不过也别急,接口中的方法实现必须是一个默认方法,即像

interface Shape {
    default boolean isShape() {
        return true;
    }
}

本文旨在探讨 Java8 的默认接口方法存在的合理性,Java8 在这点上如何保持与前面版本的兼容性。

Lambda 和方法引用使得 Java 语言更具表现力。说到 Lambda 和方法引用的关系,Lambda 表达式的目的就是让你更为便捷的去绕过对象直接引用方法。

接口应该是相对稳固的,我们应该有这样的经验,类中使用了接口中定义的常量,如果在接口中改变了该常量值,单纯的替换接口对应的 class 文件是不奏效的,因为编译类时其实是把接口中的常量直接固化在类中了。如果类中要体现出最新常量值,那么使用接口的类也要重新编译。即使在接口中添加或改变了方法定义,也不能强制使用到它的类重新编译,早先的类完全可以自由的运行,因为接口中定义的常量和方法的所有内容都在自身,类一旦编译后便可脱离所实现的接口而运转。 阅读全文 >>

类别: Java/JEE. 标签: , , . 阅读(1,950). 评论(0) »