仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 471|回复: 9
打印 上一主题 下一主题

[学习教程] JAVA编程:提拔JSP使用程序的七年夜尽招

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:25:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。js|程序你经常被客户埋怨JSP页面呼应速率很慢吗?你想过当客户会见次数剧增时,你的WEB使用能接受日趋增添的会见量吗?本文报告了调剂JSP和servlet的一些十分有用的办法,它可以使你的servlet和JSP页面呼应更快,扩大性更强。并且在用户数增添的情形下,体系负载会出现出光滑上长的趋向。在本文中,我将经由过程一些实践例子和设置办法使得你的使用程序的功能有出人意表的提拔。个中,某些调优手艺是在你的编程事情中完成的。而另外一些手艺是与使用服务器的设置相干的。在本文中,我们将具体地形貌如何经由过程调剂servlet和JSP页面,来进步你的使用程序的整体功能。在浏览本文之前,假定你有基础的servlet和JSP的常识。

 办法一:在servlet的init()办法中缓存数据

 当使用服务器初始化servlet实例以后,为客户端哀求供应服务之前,它会挪用这个servlet的init()办法。在一个servlet的性命周期中,init()办法只会被挪用一次。经由过程在init()办法中缓存一些静态的数据或完成一些只必要实行一次的、耗时的操纵,便可年夜年夜地进步体系功能。

 比方,经由过程在init()办法中创建一个JDBC毗连池是一个最好例子,假定我们是用jdbc2.0的DataSource接口来获得数据库毗连,在一般的情形下,我们必要经由过程JNDI来获得详细的数据源。我们能够设想在一个详细的使用中,假如每次SQL哀求都要实行一次JNDI查询的话,那体系功能将会急剧下落。办理办法是以下代码,它经由过程缓存DataSource,使得下一次SQL挪用时仍旧能够持续使用它:

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主动重载(auto-reloading)

 Servlet/JSP供应了一个有用的手艺,即主动重载手艺,它为开辟职员供应了一个好的开辟情况,当你改动servlet和JSP页面后而不用重启使用服务器。但是,这类手艺在产物运转阶段对体系的资本是一个极年夜的消耗,由于它会给JSP引擎的类装载器(classloader)带来极年夜的包袱。因而封闭主动重载功效对体系功能的提拔是一个极年夜的匡助。

 办法3:不要滥用HttpSession

 在良多使用中,我们的程序必要坚持客户真个形态,以便页面之间能够互相接洽。但不幸的是因为HTTP具有生成无形态性,从而没法保留客户真个形态。因而一样平常的使用服务器都供应了session来保留客户的形态。在JSP使用服务器中,是经由过程HttpSession对像来完成session的功效的,但在便利的同时,它也给体系带来了不小的包袱。由于每当你取得或更新session时,体系者要对它举行费时的序列化操纵。你能够经由过程对HttpSession的以下几种处置体例来提拔体系的功能:

  ・假如没有需要,就应当封闭JSP页面中对HttpSession的缺省设置:假如你没有明白指定的话,每一个JSP页面城市缺省地创立一个HttpSession。假如你的JSP中不必要利用session的话,那能够经由过程以下的JSP页面唆使符来克制它:

<%@pagesession="false"%>

  ・不要在HttpSession中寄存年夜的数据对像:假如你在HttpSession中寄存年夜的数据对像的话,每当对它举行读写时,使用服务器都将对其举行序列化,从而增添了体系的分外包袱。你在HttpSession中寄存的数据对像越年夜,那体系的功能就下落得越快。

  ・当你不必要HttpSession时,尽快地开释它:当你不再必要session时,你能够经由过程挪用HttpSession.invalidate()办法来开释它。

  ・只管将session的超不时间设得短一点:在JSP使用服务器中,有一个缺省的session的超不时间。当客户在这个工夫以后没有举行任何操纵的话,体系会将相干的session主动从内存中开释。超不时间设得越年夜,体系的功能就会越低,因而最好的办法就是只管使得它的值坚持在一个较低的程度。
 办法4:将页面输入举行紧缩

 紧缩是办理数据冗余的一个好的办法,出格是在收集带宽不敷兴旺的明天。有的扫瞄器撑持gzip(GNUzip)举行来对HTML文件举行紧缩,这类办法能够戏剧性地削减HTML文件的下载工夫。因而,假如你将servlet或JSP页面熟成的HTML页面举行紧缩的话,那用户就会以为页面扫瞄速率会十分快。但不幸的是,不是一切的扫瞄器都撑持gzip紧缩,但你能够经由过程在你的程序中反省客户的扫瞄器是不是撑持它。上面就是关于这类办法完成的一个代码片断:


publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException,ServletException
{
 OutputStreamout=null
 Stringencoding=request.getHeader("Accept-Encoding");
 if(encoding!=null&&encoding.indexOf("gzip")!=-1)
 {
  request.setHeader("Content-Encoding","gzip");
  out=newGZIPOutputStream(request.getOutputStream());
 }
 elseif(encoding!=null&&encoding.indexOf("compress")!=-1)
 {
  request.setHeader("Content-Encoding","compress");
  out=newZIPOutputStream(request.getOutputStream());
 }
 else
 {
  out=request.getOutputStream();
 }
 ...
 ...
}

 办法5:利用线程池

 使用服务器缺省地为每一个分歧的客户端哀求创立一个线程举行处置,并为它们分拨service()办法,当service()办法挪用完成后,与之响应的线程也随之取消。因为创立和取消线程会泯灭必定的体系资本,这类缺省形式下降了体系的功能。但所幸的是我们能够经由过程创立一个线程池来改动这类情况。别的,我们还要为这个线程池设置一个最小线程数和一个最年夜线程数。在使用服务器启动时,它会创立数目即是最小线程数的一个线程池,当客户有哀求时,响应地从池从掏出一个线程来举行处置,当处置完成后,再将线程从头放进到池中。假如池中的线程不敷地话,体系会主动地增添池中线程的数目,但总量不克不及凌驾最年夜线程数。经由过程利用线程池,当客户端哀求急剧增添时,体系的负载就会出现的光滑的上升曲线,从而进步的体系的可伸缩性。

 办法6:选择准确的页面包括机制

 在JSP中有两种办法能够用来包括另外一个页面:1、利用include唆使符(<%@includeefile=”test.jsp”%>)。2、利用jsp唆使符(<jsp:includeepage=”test.jsp”flush=”true”/>)。在实践中我发明,假如利用第一种办法的话,可使得体系功能更高。

 办法7:准确地断定javabean的性命周期

 JSP的一个壮大的中央就是对javabean的撑持。经由过程在JSP页面中利用<jsp:useBean>标签,能够将javabean间接拔出到一个JSP页面中。它的利用办法以下:

<jsp:useBeanid="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的任务停止后尽快地清算它们,会利用体系功能有一个进步。

 别的一些有效的办法

  ・在字符串联接操纵中只管不利用“+”操纵符:在java编程中,我们经常利用“+”操纵符来将几个字符串联接起来,但你也许历来没有想到过它竟然会对体系功能形成影响吧?因为字符串是常量,因而JVM会发生一些一时的对像。你利用的“+”越多,天生的一时对像就越多,如许也会给体系功能带来一些影响。办理的办法是用StringBuffer对像来取代“+”操纵符。

  ・制止利用System.out.println()办法:因为System.out.println()是一种同步伐用,即在挪用它时,磁盘I/O操纵必需守候它的完成,因而我们要只管制止对它的挪用。但我们在调试程序时它又是一个必不成少的便利工具,为懂得决这个冲突,我倡议你最好利用Log4j工具(http://Jakarta.apache.org),它既能够便利调试,而不会发生System.out.println()如许的办法。

  ・ServletOutputStream与PrintWriter的衡量:利用PrintWriter大概会带来一些小的开支,由于它将一切的原始输入都转换为字符流来输入,因而假如利用它来作为页面输入的话,体系要包袱一个转换历程。而利用ServletOutputStream作为页面输入的话就不存在一个成绩,但它是以二进制举行输入的。因而在实践使用中要衡量二者的利害。

 总结

 本文的目标是经由过程对servlet和JSP的一些调优手艺来极年夜地进步你的使用程序的功能,并因而提拔全部J2EE使用的功能。经由过程这些调优手艺,你能够发明实在并非某种手艺平台(好比J2EE和.NET之争)决意了你的使用程序的功能,主要是你要对这类平台有一个较为深切的懂得,如许你才干从基本上对本人的使用程序做一个优化!
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊
若天明 该用户已被删除
沙发
 楼主| 发表于 2015-1-21 06:01:41 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
兰色精灵 该用户已被删除
板凳
发表于 2015-2-5 03:46:28 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
乐观 该用户已被删除
地板
发表于 2015-2-7 03:55:39 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
5#
发表于 2015-2-8 07:58:46 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
因胸联盟 该用户已被删除
6#
发表于 2015-2-12 18:56:56 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
精灵巫婆 该用户已被删除
7#
发表于 2015-3-3 04:18:58 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-11 09:10:26 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
海妖 该用户已被删除
9#
发表于 2015-3-18 02:17:21 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
再现理想 该用户已被删除
10#
发表于 2015-3-25 09:20:23 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表