仓酷云

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

[学习教程] JAVA网站制作之Servlet、Jsp

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

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

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

x
在性能方面,在windows平台下,.net可能是占强项,要是把.net放在sun开发的操作系统上去运行呢?根本就运行不了,.net对其它操作系统的支持也很弱,性能也可能比不上java。js|servlet你的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读取。你能够经由过程利用上面的手艺来进步功能:

在JSP页面中不要创立默许的HttpSession:默许情形下,JSP页面创立HttpSession。假如你在JSP页面中不必HttpSession,为了节俭功能开支,利用下边的页面指令能够制止主动创立HttpSession对象:


不要将年夜的对象图存储在HttpSession中:假如你将数据看成一个年夜的对象图存储在HttpSession中,使用服务器每次将不能不处置全部HttpSession对象。这将迫使Java序列化和增添盘算开支。因为序列化的开支,跟着存储在HttpSession对象中数据对象的增年夜,体系的吞吐量将会下落。

用完后开释HttpSession:当不在利用HttpSession时,利用HttpSession.invalidate()办法使sesion生效。

设置超时价:一个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页面中,有两中体例能够包含文件:包含指令()和包含举措()。包含指令在编译阶段包含一个指定文件的内容;比方,当一个页面编译成一个servlet时。包含举措是指在哀求阶段包含文件内容;比方,当一个用户哀求一个页面时。包含指令要比包含举措快些。因而除非被包含的文件常常变化,不然利用包含指令将会取得更好的功能。

手艺8:在useBean举措中利用符合的局限

利用JSP页面最壮大体例之一是和JavaBean组件协同事情。JavaBean利用标签能够嵌进到JSP页面中。语法以下:

<jsp:useBeanid="name"scope="page|request|session|application"class=
"package.className"type="typeName">
</jsp:useBean>



scope属性申明了bean的可见局限。scope属性的默许值是page。你应当依据你使用的需求选择准确的局限,不然它将影呼应用的功能。

比方,假如你必要一个公用于某些哀求的对象,可是你把局限设置成了session,那末谁人对象将在哀求停止以后还保存在内存中。它将一向保存在内存中除非你明白地把它从内存中删除、使session有效或session超时。假如你没有选择准确的局限属性,因为内存和渣滓搜集的开支将会影响功能。因而为对象设置符合的局限并在用完它们以后当即删除。

杂项手艺

制止字符串联接:因为String对象是不成变对象,利用“+”操纵符将会招致创立大批的零时对象。你利用的“+”越多,产出的零时对象就越多,这将影响功能。当你必要毗连字符串时,利用StringBuffer替换“+”操纵。

制止利用System.out.println:System.out.println同步处置磁盘输出/输入,这年夜年夜地下降了体系吞吐量。尽量地制止利用System.out.println。只管有良多成熟的调试工具能够用,但偶然System.out.println为了跟踪、或调试的情形下仍然很有效。你应当设置System.out.println仅在毛病和调试阶段翻开它。利用finalBoolean型的变量,当设置成false时,在编译阶段完成优化反省和实行跟踪输入。

ServletOutputStream与PrintWriter对照:因为字符输入流和把数据编码成字节,利用PrintWriter引进了小的功能开支。因而,PrintWriter应当用在一切的字符集都准确地转换做完以后。另外一方面,当你晓得你的servlet仅前往二进制数据,利用ServletOutputStream,由于servlet容器不编码二进制数据,如许你就可以打消字符集转换开支。

总结

本文的目标是展现给你一些理论的和已证明的用于进步servlet和JSP功能的功能优化手艺,这些将进步你的J2EE使用的全体功能。下一步应当察看其他相干手艺的功能调剂,如EJB、JMS和JDBC等。
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-21 07:46:05 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
兰色精灵 该用户已被删除
板凳
发表于 2015-1-28 05:39:38 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
只想知道 该用户已被删除
地板
发表于 2015-1-28 17:12:07 | 只看该作者
是一种使用者不需花费很多时间学习的语言
admin 该用户已被删除
5#
发表于 2015-2-5 15:26:40 | 只看该作者
是一种突破用户端机器环境和CPU
再现理想 该用户已被删除
6#
发表于 2015-2-12 13:40:20 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
分手快乐 该用户已被删除
7#
发表于 2015-2-28 22:31:33 | 只看该作者
是一种为 Internet发展的计算机语言
莫相离 该用户已被删除
8#
发表于 2015-3-10 08:58:01 | 只看该作者
是一种为 Internet发展的计算机语言
小妖女 该用户已被删除
9#
发表于 2015-3-17 06:10:10 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
爱飞 该用户已被删除
10#
发表于 2015-3-23 22:37:31 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-16 20:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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