仓酷云

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

[学习教程] JAVA网站制作之编程心得:提拔JSP使用程序的7年夜尽招

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

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

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

x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开js|编程|程序|心得<P>你经常被客户埋怨JSP页面呼应速率很慢吗?你想过当客户会见次数剧增时,你的WEB使用能接受日趋增添的会见量吗?本文报告了调剂JSP和servlet的一些十分有用的办法,它可以使你的servlet和JSP页面呼应更快,扩大性更强。并且在用户数增添的情形下,体系负载会出现出光滑上长的趋向。在本文中,我将经由过程一些实践例子和设置办法使得你的使用程序的功能有出人意表的提拔。个中,某些调优手艺是在你的编程事情中完成的。而另外一些手艺是与使用服务器的设置相干的。在本文中,我们将具体地形貌如何经由过程调剂servlet和JSP页面,来进步你的使用程序的整体功能。在浏览本文之前,假定你有基础的servlet和JSP的常识。

  办法1:在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主动从内存中开释。超不时间设得越年夜,体系的功能就会越低,因而最好的办法就是只管使得它的值坚持在一个较低的程度。
<P>办法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之争)决意了你的使用程序的功能,主要是你要对这类平台有一个较为深切的懂得,如许你才干从基本上对本人的使用程序做一个优化!
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发
山那边是海 该用户已被删除
沙发
发表于 2015-1-20 18:16:41 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
活着的死人 该用户已被删除
板凳
发表于 2015-1-28 23:27:57 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-1 16:09:01 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
只想知道 该用户已被删除
5#
发表于 2015-2-5 04:02:02 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
柔情似水 该用户已被删除
6#
发表于 2015-2-5 22:37:11 | 只看该作者
是一种使用者不需花费很多时间学习的语言
因胸联盟 该用户已被删除
7#
发表于 2015-2-8 11:58:24 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-2-22 23:31:51 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
老尸 该用户已被删除
9#
发表于 2015-3-1 10:25:21 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
若天明 该用户已被删除
10#
发表于 2015-3-7 15:17:16 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
小妖女 该用户已被删除
11#
发表于 2015-3-10 17:54:08 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
小女巫 该用户已被删除
12#
发表于 2015-3-11 11:02:35 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
飘飘悠悠 该用户已被删除
13#
发表于 2015-3-18 07:20:07 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
分手快乐 该用户已被删除
14#
发表于 2015-3-25 13:00:25 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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