曾起何时,你的web项目运行是不是很慢、很卡?在大量并发访问的情况下是否能够不down掉?这里主要围绕jsp、servlet的性能与弹性来进行分析。主要意图是能够让web项目尽快的响应,并且满足大量并发用户的访问请求。
6 t. u0 K- m1 m 要点1:HttpServlet init()的初始化方法中缓存一定量的数据
# @' ~$ K; {7 a web服务器在创建servlet实例之后和servlet处理所有的请求之前调用servlet中的init()方法进行初始化。Init()方法在servlet的整个生命周期中会调用一次,且仅调用一次。为了大大提高servlet的性能,在init()方法中中缓存一部分静态数据或者加入要在初始化期间需要完成的长时间和高性能的操作。For example,最佳案例就是使用实现了javax.sql.DataSource接口的JDBC的连接池的样例。DataSource从JNDI中获得连接。每次仅仅调用一次SQL语句就要使用JNDI查找DataSource是很消耗负载的工作,而且严重的影响了web项目的性能。因此,采用Servlet的init()方法就可以用于获得DataSource的数据并将他缓存起来便稍后的重复使用:
, W4 \; `" D0 ~1 b6 d# H" W: z; [ ' n. k( i: x9 z" ]4 `7 B
以下就是样例的片段:3 n6 G7 V( K3 E [: Q
public class ControllerServlet extends HttpServlet
4 @/ F5 W% G8 w5 ]; N5 G( d( J {
_( S+ [1 w* }8 |4 A/ Z private javax.sql.DataSource testDS = null;. ?6 N* q7 F8 Z! R
public void init(ServletConfig config) throws ServletException3 k% M. j0 f" s5 E
{
( E& }3 s: f S- v% |, |3 K% ?, y super.init(config);, X) U" T4 a( W" G, y
Context ctx = null;
8 i+ O+ ~3 y4 i! R try
; q$ \' H- |1 I( T {
: `; K$ K6 j1 @ ctx = new InitialContext();
9 Q. H' b; o' y4 @ testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");. L5 O% s, J2 M/ S$ S U! A
}
: j; e$ Z" r! y" o catch(NamingException ne)7 z& `5 Q$ _7 M6 o% m* D2 \4 c& ]
{- c- C) i4 R2 G6 F' w Y( ~
ne.printStackTrace();
0 s* |& T& @. K( a* a3 O }
' y$ a) b9 E( ?% |( q* [ catch(Exception e); a* C! o0 c/ l/ a1 d
{6 M; g4 H* Y# i- o4 f) p3 ?
e.printStackTrace();
( |8 s3 P& {3 d8 z1 O/ h }
& V" \; _. [: n }2 a4 B/ {( u. t' Q
public javax.sql.DataSource getTestDS()
# N, A$ t- I$ v( r {! v! p& @% f+ t- g' ~
return testDS;
# W+ N( X' j' ]& v6 X) |4 o }
/ V9 G- M- y Q/ J$ V % ^# [$ B; L+ J" X U4 _0 M8 w
} |
; z0 }% x0 M. Z5 o# l( L
要点2:禁用掉servlet与Jsp自动装载(自动装配)等影响性能的功能! R1 M( J ]$ u; S* D! a/ q/ b' A
每当修改了Servlet或JSP之后,你都要重新启动你的服务器tomcat、weblogic...因为自动装载功能可以为我们减少开发所需要的时间,说以此功能在开发过程中是非常重要的。但是,他的运行过程却是非常的消耗资源的;servlet或JSP由于诸多的不必要装载程序,大大加剧了类装载器的负载从而使性能变得很差。与此同时这也会使你的web应用服务由于已被各种的类装载器装载的类不能够和目前的类装载器装载的类不能够相互的协作而呈现出各种的异常的现象。所以,在应用运行时为了得到更佳的性能与弹性,关闭servlet和JSP的自动装载功能是很有必要的,它能够带给你更好的体验。
! J w z% ?6 x: V2 f
9 R7 ?* V. Q$ z7 r( q% [3 U0 l |