`
kuru
  • 浏览: 137652 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

提高JSP的性能

    博客分类:
  • java
阅读更多
方法一:在servlet的init()方法中缓存数据
当应用服务器初始化servlet实例之后,为客户端请求提供服务之前,它会调用这个servlet的init()方法。在一个servlet的生命周期中,init()方法只会被调用一次。通过在init()方法中缓存一些静态的数据或完成一些只需要执行一次的、耗时的操作,就可大大地提高系统性能。
例如,通过在init()方法中建立一个JDBC连接池是一个最佳例子,假设我们是用jdbc2.0的DataSource接口来取得数据库连接,在通常的情况下,我们需要通过JNDI来取得具体的数据源。我们可以想象在一个具体的应用中,如果每次SQL请求都要执行一次JNDI查询的话,那系统性能将会急剧下降。解决方法是如下代码,它通过缓存DataSource,使得下一次SQL调用时仍然可以继续利用它:

public class ControllerServlet extends HttpServlet{private javax.sql.DataSource testDS = null;  public void init(ServletConfig config) throws ServletException {super.init(config);   Context ctx = null;  try{    ctx = new InitialContext();   testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");}catch(NamingException ne){ne.printStackTrace();}}catch(Exception e){e.printStackTrace();}} public javax.sql.DataSource getTestDS(){  return testDS; } ...... }

方法 2:禁止servlet和JSP 自动重载(auto-reloading)
Servlet/JSP提供了一个实用的技术,即自动重载技术,它为开发人员提供了一个好的开发环境,当你改变servlet和JSP页面后而不必重启应用服务器。然而,这种技术在产品运行阶段对系统的资源是一个极大的损耗,因为它会给JSP引擎的类装载器(classloader)带来极大的负担。因此关闭自动重载功能对系统性能的提升是一个极大的帮助。
方法 3: 不要滥用HttpSession
在很多应用中,我们的程序需要保持客户端的状态,以便页面之间可以相互联系。但不幸的是由于HTTP具有天生无状态性,从而无法保存客户端的状态。因此一般的应用服务器都提供了session来保存客户的状态。在JSP应用服务器中,是通过HttpSession对像来实现session的功能的,但在方便的同时,它也给系统带来了不小的负担。因为每当你获得或更新session时,系统者要对它进行费时的序列化操作。你可以通过对HttpSession的以下几种处理方式来提升系统的性能。
如果没有必要,就应该关闭JSP页面中对HttpSession的缺省设置。 如果你没有明确指定的话,每个JSP页面都会缺省地创建一个HttpSession。如果你的JSP中不需要使用session的话,那可以通过如下的JSP页面指示符来禁止它:
<%@ page session="false"%>
不要在HttpSession中存放大的数据对像:如果你在HttpSession中存放大的数据对像的话,每当对它进行读写时,应用服务器都将对其进行序列化,从而增加了系统的额外负担。你在HttpSession中存放的数据对像越大,那系统的性能就下降得越快。
当你不需要HttpSession时,尽快地释放它:当你不再需要session时,你可以通过调用HttpSession.invalidate()方法来释放它。尽量将session的超时时间设得短一点:在JSP应用服务器中,有一个缺省的session的超时时间。当客户在这个时间之后没有进行任何操作的话,系统会将相关的session自动从内存中释放。超时时间设得越大,系统的性能就会越低,因此最好的方法就是尽量使得它的值保持在一个较低的水平。
方法 4: 将页面输出进行压缩
压缩是解决数据冗余的一个好的方法,特别是在网络带宽不够发达的今天。有的浏览器支持gzip(GNU zip)进行来对HTML文件进行压缩,这种方法可以戏剧性地减少HTML文件的下载时间。因此,如果你将servlet或JSP页面生成的HTML页面进行压缩的话,那用户就会觉得页面浏览速度会非常快。但不幸的是,不是所有的浏览器都支持gzip压缩,但你可以通过在你的程序中检查客户的浏览器是否支持它。下面就是关于这种方法实现的一个代码片段:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {OutputStream out = null; String encoding = request.getHeader("Accept-Encoding");   if (encoding != null && encoding.indexOf("gzip") != -1){request.setHeader("Content-Encoding" , "gzip");   out = new GZIPOutputStream(request.getOutputStream()); } else if (encoding != null && encoding.indexOf("comdivss") != -1){ request.setHeader("Content-Encoding" , "comdivss");   out = new ZIPOutputStream(request.getOutputStream()); }else{   out = request.getOutputStream(); }  ...  ... }

方法 5: 使用线程池
应用服务器缺省地为每个不同的客户端请求创建一个线程进行处理,并为它们分派service()方法,当service()方法调用完成后,与之相应的线程也随之撤消。由于创建和撤消线程会耗费一定的系统资源,这种缺省模式降低了系统的性能。但所幸的是我们可以通过创建一个线程池来改变这种状况。
另外,我们还要为这个线程池设置一个最小线程数和一个最大线程数。在应用服务器启动时,它会创建数量等于最小线程数的一个线程池,当客户有请求时,相应地从池从取出一个线程来进行处理,当处理完成后,再将线程重新放入到池中。如果池中的线程不够地话,系统会自动地增加池中线程的数量,但总量不能超过最大线程数。通过使用线程池,当客户端请求急剧增加时,系统的负载就会呈现的平滑的上升曲线,从而提高的系统的可伸缩性。
方法 6: 选择正确的页面包含机制
在JSP中有两种方法可以用来包含另一个页面:
1、使用include指示符
<%@ includee file=”test.jsp” %>
2、使用jsp指示符
<jsp:includee page=”test.jsp” flush=”true”/>
在实际中发现,如果使用第一种方法的话,可以使得系统性能更高。
方法 7:正确地确定javabean的生命周期
JSP的一个强大的地方就是对javabean的支持。通过在JSP页面中使用jsp:useBean标签,可以将javabean直接插入到一个JSP页面中。它的使用方法如下:
<jsp:useBean id="name" scope="page|request|session|application" class="package.className" type="typeName"></jsp:useBean>
其中scope属性指出了这个bean的生命周期。缺省的生命周期为page。如果你没有正确地选择bean的生命周期的话,它将影响系统的性能。
举例来说,如果你只想在一次请求中使用某个bean,但你却将这个bean的生命周期设置成了session,那当这次请求结束后,这个bean将仍然保留在内存中,除非session超时或用户关闭浏览器。这样会耗费一定的内存,并无谓的增加了JVM垃圾收集器的工作量。因此为bean设置正确的生命周期,并在bean的使命结束后尽快地清理它们,会使用系统性能有一个提高。
其它一些有用的方法
1、在字符串连接操作中尽量不使用“+”操作符:在java编程中,我们常常使用“+”操作符来将几个字符串连接起来,但你或许从来没有想到过它居然会对系统性能造成影响吧?由于字符串是常量,因此JVM会产生一些临时的对像。你使用的“+”越多,生成的临时对像就越多,这样也会给系统性能带来一些影响。解决的方法是用StringBuffer对像来代替“+”操作符。
2、避免使用System.out.println()方法:由于System.out.println()是一种同步调用,即在调用它时,磁盘I/O操作必须等待它的完成,因此我们要尽量避免对它的调用。但我们在调试程序时它又是一个必不可少的方便工具,为了解决这个矛盾,我建议你最好使用Log4j工具(http://Jakarta.apache.org ),它既可以方便调试,而不会产生System.out.println()这样的方法。
3、ServletOutputStream 与 PrintWriter的权衡:使用PrintWriter可能会带来一些小的开销,因为它将所有的原始输出都转换为字符流来输出,因此如果使用它来作为页面输出的话,系统要负担一个转换过程。而使用ServletOutputStream作为页面输出的话就不存在一个问题,但它是以二进制进行输出的。因此在实际应用中要权衡两者的利弊。
总结
本文的目的是通过对servlet和JSP的一些调优技术来极大地提高你的应用程序的性能,并因此提升整个J2EE应用的性能。通过这些调优技术,你可以发现其实并不是某种技术平台(比如J2EE和.NET之争)决定了你的应用程序的性能,重要是你要对这种平台有一个较为深入的了解,这样你才能从根本上对自己的应用程序做一个优化。
分享到:
评论

相关推荐

    网站性能优化 Web开发 JSP java

    2.缓存技术(当数据更新比较快,几...4.SSI(包含页面)<jsp:include> 硬件提升:体现钱 DIV+CSS可提高用户体验 建议不使用table 权限模块: 1权限定义 权限组(角色) 权限拦截模块 A粗粒度(Filter)B细粒度(AOP)

    JSP实现文件上传与下载.pdf

    "JSP实现文件上传与下载" JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。...JSP文件上传和下载是Web应用程序中常用的功能,需要注意文件上传和下载的安全性、性能和可扩展性。

    jsp程序设计第2版习题解答含题目.docx

    在设计jsp页面时,需要合理地使用指令标记和动作标记,以提高页面的性能和可维护性。 jsp习题解答 本资源提供了多种jsp习题的解答,涵盖了jsp基础知识、jsp页面设计、jsp服务器配置、jsp变量作用域、jsp指令标记和...

    javaweb开发JSP资料大全

    -session对象和out对象、JSP中request属性的用法、用WebWork、JSP、Velocity建立注册页面、在JSP中使用JavaMail、用JSP操作Cookie、解决MVC下分页显示的问题、缓冲技术提高JSP程序性能和稳定性、jsp属性的保存范围、...

    用缓冲技术提高JSP应用的性能和稳定性

    JSP能够在标记库内封装和运行复杂的Java代码,它使得JSP页面文件更容易维护,使得非专业开发人员使用JSP页面文件更加方便。现在已经有许多标记库,它们或者是商业产品,或者是源代码开放产品。但这些产品中的大多数...

    2022年处理添加留言的JSP页面.pptx

    7. JSP页面的性能优化:在处理添加留言的JSP页面中,需要优化JSP页面的性能,以提高用户体验。可以使用缓存、压缩和内容分发网络来实现JSP页面的性能优化。 8. JSP页面的调试:在处理添加留言的JSP页面中,需要对...

    Tomcat性能调优方案[参考].pdf

    Apache集成Tomcat是指使用Apache作为Web服务器,将静态HTML和JSP文件的处理分离出来,让Tomcat只处理JSP文件,以提高系统的性能。Apache和Tomcat的集成有三种方式,分别是JK、http_proxy和ajp_proxy。JK方式是最常见...

    如何提高Java的性能和执行效率

    对于服务器端的应用程序,由于不大涉及到界面设计和程序的频繁重启,Java的性能问题看似不大明显,从而一些Java的技术,如JSP,Servlet,EJB等在服务器端编程方面得到了很大的应用,但实际上,Java的性能问题在服务器...

    贞龙jsp版本CMS(BIZOSSCMS)高性能内容管理系统正式版

    BIZOSS-CMS是脱胎于贞龙公司的成熟的B2B产品而独立发展而成的一套个人、企业、政府的高性能内容管理系统,在安全性、稳定性、易用性方面具有较高的声誉,受到公司客户的一致好评。 BIZOSS-CMS采用JAVA+MySQL技术开发...

    jsp学生管理系统课程设计报告.doc

    8. HDPE 管道的应用:该系统中还涉及到HDPE 管道的应用,HDPE 管道具有多种独特性能,使管道的铺设更加安全。 9. 计算机信息管理系统的代替传统管理方法:计算机信息管理系统可以代替传统的成绩管理方法,以提高...

    基于JSP的网上书店系统的设计与实现【毕业作品】.doc

    JSP能够适应市场上85%的 服务器产品,其安全机制、性能和速度均大于asp。JSP技 术不但能够实现跨平台和兼容各种Web服务器产品,而且还能够将强大的服务器端JAVA技 术有机的融合到网页中去。 本文首先介绍了JSP和 ...

    基于jsp的毕业生就业信息管理系统源码.zip

    优化系统性能:通过对系统源码进行分析和优化,可以提高系统的运行效率和响应速度,满足高性能应用的需求。 提高代码质量:合理的系统源码设计可以降低代码的复杂度,提高代码的可读性和可维护性,减少潜在的错误和...

    JSPMVC-Master

    6. 进行性能优化,如缓存静态资源、合理使用数据库连接池等。 源码二: **项目简介:** 使用Struts和Hibernate框架实现MVC架构。 **优化建议:** 1. 使用Struts框架来管理请求和响应,实现前端与后台业务逻辑的分离...

    提升JSP应用程序的七大绝招

    你时常被客户抱怨JSP页面响应速度很慢吗?你想过当客户访问次数剧增...在本文中,我们将详细地描述怎样通过调整servlet和JSP页面,来提高你的应用程序的总体性能。在阅读本文之前,假设你有基本的servlet和JSP的知识。

    CMS4J 专业的jjava/jsp版网站内容管理系统

    在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的循环。而ASP、PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒和84秒。(参考PHPLIB)。 数据库测试中,三者分别对 Oracle 8 ...

    jsp分页技术及其对数据库两张表的增删查改和模糊查询

    jsp分页技术及其对数据库两张表的增删查改和模糊查询 jsp分页技术是指在Web应用程序...这种技术可以提高数据的查询效率、用户体验和系统性能。但是,我们也需要注意数据的一致性和完整性,以免出现数据不一致的情况。

    jsp操作MySQL实现查询 插入 删除功能示例.docx

    MySQL 连接池是指在应用程序中使用连接池来管理 MySQL 数据库连接,以提高数据库操作的性能和效率。连接池可以减少数据库连接的开销,提高数据库操作的速度和效率。 jsp 页面的编码 在该示例中,jsp 页面使用 UTF-...

    基于jsp的多用户博客个人网站源码.zip

    优化系统性能:通过对系统源码进行分析和优化,可以提高系统的运行效率和响应速度,满足高性能应用的需求。 提高代码质量:合理的系统源码设计可以降低代码的复杂度,提高代码的可读性和可维护性,减少潜在的错误和...

    基于JSP的青年创业管理系统的设计与分析样本.doc

    基于JSP的青年创业管理系统的设计与分析旨在解决这些问题,提高青年创业者的竞争力。 知识点7:系统开发意义 系统开发意义是指基于JSP的青年创业管理系统的开发对青年创业者的影响和作用。该系统的开发可以帮助...

Global site tag (gtag.js) - Google Analytics