日期:2014-05-16 浏览次数:20453 次
?
Resin3?JSP预编译实现
?
?
一、 预编译需求
通过预先编译JSP ,而不是在线上编译,节省了线上编译时间,降低系统上线初期超高的 CPU 使用率,以及用户请求等待事件
默认方式,Resin3 提供了俩种预编译( http://www.caucho.com/resin-3.0/jsp/compile.xtp ),但在实际使用的时候,无论哪种方法,都只能编译部分 JSP ,导致优化很不明显,据运维的说,还发生了 log4j 日志无法输出的情况(这个我也很莫名其妙,至今不知道原因)
二、 预编译改善原理
幸好Resin 是公开源码的,通过分析预编译代码,其默认编译方式是每 64 个 jsp 文件为一组,好处是这样编译速度快,但如果其中有一个 jsp 没有编译通过 , 则这 64 个文件都奖编译失败。在我们系统中,有很多子 jsp ,如果一些 JSP 不幸与这些子 JSP 分在一组,则编译不通过。
?
目前解决办法是每组JSP 只包含一个 jJSP 文件。这样就能保证全部编译,但缺点是需要较长编译时间,在测试系统上大概需要 1 分钟才能编译好 200 多个 JSP 文件
?
代码如下:
package?com.javamonkey.common.util; ? import?java.lang.reflect.Method; ? import?com.caucho.java.JavacConfig; ? public?class?ResinJSPCompileTask?{ ? /** ?*?@param?args
|