首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 软件教学-> 压缩工具
JSP/Servlet应用程序优化八法-JSP教程,Jsp/Servlet
作者:网友供稿 点击:3
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
你的j2ee应用是不是运行的很慢?它们能不能承受住不断上升的访问量?本文讲述了开发高性能、高弹性的jsp页面和servlet的性能优化技术。其意思是建立尽可能快的并能适应数量增长的用户及其请求。在本文中,我将带领你学习已经实践和得到证实的性能调整技术,它将大大地提高你的servlet和jsp页面的性能,进而提升j2ee的性能。这些技术的部分用于开发阶段,例如,设计和编码阶段。另一部分技术则与配置相关。

  技术1:在httpservletinit()方法中缓存数据

  服务器会在创建servlet实例之后和servlet处理任何请求之前调用servlet的init()方法。该方法在servlet的生命周期中仅调用一次。为了提高性能,在init()中缓存静态数据或完成要在初始化期间完成的代价昂贵的操作。例如,一个最佳实践是使用实现了javax.sql.datasource接口的jdbc连接池。

  datasource从jndi树中获得。每调用一次sql就要使用jndi查找datasource是非常昂贵的工作,而且严重影响了应用的性能。servlet的init()方法可以用于获取datasource并缓存它以便之后的重用:

publicclasscontrollerservletextendshttpservlet
{
privatejavax.sql.datasourcetestds=null;

publicvoidinit(servletconfigconfig)throwsservletexception
{
super.init(config);
contextctx=null;
try
{
ctx=newinitialcontext();
testds=(javax.sql.datasource)ctx.lookup("jdbc/testds");
}
catch(namingexceptionne)
{
ne.printstacktrace();
}
catch(exceptione)
{
e.printstacktrace();
}
}

publicjavax.sql.datasourcegettestds()
{
returntestds;
}
...
...
}

  技术2:禁用servlet和jsp的自动装载功能

  当每次修改了servlet/jsp之后,你将不得不重新启动服务器。由于自动装载功能减少开发时间,该功能被认为在开发阶段是非常有用的。但是,它在运行阶段是非常昂贵的;servlet/jsp由于不必要的装载,增加类装载器的负担而造成很差的性能。同样,这会使你的应用由于已被某种类装载器装载的类不能和当前类装载器装载的类不能相互协作而出现奇怪的冲突现象。因此,在运行环境中为了得到更好的性能,关闭servlet/jsp的自动装载功能。

技术3:控制httpsession

  许多应用需要一系列客户端的请求,因此他们能互相相关联。由于http协议是无状态的,所以基于web的应用需要负责维护这样一个叫做session的状态。为了支持必须维护状态的应用,javaservlet技术提供了管理session和允许多种机制实现session的api。httpsession对象扮演了session,但是使用它需要成本。无论何时httpsession被使用和重写,它都由servlet读取。你可以通过使用下面的技术来提高性能:
l在jsp页面中不要创建默认的httpsession:默认情况下,jsp页面创建httpsession。如果你在jsp页面中不用httpsession,为了节省性能开销,使用下边的页面指令可以避免自动创建httpsession对象:
<%@pagesession="false"%>

  1) 不要将大的对象图存储在httpsession中:如果你将数据当作一个大的对象图存储在httpsession中,应用服务器每次将不得不处理整个httpsession对象。这将迫使java序列化和增加计算开销。由于序列化的开销,随着存储在httpsession对象中数据对象的增大,系统的吞吐量将会下降。

  2) 用完后释放httpsession:当不在使用httpsession时,使用httpsession.invalidate()方法使sesion失效。

  3) 设置超时值:一个servlet引擎有一个默认的超时值。如果你不删除session或者一直把session用到它超时的时候,servlet引擎将把session从内存中删除。由于在内存和垃圾收集上的开销,session的超时值越大,它对系统弹性和性能的影响也越大。试着将session的超时值设置的尽可能低。

  技术4:使用gzip压缩

  压缩是删除冗余信息的作法,用尽可能小的空间描述你的信息。使用gzip(gnuzip)压缩文档能有效地减少下载html文件的时间。你的信息量越小,它们被送出的速度越快。因此,如果你压缩了由你web应用产生的内容,它到达用户并显示在用户屏幕上的速度就越快。不是任何浏览器都支持gzip压缩的,但检查一个浏览器是否支持它并发送gzip压缩内容到浏览器是很容易的事情。下边的代码段说明了如何发送压缩的内容。

publicvoiddoget(httpservletrequestrequest,httpservletresponseresponse)
throwsioexception,servletexception
{

outputstreamout=null

//checktheaccepting-encodingheaderfromthehttprequest.
//iftheheaderincludesgzip,choosegzip.
//iftheheaderincludescompress,choosezip.
//otherwisechoosenocompression.

stringencoding=request.getheader("accept-encoding");

if(encoding!=null&&encoding.indexof("gzip")!=-1)
{
response.setheader("content-encoding","gzip");
out=newgzipoutputstream(response.getoutputstream());
}
elseif(encoding!=null&&encoding.indexof("compress")!=-1)
{
response.setheader("content-encoding","compress");
out=newzipoutputstream(response.getoutputstream());
}
else
{
out=response.getoutputstream();

}
...
...
}

  技术5:不要使用singlethreadmodel

  singlethreadmodel保证servlet一次仅处理一个请求。如果一个servlet实现了这个接口,servlet引擎将为每个新的请求创建一个单独的servlet实例,这将引起大量的系统开销。如果你需要解决线程安全问题,请使用其他的办法替代这个接口。singlethreadmodel在servlet2.4中是不再提倡使用。

技术6:使用线程池

  servlet引擎为每个请求创建一个单独的线程,将该线程指派给service()方法,然后在service()方法执行完后删除该线程。默认情况下,servlet引擎可能为每个请求创建一个新的线程。由于创建和删除线程的开销是很昂贵的,于是这种默认行为降低了系统的性能。我们可以使用线程池来提高性能。根据预期的并发用户数量,配置一个线程池,设置好线程池里的线程数量的最小和最大值以及增长的最小和最大值。起初,servlet引擎创建一个线程数与配置中的最小线程数量相等的线程池。然后servlet引擎把池中的一个线程指派给一个请求而不是每次都创建新的线程,完成操作之后,servlet引擎把线程放回到线程池中。使用线程池,性能可以显著地提高。如果需要,根据线程的最大数和增长数,可以创建更多的线程。

  技术7:选择正确的包括机制

  在jsp页面中,有两中方式可以包括文件:包括指令(<%@includefile="test.jsp"%>)和包括动作(<jsp:includepage="test.jsp"flush="true"/>)。包括指令在编译阶段包括一个指定文件的内容;例如,当一个页面编译成一个servlet时。包括动作是指在请求阶段包括文件内容;例如,当一个用户请求一个页面时。包括指令要比包括动作快些。因此除非被包括的文件经常变动,否则使用包括指令将会获得更好的性能。

  技术8:在usebean动作中使用合适的范围

  使用jsp页面最强大方式之一是和javabean组件协同工作。javabean使用<jsp:usebean>标签可以嵌入到jsp页面中。语法如下:

<jsp:usebeanid="name"scope="page|request|session|application"class=
"package.classname"type="typename">
</jsp:usebean>

  scope属性说明了bean的可见范围。scope属性的默认值是page。你应该根据你应用的需求选择正确的范围,否则它将影响应用的性能。

  例如,如果你需要一个专用于某些请求的对象,但是你把范围设置成了session,那么那个对象将在请求结束之后还保留在内存中。它将一直保留在内存中除非你明确地把它从内存中删除、使session无效或session超时。如果你没有选择正确的范围属性,由于内存和垃圾收集的开销将会影响性能。因此为对象设置合适的范围并在用完它们之后立即删除。

  杂项技术

  1) 避免字符串连接:由于string对象是不可变对象,使用“+”操作符将会导致创建大量的零时对象。你使用的“+”越多,产出的零时对象就越多,这将影响性能。当你需要连接字符串时,使用stringbuffer替代“+”操作。

  2) 避免使用system.out.println:system.out.println同步处理磁盘输入/输出,这大大地降低了系统吞吐量。尽可能地避免使用system.out.println。尽管有很多成熟的调试工具可以用,但有时system.out.println为了跟踪、或调试的情况下依然很有用。你应该配置system.out.println仅在错误和调试阶段打开它。使用finalboolean型的变量,当配置成false时,在编译阶段完成优化检查和执行跟踪输出。

  3) servletoutputstream与printwriter比较:由于字符输出流和把数据编码成字节,使用printwriter引入了小的性能开销。因此,printwriter应该用在所有的字符集都正确地转换做完之后。另一方面,当你知道你的servlet仅返回二进制数据,使用servletoutputstream,因为servlet容器不编码二进制数据,这样你就能消除字符集转换开销。

  总结

  本文的目的是展示给你一些实践的和已经证实的用于提高servlet和jsp性能的性能优化技术,这些将提高你的j2ee应用的整体性能。下一步应该观察其他相关技术的性能调整,如ejb、jms和jdbc等。


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·web打印的另类方法-ASP教程,打印相关
·Java简单类型进行精确浮点数运算-JSP教程,Java技巧及代码
·使用JAVAMAIL发邮件的一个例子-JSP教程,邮件相关
·中国移动本地传输网建设方案初探
·传输系统中的时钟同步技术
·JSP学习经验总结(转)-JSP教程,Jsp/Servlet
·WEB打印,去页眉和页脚-ASP教程,打印相关
·Native XML数据库技术详解-.NET教程,XML应用
·jsp生成html--readtemplates-JSP教程,Jsp/Servlet
·下拉框反回选定的文字 (修改页面经常用到)-ASP教程,ASP应用
最新文章
·在xp中如何使用windows vista屏保_windows xp
·photoshop调色:cmyk模式处理单色调特效_photoshop教程
·视频分享网站视频广告发展面临的问题_营销推广
·难以置信,这样的网站每月盈利上千万_营销推广
·大站做百度主题推广 小站做google adsense_网赚技巧
·方兴东:保留alexa插件才能给站长带来快乐_站长访谈
·网友天下ceo叶灵:欢迎大家看web2.0笑话_站长访谈
·我们应该如何运营网站_站长心得
·网站从业者还要更加务实才能赚钱_站长心得
·炼成高级网络编辑的三大原则_站长心得
相关主题
  • jsp/servlet的url重定向_jsp技巧
  • JSP/Servlet的重定向技术综述-JSP教程,Jsp/Servlet
  • JSP/Servlet构建三层管理信息系统-JSP教程,Jsp/Servlet
  • JSP/Servlet 中的汉字编码问题-JSP教程,Jsp/Servlet
  • JSP/Servlet构建三层管理信息系统-JSP教程,Jsp/Servlet
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭