通过上两篇文章的研究影响Struts性能的原因在于Ognl的Value Stack的性能不佳那么如果解决呢我首先尝试使用JSF一开始选择JSF的原因主要是
1Stuts自己提供了JSF的Plugin2JSF是Sun作为标准提出而且已经通过的从Google的趋势搜索上也可以看出搜索JSF的人在增多
2JSF作为一种以组件为基础的Web Framework有其独到之处其内建的和其他许多开源的组件使用起来相当方便强大当然对于不同的应用来说也有不利之处(后面会提到)但是如果能够坚持长期使用逐渐积累组件库的话JSF是一个很好的选择
3JSF的文档(或者说是书籍)还是比较多的
经过测试使用后发现其性能与Struts相比确实提升不少但是后来遇到了一个问题所以最后还是放弃了JSF这个问题是关于JSF的DataTable的JSF提供的DataTable其实使用起来很方便可定制化程度也不错只是刚好缺少了我所希望的功能(也可能是我不知道如何实现)我的应用中的DataTable是一个动态的结果集也就是说输出的列是不能预先确定的而DataTable却要求先声明好所有的DataColumn我不知道如何解决这个问题所以最后放弃了JSF我的第二个选择是FreeMarker选择FreeMarker的原因是
1FreeMarker是Struts缺少的模板引擎Struts的标签大部分是使用FreeMarker的使用FreeMarker的话连Plugin都省去了
2FreeMarker相对比较轻量级因为他本身只是一个模板引擎与JSF这样一个大而全的WebFramework相对轻巧多了
3FreeMarker的学习起来非常容易只要把他网站上的Document过一遍基本上就OK了
4FreeMarker虽然体积小功能还是相当强的INConverter之类的东西基本都全了至少我所需要的功能全有
5FreeMarker相当灵活他不象JSF把底层的东西封装了以后暴露出一些属性可以设置如果你需要的属性不能设置你就没有办法了在FreeMarker你直接操作最底层的东西拥有很大的灵活性当然牺牲了一些方便性比如要用FreeMarker生成一个下拉框就需要较多的工作量了
测试之后使用FreeMarker的性能很不错在大数据量操作的情况下至少一个数量级的性能提升
我的最终结论如果要在Struts中展示或者操作大量数据强烈推荐使用FreeMarker