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
*/
public static void main(String[] args) throws Exception {
JavacConfig config = JavacConfig.getLocalConfig();
if (config == null) {
config = new JavacConfig();
}
config.setMaxBatch(1);
config.setArgs("-nowarn");
config.init();
//String appDir = "D:\\workspace\\20111221_data\\resin\\webRoot";
//String classDir = "D:\\workspace\\20111221_data\\resin\\webRoot\\WEB-INF\\work\\";
String appDir = args[0];
String classDir = args[1];
String clsName = "com.caucho.jsp.JspCompiler";
Class jsp = Class.forName(clsName);
Method main = jsp.getMethod("main", new String[0].getClass());
main.invoke(null, new Object[] { new String[] { "-app-dir", appDir,
"-class-dir", classDir } });
}
}
|
核心代码就是
config.setMaxBatch(1);
另外 appDir
是
web
根目录,
classDir
是
jsp
编译后的保存的目录,其实就是
${appDir}/WEB-INF/work.
针对编译速度慢的情况,可以做如下调整
1 换到线上机器进行预编译,速度能提高
2 setMatBatch(2),能节约一半时间。但会有少数
JSP
(
<
子
JSP
个数)无法预编译。
分享到:
相关推荐
它采用了预编译JSP和HTTP缓存技术,提高了服务器响应速度。 2. **轻量级**:尽管Resin3支持Java EE标准,但它的设计初衷是作为一个轻量级服务器,相比于其他大型应用服务器,如Tomcat和WebLogic,Resin3具有更小的...
3. **性能优化**:Resin以其高性能而闻名,它采用了预编译JSP、零拷贝I/O等技术来提高响应速度。例如,Resin能够将JSP页面编译为Servlet类,以减少运行时的解释成本。 4. **负载均衡与集群**:Resin 3.1.8支持多...
Resin支持多种协议,包括HTTP、HTTPS等,并且内置了对Servlet、JSP、EJB等标准的支持,是构建高效稳定Web应用的理想选择。 #### 二、Eclipse集成Resin配置步骤 在开发过程中,将Resin与Eclipse集成可以极大地提高...
1. **性能优化**:Resin以其高性能著称,它使用了预编译JSP和HTTP连接池等技术,以提高响应速度和并发处理能力。 2. **轻量级架构**:Resin的设计目标是轻量级和高效,这使得它在资源有限的环境中也能有良好的表现...
Resin4是Caucho公司开发的一款开源Java应用服务器,支持Servlet、JSP、EJB等Java标准,提供了快速、稳定的服务。 在实施Nginx1.1与Resin4集群的过程中,关键步骤如下: 1. **Nginx的安装与配置** - 安装Nginx:在...
6. **性能优化**:Resin采用预编译JSP和零拷贝网络I/O策略,大大提升了处理速度,减少了内存占用。同时,其异步I/O模型也有助于处理大量并发请求。 7. **日志和监控**:Resin提供详细的日志系统,便于调试和监控...
Resin支持Servlets 2.3标准和JSP 1.2标准。熟悉ASP和PHP的用户可以发现用Resin来进行JSP编程是件很容易的事情。 Resin支持负载平衡(Load balancing),可以增加WEB站点的可靠性。方法是增加服务器的数量。比如一...
Resin以其高效性能而闻名,它采用了预编译JSP技术和多线程模型,能够有效减少应用的启动时间和提高响应速度。此外,Resin还提供了缓存机制,能够缓存静态内容和预编译的JSP页面,进一步提升了性能。 对于开发和调试...
7. **性能优化**:Resin通过预编译JSP、零拷贝I/O、线程池等技术来优化性能,使其在处理高流量网站时表现优秀。 8. **管理工具**:Resin提供了一个基于Web的管理界面,方便管理员监控服务器状态、管理应用和配置...
它将JSP文件编译成Servlet执行,提高了开发效率。 3. **Web应用程序部署**:用户可以通过WAR(Web ARchive)文件在Resin上部署Web应用程序。WAR文件是一个包含所有Web资源(如HTML、CSS、JavaScript、图片、Servlet...
《深入解析Resin 3.1.9源代码:揭示J2EE接口的实现细节》 Resin 3.1.9是一款著名的Java应用服务器,它以其高效、稳定和易于扩展的特点,在Java开发者中广受青睐。源代码的开放使得我们有机会深入探究其内部工作机制...
在这个场景中,Resin在处理JSP文件时,不是直接执行原始的JSP文件,而是将其编译成Java类(字节码)并存储在特定的目录下,如`ecology/WEB-INF/work_jsp_formmode_apps_upload_ktree_images`。即使原始的JSP文件被...
3.0.8版可能优化了JSP编译和执行的效率,提高了整体性能。 3. **性能优化**:Resin以其高性能著称,可能通过优化内存管理、线程池和网络I/O等核心组件,确保了高并发场景下的稳定运行。此外,它可能还具备负载均衡...
1. **性能优化**:Resin以其高效性能著称,采用预编译JSP、零拷贝I/O以及高效的线程池管理,能有效提升Web应用的响应速度。在处理高并发请求时,Resin能够保持稳定,提供出色的吞吐量。 2. **多应用部署**:Resin...
4. **性能优化**:Resin Pro 4.0.44可能包含一系列的性能优化,例如更高效的HTTP连接管理、预编译JSP、智能缓存策略等,以提高响应速度和处理能力。 5. **安全管理**:作为一个企业级产品,4.0.44版本会提供增强的...
- `work/`:Resin工作目录,包含了编译后的JSP文件和其他运行时生成的文件。 使用Resin 2.1.17时,用户通常需要编辑`conf/resin.conf`来配置服务器参数,如端口号、虚拟主机、数据源等。然后将web应用程序打包成WAR...
Resin作为一个轻量级的JSP/Servlet引擎,被推荐用于提高JSP应用的性能和效率。 1. **JSP与PHP的对比** 文档指出JSP在某些方面比PHP更具优势,如运行速度更快、资源消耗较少且功能更强大,特别是对于分布式处理和...
它使用了预编译的Servlet和JSP,从而提高了应用的启动速度和运行效率。 2. **负载均衡和集群**:Resin支持负载均衡和集群部署,可以在多台服务器之间分配请求,以提高可用性和扩展性。这对于大型企业级应用来说是...
一、前言 对于初学者来说,要执行JSP和Servlet,Tomcat是一个很不错的选择。你也可以用Resin,这两个产品都是可以不花一分钱的。 Resin对Xml的支持是很好的。 二、下载,安装 下载地址为Resin官方站点:...
3. **性能优化**:Resin以其高性能著称,源码中包含了各种性能优化策略,如线程池管理、内存分配策略、数据缓存机制等。深入研究这部分代码,可以帮助我们理解如何在Java环境中实现高性能服务。 4. **JSP和Servlet...