 UID: 11479
 恋人
 精华: 4
 积分: 39553
 帖子: 3753
 威望: 3283
 金钱: 37911 D币
 宣传币: 0 X币
 踢楼币: 0 T
 经验: 16级
 阅读权限: 70
 注册: 2007-12-25

状态:
|
|
2楼
大 中
小 发表于 2008-5-12 06:51 只看该作者
方法 3: 不要滥用HttpSession
8 U$ r$ s5 m8 b5 g( o, mwww.520diannao.com我爱电脑技术论坛% y8 Z$ t3 w9 P9 U' t H! @
www.520diannao.com% Z9 B, F# {" a; K
在很多应用中,我们的程序需要保持客户端的状态,以便页面之间可以相互联系。但不幸的是由于HTTP具有天生无状态性,从而无法保存客户端的状态。因此一般的应用服务器都提供了session来保存客户的状态。在JSP应用服务器中,是通过HttpSession对像来实现session的功能的,但在方便的同时,它也给系统带来了不小的负担。因为每当你获得或更新session时,系统者要对它进行费时的序列化操作。你可以通过对HttpSession的以下几种处理方式来提升系统的性能:
4 h, [& J# ^, x- j* ^/ K电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
( J" s. I% v1 b) gwww.520diannao.com
" p7 E/ s3 [7 V7 w$ {电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站如果没有必要,就应该关闭JSP页面中对HttpSession的缺省设置: 如果你没有明确指定的话,每个JSP页面都会缺省地创建一个HttpSession。如果你的JSP中不需要使用session的话,那可以通过如下的JSP页面指示符来禁止它:
+ J1 `8 H) j" e; p1 ?
+ s8 X6 z6 J6 M! O- Y我爱电脑技术社区--打造最好的电脑技术自学交流平台
6 F; d5 D" K+ R) w6 D5 q7 f电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站<%@ page session="false"%>
- K5 b" {! F1 r( V7 hwww.520diannao.com
[( M' ^, y- q' ^% ]! ?; w" L
m2 F) {, a( L/ F7 C我爱电脑技术论坛不要在HttpSession中存放大的数据对像:如果你在HttpSession中存放大的数据对像的话,每当对它进行读写时,应用服务器都将对其进行序列化,从而增加了系统的额外负担。你在HttpSession中存放的数据对像越大,那系统的性能就下降得越快。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站' ]+ c: U3 ?# [+ j! S O7 ?/ h
打造最好的电脑自学交流论坛5 u4 x4 O% ~- t2 O. o$ R/ k. Z
我爱电脑技术论坛* y! K" x1 P5 E# v
当你不需要HttpSession时,尽快地释放它:当你不再需要session时,你可以通过调用HttpSession.invalidate()方法来释放它。 www.520diannao.com# R Q" Z# k0 ^
我爱电脑技术论坛* Y1 I) U/ k3 a4 m) u6 S! W
/ h# e1 h( m3 N+ d# h尽量将session的超时时间设得短一点:在JSP应用服务器中,有一个缺省的session的超时时间。当客户在这个时间之后没有进行任何操作的话,系统会将相关的session自动从内存中释放。超时时间设得越大,系统的性能就会越低,因此最好的方法就是尽量使得它的值保持在一个较低的水平。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站! f" r+ F: y/ ?# w
/ ^4 W$ z& n+ m; p电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
' ]# a% z% B% {www.520diannao.com 方法 4: 将页面输出进行压缩
( Q- U5 h2 k t+ ]我爱电脑技术社区--打造最好的电脑技术自学交流平台
# |0 s- z# M! z) ?: o5 c4 m( M: c打造最好的电脑自学交流论坛打造最好的电脑自学交流论坛; D0 i9 s/ m6 \) |; q( Q! i
压缩是解决数据冗余的一个好的方法,特别是在网络带宽不够发达的今天。有的浏览器支持gzip(GNU zip)进行来对HTML文件进行压缩,这种方法可以戏剧性地减少HTML文件的下载时间。因此,如果你将servlet或JSP页面生成的HTML页面进行压缩的话,那用户就会觉得页面浏览速度会非常快。但不幸的是,不是所有的浏览器都支持gzip压缩,但你可以通过在你的程序中检查客户的浏览器是否支持它。下面就是关于这种方法实现的一个代码片段: 4 {& j, C1 c# S0 G9 u; i
5 L3 ^% ~+ q4 D/ {; E% }0 x: |9 m
5 ?' K5 m3 z6 V. E$ X) K
public void doGet(HttpServletRequest request, HttpServletResponse response) 我爱电脑技术论坛% ~2 v& i% D6 p3 `" V6 ]
9 q, x( ~1 G3 [7 [3 M# j5 vthrows IOException, ServletException % n7 {* ?, `( Z. H
- ^$ c# o% n( V# N/ o
{
- U' N5 W- v) q+ D5 d打造最好的电脑自学交流论坛
: I% A0 @ u2 L# I. O( W7 K9 I: k我爱电脑技术论坛 OutputStream out = null www.520diannao.com# C4 C+ i; c L3 {) i2 y
/ p w9 Z* D' R- X
String encoding = request.getHeader("Accept-Encoding");
$ B% M: [3 I: Q' S) N! r9 d2 z打造最好的电脑自学交流论坛
: c, Y* }6 I- s! k/ s电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 if (encoding != null && encoding.indexOf("gzip") != -1)
$ U4 S* G( ~( I电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站打造最好的电脑自学交流论坛( R" m% E2 t0 K$ @. w
{ 我爱电脑技术论坛6 O) w4 d5 K O1 i" v, \
8 r/ G" G5 G* j; N+ N* h! z& a我爱电脑技术社区--打造最好的电脑技术自学交流平台request.setHeader("Content-Encoding" , "gzip");
7 X; r8 F; M0 h7 |# l& I电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站打造最好的电脑自学交流论坛0 W; p" {. k+ ]2 q) s) z' |7 o0 [
out = new GZIPOutputStream(request.getOutputStream());
, [% n g% w8 @4 r: ?9 T& z打造最好的电脑自学交流论坛
3 i6 v0 |: D! P( ~9 j } 打造最好的电脑自学交流论坛% I( f' R- {( l* z3 R
% q T3 ]$ B/ d& K% z! @www.520diannao.com else if (encoding != null && encoding.indexOf("compress") != -1)
r6 w, E" {2 f& P/ F: D# Ywww.520diannao.com
5 `/ Q7 v! `) V" q5 `1 lwww.520diannao.com { 我爱电脑技术论坛# q$ s. z; Q9 o2 h6 e5 U3 U
8 r9 u$ ?& A5 A/ o我爱电脑技术论坛request.setHeader("Content-Encoding" , "compress"); www.520diannao.com3 Q/ N7 |' }1 Z# ]
我爱电脑技术论坛# W5 M! N, v a+ [* A6 ^2 Z
out = new ZIPOutputStream(request.getOutputStream());
; K5 c0 S: l: D% _, p) Z* I) M我爱电脑技术社区--打造最好的电脑技术自学交流平台
( O- i2 J' e4 G9 q9 I我爱电脑技术论坛 } 我爱电脑技术社区--打造最好的电脑技术自学交流平台 C0 @1 e- \; V$ L1 O+ c4 i+ Y
- Q' A$ f3 @% c1 A else
. h1 u) n; K" F$ m$ j: L. L, a我爱电脑技术论坛
$ r* u( L- ]8 G我爱电脑技术社区--打造最好的电脑技术自学交流平台 {
) O9 \% ?* n' k1 X, a6 |( a电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术论坛6 }& C, j8 T |& H+ @
out = request.getOutputStream(); 打造最好的电脑自学交流论坛- a1 z% d8 V6 X8 F: J$ c; j. B0 U
2 F' v2 k; A: `/ f/ [www.520diannao.com } 打造最好的电脑自学交流论坛! K; U h- q; z
/ c/ u5 _( W' w5 |: e0 ^: M. L电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 ... 我爱电脑技术社区--打造最好的电脑技术自学交流平台. @6 }0 ? b9 h/ u {
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站& I6 H" D) W6 e1 m4 Q g7 w3 ]; j
... 0 \: ~& X5 ?" j }4 _* ?1 z3 m
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站" L$ Q4 i. ?/ K4 m* {
} 打造最好的电脑自学交流论坛. Z, k6 W2 c, R9 O6 U5 `
. B7 Y; j) d7 m) d4 Z$ T0 o' ?打造最好的电脑自学交流论坛
% i! X& \9 ^- |0 V打造最好的电脑自学交流论坛方法 5: 使用线程池
: Y \. S" i2 E! V z电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站5 r' R; `8 h s% `
我爱电脑技术社区--打造最好的电脑技术自学交流平台2 V( [3 Z: l7 E
应用服务器缺省地为每个不同的客户端请求创建一个线程进行处理,并为它们分派service()方法,当service()方法调用完成后,与之相应的线程也随之撤消。由于创建和撤消线程会耗费一定的系统资源,这种缺省模式降低了系统的性能。但所幸的是我们可以通过创建一个线程池来改变这种状况。另外,我们还要为这个线程池设置一个最小线程数和一个最大线程数。在应用服务器启动时,它会创建数量等于最小线程数的一个线程池,当客户有请求时,相应地从池从取出一个线程来进行处理,当处理完成后,再将线程重新放入到池中。如果池中的线程不够地话,系统会自动地增加池中线程的数量,但总量不能超过最大线程数。通过使用线程池,当客户端请求急剧增加时,系统的负载就会呈现的平滑的上升曲线,从而提高的系统的可伸缩性。 我爱电脑技术论坛9 n. [2 w5 F& \4 ]" I- X2 h
* @% I5 k! N0 z1 L我爱电脑技术论坛
1 e0 j( e* L# O0 f5 d打造最好的电脑自学交流论坛方法 6: 选择正确的页面包含机制 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站" O8 ?/ I5 l4 I6 }- w; _
打造最好的电脑自学交流论坛) V' w' R/ Q. n9 |6 |7 h* Y) N
" V! d( q$ i& e6 M. [
在JSP中有两种方法可以用来包含另一个页面:1、使用include指示符(<%@ includee file=”test.jsp” %>)。2、使用jsp指示符(<jsp:includee page=”test.jsp” flush=”true”/>)。在实际中我发现,如果使用第一种方法的话,可以使得系统性能更高。 www.520diannao.com2 W( C5 P* b1 E, r; T8 Q2 K- Q8 n
: N0 O/ @ }( b% r1 C$ X5 D Zwww.520diannao.com我爱电脑技术论坛2 y5 J" w) x( ~) `2 [. Y" M
方法 7:正确地确定javabean的生命周期 我爱电脑技术社区--打造最好的电脑技术自学交流平台5 ]" r9 P- b& q0 m6 P
打造最好的电脑自学交流论坛, w P6 C2 t2 {/ k9 \
$ n6 w0 } V+ k1 `JSP的一个强大的地方就是对javabean的支持。通过在JSP页面中使用<jsp:useBean>标签,可以将javabean直接插入到一个JSP页面中。它的使用方法如下:
3 a4 x/ C6 T! _6 d9 Q: cwww.520diannao.com我爱电脑技术社区--打造最好的电脑技术自学交流平台" Z. l5 e$ X- S( |- q. T
我爱电脑技术社区--打造最好的电脑技术自学交流平台% P6 g& I, F$ o/ S! e7 F+ o8 E
<jsp:useBean id="name" scope="page|request|session|application" class= 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站3 j) Z, S( ?/ b t
/ G) ?% Y. A7 g2 t. P打造最好的电脑自学交流论坛"package.className" type="typeName"> 我爱电脑技术社区--打造最好的电脑技术自学交流平台; Y ^% F) e4 ?: B0 m
打造最好的电脑自学交流论坛5 o t6 k$ g+ h/ ~( G+ m0 q+ k
</jsp:useBean>
: x+ w' `3 o# b1 Z我爱电脑技术社区--打造最好的电脑技术自学交流平台
2 ~% x: P- }& i! @$ |% d7 v电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
$ V5 r6 F- V2 k T- W其中scope属性指出了这个bean的生命周期。缺省的生命周期为page。如果你没有正确地选择bean的生命周期的话,它将影响系统的性能。 " I( H8 j/ _3 f# Q" `
我爱电脑技术社区--打造最好的电脑技术自学交流平台* H9 p% x4 `% Y( s+ @* k
- ^& {; E b2 p1 R+ o* b" j2 [+ z我爱电脑技术论坛举例来说,如果你只想在一次请求中使用某个bean,但你却将这个bean的生命周期设置成了session,那当这次请求结束后,这个bean将仍然保留在内存中,除非session超时或用户关闭浏览器。这样会耗费一定的内存,并无谓的增加了JVM垃圾收集器的工作量。因此为bean设置正确的生命周期,并在bean的使命结束后尽快地清理它们,会使用系统性能有一个提高。
' O( m; v$ S- f我爱电脑技术论坛打造最好的电脑自学交流论坛+ ]$ Z) u7 }# S% D) U1 S, ~
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站' o5 T8 X/ s: V) F0 D( K0 H$ [
其它一些有用的方法 我爱电脑技术论坛( {7 }. s, c$ K6 D% q Y
. A/ Z) ^, B F# l0 nwww.520diannao.com
& M* a* g2 K" R( w$ V电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站在字符串连接操作中尽量不使用“+”操作符:在java编程中,我们常常使用“+”操作符来将几个字符串连接起来,但你或许从来没有想到过它居然会对系统性能造成影响吧?由于字符串是常量,因此JVM会产生一些临时的对像。你使用的“+”越多,生成的临时对像就越多,这样也会给系统性能带来一些影响。解决的方法是用StringBuffer对像来代替“+”操作符。
% `- p( B% m1 t+ D8 C- v) E
. W' _# Q: K5 j+ a9 j我爱电脑技术论坛
/ c# C0 r1 x4 N% F7 D' {0 p: v5 e电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站避免使用System.out.println()方法:由于System.out.println()是一种同步调用,即在调用它时,磁盘I/O操作必须等待它的完成,因此我们要尽量避免对它的调用。但我们在调试程序时它又是一个必不可少的方便工具,为了解决这个矛盾,我建议你最好使用Log4j工具( http://Jakarta.apache.org ),它既可以方便调试,而不会产生System.out.println()这样的方法。
* |7 B! M9 p& v3 p9 D; q9 g2 Kwww.520diannao.com
6 |/ f0 |* a& L+ ^* x3 B打造最好的电脑自学交流论坛
4 q9 K1 r/ K2 G8 O/ k& s- X( iwww.520diannao.comServletOutputStream 与 PrintWriter的权衡:使用PrintWriter可能会带来一些小的开销,因为它将所有的原始输出都转换为字符流来输出,因此如果使用它来作为页面输出的话,系统要负担一个转换过程。而使用ServletOutputStream作为页面输出的话就不存在一个问题,但它是以二进制进行输出的。因此在实际应用中要权衡两者的利弊。 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站6 t @* Y+ r+ \+ d [
7 M" t5 p2 H* M Jwww.520diannao.com
( q- g8 e" {$ e- _& V打造最好的电脑自学交流论坛总结
, S4 u- o) N A. T( ~www.520diannao.com
6 P! W: C: ]% q6 ], h* U6 F电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站我爱电脑技术社区--打造最好的电脑技术自学交流平台8 W8 o( b0 y' _$ F/ }5 r; @
本文的目的是通过对servlet和JSP的一些调优技术来极大地提高你的应用程序的性能,并因此提升整个J2EE应用的性能。通过这些调优技术,你可以发现其实并不是某种技术平台(比如J2EE和.NET之争)决定了你的应用程序的性能,重要是你要对这种平台有一个较为深入的了解,这样你才能从根本上对自己的应用程序做一个优化!
|