动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > JSP技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ JSP技巧 ]的信息

本月文章推荐
.JSP应用的安全问题.
.JavaBean实现多文件上传的两种方.
.在JSP编程中Application的使用方.
.JSP通过JDBC与Oracle相连.
.如何使用JSP连接DB2数据库.
.在JSP环境中如何来配置和使用fck.
.快速应用JDBC控件访问数据库资源.
.如何建立JSP操作用以提高数据库访.
.jsp页面显示数据导出到excel表中.
.JSP自定义标签试验.
.JSP中include指令和include行为区.
.JSP应用语法详解大全 (2).
.用JSP下载word文件(不会直接用I.
.jsp中与标签要用不同的方式获得数.
.困扰JSP的一些问题与解决方法.
.用缓冲技术提高JSP应用的性能和稳.
.Tomcat配置技巧.
.基于JDBC的数据库连接池技术研究.
.windows中双击jar文件即可运行写.
.从原理上解决Tomcat中文问题.

通过JSP的预编译消除性能瓶颈

发表日期:2003-2-18 |


欢迎来到“管理”这个版,新一期的月刊专栏专注于 WebLogic 服务器的管理、配置、处理和开发方面。

开辟这个专栏的目的是为了向大家介绍在使用WebLogic Sever时,能普遍用到的非J2EE开发方面的问题。开发者和管理者同样会发现这个专栏非常有价值,因为这些文章既适用于开发又适用于最终产品的应用。此外,它很大程度上利用了来自于该领域和工程实验室的经验,它提供了对实际问题的详细解答

JSP预编译的必要性

本月的文章着眼于移除潜在的系统性能瓶颈,它通过解决一个最普通的问题――在服务器运行时间中的JSP (JavaServer Page)编译的系统开销问题,这个问题困扰着几乎所有的J2EE发展计划。虽然JSP是在J2EE应用范围内呈现动态HTML视图的理想选择,但在某种程度上它们会影响性能,这比错误的更令人讨厌,给人的第一感觉是该程序很慢。

根据J2EE规范,JSP主要是HTML文件,在它里面包含着Java代码用来和其他的系统组件进行交互以及动态的显示信息。规范规定所有的J2EE编译应用服务器应当支持JSP,客户请求一个特定的JSP,将:

         转换JSPHTML格式成为servlet类型的Java类(Java源格式),用简写的JSP符号代替完全符合规定的Java语法

         将新产生的Java源文件编译成.class字节码形式

         在新编译的类上执行适当的接口方法并且对客户端请求返回响应。

虽然从发展的观点来看对于在表示层内管理动态HTML的产生这是最好的途径,但它影响到服务器的运行时间环境,要求JSP被解析、转变成Java代码,并且在它去处理一个特定的客户端请求之前被编译。对最终用户明显的影响是,一个响应将会被延迟知道给定的JSP文件被编译通过。考虑到一个特定的用户请求可能用到两个或多个JSP文件,因此编译状态必需的时间增加了很多倍。

对第一个请求一个特定的JSP页面并且迫使被请求的文件进行初始编译的终端用户,会感觉应用程序很慢并且没有响应。 虽然这样的感觉可能存在,但是对于特定的JSP文件的编译过程通常在给定的应用服务器虚拟机实例的生命周期中完成一次。 因此,它对性能总体上的影响被考虑成一种障碍,而不是对应用程序总响应时间的一个严重的障碍。然而,在生产环境中为了传送基于JSPJ2EE应用程序的生产系统,必须克服JSP的缺陷并且对最终用户进行透明的编译。

这样生产环境如何能受益于JSP文件还要避免运行时编译的性能打击答案是简单的执行一个一般作为JSP预编译的过程。 借用JSP预编译,已经被预编译的在脱机环境中的JSP文件和他们的编译结果被部署在生产环境中。如果结果类文件的预编译和部署正确的完成,应用程序服务器将会为JSP文件运行先前的编译类,并且在运行中将不强制对特定的请求进行再编译。 这样产生了一种情况,应用程序的操作避免了多余的编译开销,允许系统管理员移除对系统总性能会造成影响的一个已知的瓶颈。

不同的方法论和途径

没有人怀疑JSP预编译的承诺听起来令人兴奋。 然而,为了要实现这样的承诺,你必须首先了解能够执行这个技术的不同途径,以及它们各自优点和缺点。

运行应用程序进行强制预编译

用于实现JSP预编译最显而易见的方法是在产品发布前,通过请求在应用程序中的所有可能的JSP页面,因此编译在终端用户访问站点前完成。它既可以通过第一次人工浏览整个站点时完成也可以通过从测试系列应用程序或其他脚本语言的客户端(例如LoadRunner SilkPerformer)发动自动请求来实现。 当使用这种方法(可能是所有的JSP预编译方法中的最简单的而又较下策的一个方法)时,他的缺点很快就显现出来了。也许最大的缺点是很难实现跨集群环境,在集群环境中,用该方法对于单一节点的实例发送的请求依集群中的节点数量成倍的增加。而且,当这个集群是由一个或更多的Web服务器或硬件负载权衡者来代理时,更难保证在一个集群的环境中每个服务器实例都进行JSP预编译,因为一般没有方法来搞清代理最初把请求转到哪个应用服务器。此外,在应用服务器每次重启时,这个方法必须执行,当站点很小时,不能一次实现所有的编译就会很痛苦。因此,我们不推荐这种JSP预编译的方法。

使用编译工具来实现预编译

因为人工执行一个站点应用程序来强制JSP预编译在真实的产品环境中是一个较大的缺点在预编译运行期间选择编译JSP,使其变成为servlets变得更令人心动。幸运地,WLS提供了二个方法。第一种方法在服务器启动部署一个特定的Web应用程序的时候执行预编译(declarative预编译),第二种方法是命令行Java工具(weblogic.jspc)允许过程在完全脱机的情况下处理(程序方式的预编译)。两种方法都有它们的优点,程序方式的预编译在两者中有更灵活的选项,并且提供更让人无法抗拒的理由来使用它。

DECLARATIVE预编译

对于在WLS下公布的预编译,一个特定的Web应用程序(独立的或者作为EAR的一部分)能够被配置,因此所有的JSP在应用程序部署(服务器启动时)和重新部署(运行时)期间里被预编译。对WEB-INF/ weblogic.xml部署描述符要做必要的配置变化,使用预编译<jsp-param/>指令,如下:

<weblogic-web-app>

<jsp-descriptor>
<jsp-param>
<param-name>precompile</param-name>
<param-value>true</param-value>
</jsp-param>
</jsp-descriptor>

</weblogic-web-app>

在一个特定的Web应用程序上进行部署(或重新部署),如果上述的参数被设定成真, WLS 将会在WAR内尝试预编译所有的JSP文件,在程序中从 Web 应用程序的根目录下循环的运行它的方法( 略过Web-INF) 。以. jsp .JSP为扩展名的文件都变成了编译的对象。 被编译后的文件被以适当的包目录结构形式被放置在Web 应用程序的临时工作目录下面(默认在Web-INF子目录中,除非在 weblogic.xml 里有特别说明)。

这个方法是到目前为止进行JSP预编译最方便的途径(“flick-a-switch” 途径),他有许多指出来毫无意义的缺点。如果一个错误在JSP的编译期间或在部署(或重新部署) 的时候发生,Web 应用程序的预编译将会在例外处暂停。另外,如果在一个特定的Web应用程序里面有许多JSP文件的情况,declarative预编译显著的影响着部署时间,阻断部署直到所有的文件都被编译。对于大型的应用程序,当出现数以百计的JSP 文件以declarative预编译被执行的时候,这种部署时间趋向以分钟来计算 (在某些情况1015分钟,其他情况可能更长时间)。设想开始一个服务器实例,在一个特定的Web应用程序周期内进入部署状态用declarative 预编译激活。如果在应用内有很多的JSP文件以及部署,接近完成时就已经花费了大量的时间,在编译期间由于抛出一个例外而突然失败,当然会引起挫折感。虽然起先看起来比较方便,但declarative 编译对生产系统管理造成重大的风险,因此应该在经过慎重的考虑后再使用它。

程序方式的预编译

WLS下最可靠的预编译JSP的方法是使用Java命令行weblogic.jspc,它位于WLS安装的lib目录之下的weblogic.jar文件中。这个工具允许开发者在发展阶段和在部署前解决编译时间问题的时候编译需要的JSP文件。它也为生产系统提供一个有能力实现JSP预编译的管理员。这种用法的主要好处是:

         文件可以被预编译一次然后可以被多次部署。(这不被服务器实例的重复利用所影响

         编译时的例外可以被预先解决而不影响部署。

         类可以通过集群部署。

使用weblogic.jspc的缺点是需要人工干涉,并且它在开发时并当在JSP文件变得过时的时候必须被重新运行。然而,考虑到前面的两个方法的讨论,我们几乎不能将这种不方便当成该方法的一个缺点,因此推荐它作为最可靠和最灵活的机制来实现JSP预编译。

执行weblogic.jspc

为了更有效的使用weblogic.jspc,你必须首先了解它的用法和语法。这篇文章我们将利用WLS6.1 SP2的工具的功能。注意:下面给出的语法和最好的惯例应该应用于WLS 6.1的所有版本以及新的WLS 7.0

为了调用命令行JSP编译器(weblogic.jspc),你必须确定下面的内容:

         PATH环境变量必须包含你机器上安装的J2SE1.3包的二进制目录(例如,/opt/j2se/1.3.1/sdk/bin 或者c:\sunsoft\j2se\1.3.1\sdk\bin),以获得JVM运行时的支持。如果你打算使用javac作为你的JSP编译的Java编译器,要确定PATH包含全部Java 1.3 的软件开发工具包(SDK)的二进制目录,并且不仅仅是JREJava Runtime EngineJava运行时间引擎),因为没有编译器和JRE关联。 如果你打算使用一个编译器而不是javac(例如 Jikes),也要为那个编译器确定在PATH中包含正确的目录。

         设置Java系统类路径用来包含来自WLS 6.1 SP2 安装目录的weblogic.jar文件,通过在产品库目录下默认建立(例如,/opt/bea/wlserver6.1/lib/weblogic.jar或者c:\bea\wlserv  -er6.1\lib\weblogic.jar)。此外,请确定在JSP编译阶段中你可能需要的参考类(JAR或类文件)也在你的类路径中。

在第一次执行weblogic.jspc之前,你需要测试你的命令行配置是否是按上述配置。它可以通过简单运行一个WLS版本检查来完成,使用命令“java weblogic.version”,这个命令应该返回下面的内容:

which should return the following:
WebLogic Server 6.1 SP2 12/18/2001 11:13:46
#154529
WebLogic XML Module 6.1 SP2 12/18/2001
11:28:02 #154529

如果你的输出和上面的不相似(和你运行的版本相对应),在进行JSP预编译前,要重新访问PATH和类路径变量将其设置成你的当前命令行环境。

一般的weblogic.jspc的语法如下面给出的:

java weblogic.jspc [options] <jsp files>...

在一个编译器的单一调用中默认情况下JSP编译器可以编译一个JSP文件或一组JSP文件,并且可以通过设置命令行选项,编译器可以以不同的方法工作。下面给出一个例子:

java
weblogic.jspc
-webapp mywebapp
-compiler javac
-compileFlags "-g"
-classpath /u/apps/dist/src/lib.jar
-d .
-package com.slackwerks.mywebapp.jsp
-commentary
-keepgenerated
-k
mywebapp\index.jsp

这篇文章只列举了一个例子,如果你要想更加了解weblogic.jspc如何能在你的环境中使用和管理的话,请参阅www.slackwerks.com/wldj,我们提供了对整套的工作选项,使用的含义以及相关联问题的讨论。

结论

虽然关于JSP预编译的问题较多,但许多的途径可以解决。然而,考虑到上文所说的那些优点和缺点,应该较容易的看出经由weblogic.jspc预编译的程序方式是为克服JSP固有的缺点的一个灵活的选项。在开发阶段的早期,熟悉该工具将改善生产期间应用程序的管理和性能状况。

上一篇:Jsp如何实现网页的重定向 人气:27361
下一篇:编写线程安全的JSP程序 人气:16885
浏览全部性能的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-27 风讯dotNETCMS v1.0 SP3 SQL/ACC
2008-8-27 风讯dotNETCMS v1.0 SP3 源码
2008-8-27 时尚DJ舞曲小偷 v3.0
2008-8-27 多用户QQ空间播放器
2008-8-27 非零坊幽默短信 v3.3
2008-8-27 Pcook CRM客户资源管理系统 v2.0
2008-8-27 乐铺网店系统免费普及版 v3.40
2008-8-27 非零坊个人作品管理 v3.1
2008-8-27 凹丫丫简单会员信息管理系统
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵