JDK 7 中的语法增强 -- (3) swith 里用 String 类型

java 在 switch 语句这一项上更多的是承袭了 c++,其实整个语法就是 c 风格的。java 的 switch 里只能用 byte、char、short、int 和 enum 类型,连 long 型都不能用(因为 switch 里的要被转换为 int  型,而 long 太长了)。要说不支持 float 和 double 那样的浮点那好理解,因为它们本身是不精确的,1 可能是 0.9999999999。boolean 就两值,放 switch 里无意义,因为 c++ 的 switch 里可用bool 型,但在 java 中遭摈弃。

现在在 jdk7 里 switch 可以用字符串了,学了 c#,字符串的好处就是它是表意的,像 switch(action) case "create" : ...; case "delete" : .....,多写意啊,再也不用先定义一堆常量,然后再 switch(action) case Constants.ACTION_CREATE : ......; case Constants.ACTION_DELETE : ......,当然写过不少程序的尽量会避免写成 case 1... case 2 这样的写法了,会让人不知所以的。常量放在 case 中就要求我们经常要去查它定义的值是什么。 阅读全文 >>

OpenVPN Windows 平台安装手记

VPN 用途还是很广泛的,比如家里连接公司的网络解决紧急问题,安全因素考虑时两个分部间的互访。而且在兲朝 VPN 可能还承载着更大的功用,比如你在外面有个主机或是 VPS 就可以试下。OpenVPN 是免费的(Community 版免费),它可以让你异地两个电脑组成一个局域网,可以是 client-to-client, 现 proxy 一下;或是 push 成 gateway,透明的进行 proxy -- 当然还需要更多的设置,像 NAT、Route 等。

OpenVPN 是跨平台的,这里讲下 Windows 平台的 OpenVPN 如何安装设置。下载页面:http://openvpn.net/index.php/open-source/downloads.html,当前 Windows 平台下的版本是 openvpn-2.1.4-install.exe阅读全文 >>

HttpClient 模拟登陆,保持会话并进行后续操作

Apache HttpClient 是很方便的 Java 开源的访问 HTTP 资源的组件。网站上的资源不总是能匿名访问的,很多都需要登陆后才能操作,且不说论坛里登陆后才能发言,就是某些稍显敏感的 XML 等信息也是登陆后才能获取到的。

没问题,HttpClient 能让你做到,它提供了 Basic 和 Form-Based 两种验证方式。登陆后获得服务器端发来的 Cookie 作为下一次访问的凭证, 让服务端认为你还是个合法用户。服务端不是用 Session 来维护会话的吗?是的,Session 也要有个载体,Cookie 了。或有时 Java Web 会用 jsessionid 参数在服务端与客户端来回关联 Session 信息,也没问题,HttpClient 同样能胜任。

下面主要说明 Form-Based 的验证方式,Basic 的验证简单列了几行代码,还未实践,具体可参考文后的链接。 阅读全文 >>

JDK 7 中的语法增强 -- (2) 数值常量中的下划线

再次进入到 JDK7 语法增强的第二道道上来,也就是数值常量书写时可以中间插入下划线作为分隔线,也就是 int i = 22_33 相当于 int i = 2233,仅仅是一定程度上的有助于阅读代码,除此之外,别无它处。编译后或执行时这些下划线便透明掉了,编译后的字节码里也没有了附加的下划线,当然执行时也不可能向你输出下整数 i 为 22_33 的。

也不知道是谁只是众目期盼中的版本净找些这类来增强,感觉意义不是很大,大约类同于二进制方式来表示整数。这里的数值包括整数和小数的,加上 16 进制那么可用来表示数字的字符就有 0-9 和 a-f(A-F) 了,注意下划线只能加在前面所列的某两个字符之间,而且可连续多个下划线。看例子吧: 阅读全文 >>

JDK 7 中的语法增强 -- (1) 二进制字面常量

JDK 7 预览版已出,当然到实际的使用还有段时间,包括 IDE 的和各大主要的应用服务器的升级,及 JDK 7 本身的稳定尚须时日,但我们还是有必须瞧瞧新版 JDK 带来了哪些语法增加。

我们没有盼到闭包,相对于 JDK 5 的语法增强,JDK 7 的动作还较小,大约 8 个,这里介绍第一个 二进制字面常量。

1)二进制字面常量 -- 任何整数类型(byte, short, int 和 long) 声明时可用二进制的形式,即 01 串,只要数字前加上 0b 或 0B 即行。 阅读全文 >>

Struts2 中如何覆盖已内置拦截器的属性(参数)值

在前面一篇 Struts2 中 ModelDriven Action 的 setModel() 为何不起作用? 中发现最漂亮的办法就是修改 ModelDrivern 的 refreshModelBeforeResult 属性为 true,同时留下一个话题。这里接着,即如何覆盖内置拦截器的属性(参数) 值。

如果是自定的拦截器,则可以在 struts.xml 中的 <interceptor> 或 <interceptor-ref> 中用 <param name="paramName">paramValue</param> 来指定参数。但是对于 struts2 核心包内置的或是第三方的拦截器的参数需要进行重新设置该如何呢?

比如在 struts2 包中的 struts-default.xml 中定义很多拦截器,通常我们使用的是其中组织好的 defaultStack 拦截器栈,看 struts-default.xml 中关键几行配置: 阅读全文 >>

iText5.0.6 用 HTMLWorker 转换 HTML 为 PDF 已支持单元格宽度设置

前有一文 iText 用 HTMLWorker 转换 HTML 为 PDF 时可设置表格列宽度 介绍了在 iText5.0.4 的基础上转换 html 为 pdf 时,如何让 table 中的单元格能支持宽度设定,并且还修改了三份源代码: HTMLWorker.java、IncCell.java 和 IncTable。也只是实现了以百分比形式来设定每列的相对宽度,现在好了,iText 顺理的发现了用户的这一需求,在进化后的 iText5.0.6 中可以让你设定 <td> 的宽度,可直接用百分比数值(20%)相对宽度,或用参照数值来设置,之后呢,HTMLWorker 会帮你转换为相对的宽度--比如有三列,分别设置为 20,10,50,被转换为相对宽度就是 25%,12.5% 和 62.5%。

看iText5.0.6 简短的 release 说明,iText5.0.6 has been released(http://lowagie.com/node/73): 阅读全文 >>

Struts2 文件下载及找不到文件的处理办法

Struts2 对文件的上传和下载提供了很好的支持,上传时直接用 java.io.File 来接收,下载时也无需自己去设置相应的 Stream 响应头,它提供了 org.apache.struts2.dispatcher.StreamResult 给 Action 使用。它反映到 struts.xml 配置里就是type="stream" 的 result,由 result 去负责把文件内容写入响应中去。Action 的执行方法在 result 之前执行,所以你可以借此控制下载权限,本文也演示了如何判断文件是否存在,不存在则导向到 FileNotFound 页面。StreamResult 中有哪些相关的配置参数可以参考它的源代码: 阅读全文 >>

Web开发人员应当知道的15个开源项目

如今,构建网站和开发Web应用程序已经不仅要求开发人员是一名优秀的程序员,更需要聪明的程序员。这也就是说,在可能的情况下,重复使用已有的代 码和应用程序,而不是自己重头开始。开源由来已久,并且很多网站的构建也使用了开源。开发人员都知道Linux、Apache、MySQL及 PHP (LAMP)。 但是除那些之外的其他开源项目呢?作为一名Web开发人员,你可以借助诸多可用的项目,以节省开发时间,或提高程序性能。

下面让我们看一下哪些开源项目可供大家免费使用。

可供使用的新型数据库

传统上讲,你可能习惯使用MySQL。尽管MySQL是一个非常棒的数据库,但诸多试图解决MySQL存在的问题的新型数据库已经问世。 阅读全文 >>

Hibernate 的 formula 简单用法

Hibernate 3 之后,formula(公式,Excel 里常见的) 得到了更广泛的应用,不过这里还是简单记录一下它在 <property> 中的应用。

假如我们要映射这么一个类:

package cc.unmi.model;

public class User {
    private int id;
    private String name;
    Private Set<Order> orders = new HashSet<Order>();

    //setter & getter ......
} 阅读全文 >>