Struts2-Json-Plugin 的使用(翻译自官方文档)

在 Struts2 中要使用 Ajax 获得 Json 数据我认为目前还是 struts2-json-plugin 了。当然你你可以用手工用像 XStreamGoogle GsonJackson 这样的工具手工把 Java 对象转换成 Json 字符串再写往 Response 去,要写的代码自然多不了,还得留心字符集与 content type。而 struts2-json-plugin 毫无疑问是与 Struts2 最亲近了,只需你配置一些属性就能得到你想的结果。

本想分几篇逐步介绍如何使用 struts2-json-plugin 的,然而就在现在发现官方的 struts2-json-plugin 指南已经很详细了,所以干脆翻译一下 http://struts.apache.org/2.2.1.1/docs/json-plugin.html,同时自己加深对它的理解。 阅读全文 >>

引入了 struts2-spring-plugins 包后 Spring 就会管理你的 Action

Struts2 与 Spring 结合,使用 Spring 来管理 Action 实例,在项目中引入了struts2-spring-plugin-2.2.1.jar 包。然后想到的是既然是要用 Spring 来管理 Action 实例,就得在 struts.xml 里加上:

或者是在 struts.properties 里加上一条属性:

OK,这也没问题,然而有次在某个测试项目中想暂时不用 Spring 来管理 Bean,于是把上面的配置去了,也把 web.xml 中的相关 Spring 的 ContextLoaderListener 也格啦。容器启动的时候却发现: 阅读全文 >>

Tomcat 7的七大特性:新特性与增强功能

Tomcat 7 在加强原有功能的同时也增加了一些新特性。有些文章列举了Tomcat 7的新特性,但大多数都没有对它们进行详细地解释、评价并给出可执行的示例。除了列举出新特性,这篇文章还对Tomcat 7的七个最值得注意的特性与增强部分进行分类、评定以及演示可执行代码以使你能够对每个特性/加强有个更好的理解。

我将下面列举的这些分类为“Tomcat 7 新特色:创新性改变”和“Tomcat 7 加强:进化性改变”:

Tomcat 7 新特性:创新性改变

  1. 使用随机数令牌(nonce)防止跨站请求伪造(cross-site request forgery—CSRF)攻击
  2. 验证时改变 jsessionid 以防止固定会话攻击
  3. 内存泄露检测及预防
  4. 使用别名在war文件外存储静态内容 阅读全文 >>

xampp 错误:Deprecated: Assigning the return value of new by reference is deprecated

WordPress 3.0.1 之前是在 xampp 1.7.1 中运行的,没什么问题,php 版本为 5.2.9。后来升级 xampp 到 1.7.3 版,打开网站最上方出现提示:

Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\footnoted\wp-content\plugins\simple-tags\inc\client.php on line 1700

这是插件 simple-tags 里的代码,定位到该行是:

$error = & new WP_Error('invalid_taxonomy', __('Invalid Taxonomy'));

而 WP_Error 是用 function 进行定义的:

function WP_Error($code = '', $message = '', $data = '') 阅读全文 >>

Spring 3.0.5.RELEASE 版悄无声息的发布了

Spring 3.0.5 Release 版在 2010-10-20 悄然发布,真正支持了 Hibernate 3.6 Final。在常去的几个网站都没看到相关信息,而且在 Spring 的官方网站上也是小声细作,好不容易才翻出一个 changelog 出来:http://static.springsource.org/spring/docs/3.0.x/changelog.txt

可在 http://ebr.springsource.com/repository/app/bundle/version/detail?name=org.springframework.core&version=3.0.5.RELEASE 下载,

假如你是用 Ivy 管理依赖,请添加:

<dependency org="org.springframework" name="org.springframework.core" rev="3.0.5.RELEASE" />

用 Maven 管理依赖的话,pom.xml 加: 阅读全文 >>

用 DbUnit 执行 export 导出数据时报 MySQLSyntaxErrorException

我是借助于 dbunit-maven-plugin 来使用 DbUnit 的,数据库是 MySql,在使用 mvn dbunit:export 指令时,总报错:

Embedded error: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc from unmi_test_table order by Id' at line 1

若是加上 -e 或 -X 参数,如 mvn dbunit:export -e 时可以看到更详细的异常信息:

Caused by: org.apache.maven.plugin.MojoExecutionException: Error executing export 阅读全文 >>

C++ 多重继承和虚继承的内存布局

这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006)

敬告: 本文是介绍C++的技术文章,假定读者对于C++有比较深入的认识,同时也需要一些汇编知识。

本文我们将阐释GCC编译器针对多重继承和虚拟继承下的对象内存布局。尽管在理想的使用环境中,一个C++程序员并不需要了解这些编译器内部实现细节,实际上,编译器针对多重继承(特别是虚拟继承)的各种实现细节对于我们编写C++代码都或多或少产生一些影响(比如downcasting pointer、pointers to pointers 以及虚基类构造函数的调用顺序)。如果你能明白多重继承是如何实现的,那么你自己就能够预见到这些影响,进而能够在你的代码中很好地应对它们。再者,如果你十分在意的代码的运行效率,正确地理解虚继承也是很有帮助的。最后嘛,这个hack的过程是很有趣的哦:) 阅读全文 >>

用 dbunit-maven-plugin 来管理你的测试数据

单元测试有人写过,也有人没做过,数据库的 dbunit 的用的人应该更少了,它可以用来给你做测试准备数据。一般我们做测试会在一个测试数据库中不停的测,自然会累积许多垃圾数据,给单元测试会造成不便,功能测试倒无太紧要。如果我们想在单元测试的时候有一份干净的数据,有个做法是搞个备用的数据库,测试前导到测试库的,或用某些数据库的导入导出功能。

这里我们来看 dbunit 怎么实现准备测试数据的,它可以用来导出数据库数据到数据文件中,从数据文件中导入干净的数据到数据库中,比较数据库与数据文件、或增量的插入记录等等。 阅读全文 >>

把 Lucene 索引数据存到数据库表中

一般我们都是把 Lucene 索引存放在文件系统中,大数据量时会考虑用分布式文件系统,如 Hadoop 及 MapReduce、GFS 的应用。也许你会想我们有数据库作为集中的数据存储地,是否可以把 Lucene 索引文件存储到关系型数据库中。可以这么做,不过好像性能上有些问题,本文就此也作这样一个尝试。

http://wiki.apache.org/lucene-java/LuceneFAQ
Can I store the Lucene index in a relational database?
Lucene does not support that functionality out of the box, but several people have implemented JdbcDirectory's. The reports we have seen so far indicate that performance with such implementations is not great, but it is doable. 阅读全文 >>

在 Java Web 项目中选择使用 Slf4J 通用日志框架

在前一篇日志:Java 流行框架(Spring/Struts2/Hibernate/iBatis)都在使用什么日志组件,介绍了当前流行框架 Spring、 Struts2、 Hibernate、iBatis(Mybatis) 分别使用的是什么通用日志组件:

Spring 3.0.4:Commons-Logging
Struts 2.2.1:间接的优先支持 Commons-Logging
Hibernate 3.6.0:直接的使用 Slf4J
iBatis/MyBatis 3.0.2:间接的优先使用 Slf4J

再考虑 Slf4J 以及 Logback 的优越性,性能得到的改善,多 JVM 写同一日志文件都无妨,方便运用于 OSGI 环境,自动压缩日志,参数化。所以个人认为在 SSH 或 SSI 项目中推荐用

Slf4J + Logback 对于 Hibernate 和 iBatis/MyBatis 直接走这条路
jcl-over-slf4j + Logback 对于 Spring 和 Struts2,需用用 jcl-over-slf4j 把 Commons-Logging 桥接到 Slf4J,然后 Logback。 阅读全文 >>