java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3923|回复: 1

性能和弹性双赢的JSP与Servlet优化

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2040

    主题

    3698

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66476

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2014-11-18 15:07:44 | 显示全部楼层 |阅读模式
    曾起何时,你的web项目运行是不是很慢、很卡?在大量并发访问的情况下是否能够不down?这里主要围绕jspservlet的性能与弹性来进行分析。主要意图是能够让web项目尽快的响应,并且满足大量并发用户的访问请求。8 c6 Q' C1 x9 Q. j( e
      要点1HttpServlet init()的初始化方法中缓存一定量的数据  t1 `. `$ f$ t5 s
      web服务器在创建servlet实例之后和servlet处理所有的请求之前调用servlet中的init()方法进行初始化。Init()方法在servlet的整个生命周期中会调用一次,且仅调用一次。为了大大提高servlet的性能,在init()方法中中缓存一部分静态数据或者加入要在初始化期间需要完成的长时间和高性能的操作。For example,最佳案例就是使用实现了javax.sql.DataSource接口的JDBC的连接池的样例。DataSourceJNDI中获得连接。每次仅仅调用一次SQL语句就要使用JNDI查找DataSource是很消耗负载的工作,而且严重的影响了web项目的性能。因此,采用Servletinit()方法就可以用于获得DataSource的数据并将他缓存起来便稍后的重复使用:1 |( ^9 D$ Z4 P9 K& u# J9 k  x
    ! X5 n1 t, \( W- J) e5 v
    以下就是样例的片段:
    $ r1 D( d$ h1 b1 F  public class ControllerServlet extends HttpServlet
    ' b- u6 y6 I$ R! j( T0 t  {
    , y! U- X8 t( C9 k" b1 P  private javax.sql.DataSource testDS = null;
    ! ^5 _, b6 G) {8 A  public void init(ServletConfig config) throws ServletException5 f6 {" ^4 H: X5 C4 J  K
      {0 }6 o# B5 v( I9 _
      super.init(config);
    " W1 r, D0 S. Y/ i" r! Z  Context ctx = null;
    3 @0 D. u9 j$ [; z* o  try
    0 D$ `* v3 T  ], o, u3 P8 p  {; U; U. I+ ?) [: t5 L$ a
      ctx = new InitialContext();
    ' e( K0 H+ P; f. O  testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");6 ~# v% E. b3 y4 V$ e& M! o  T
      }. \4 K" C' ]0 F- m% T! L) v
      catch(NamingException ne)
    6 M0 V( l6 z. W7 |8 U  {
    4 Z# [7 Q$ V' ^* i+ G( B) `2 |  ne.printStackTrace();
    8 r4 ~2 ]8 B7 `# I+ D  H; V  }
      H$ W7 T" M: ~* X  catch(Exception e)
    0 F7 I- K2 T6 A6 l* Z3 x9 o  {
    ) a3 D' z: l* }3 ^+ A5 B2 F  e.printStackTrace();+ ~, r0 T' @! B% M) C
      }; k, B; l% R) B# Z& l
      }- ^/ a/ U' N5 M7 T8 S  a
      public javax.sql.DataSource getTestDS()
    4 m% M- U$ p3 t( P9 u! H  {/ f/ ~6 o; s$ ^! H  s; A, C
      return testDS;
    / h5 R$ G9 H  [: Z. P  }
    $ X1 P; [: Z+ y9 ]! P  
    + g5 h0 a7 O, \4 i! h9 p3 s4 s  }

    ; b: y8 w4 ?& {; g# q; @  要点2:禁用掉servletJsp自动装载(自动装配)等影响性能的功能
    8 O2 q: L- \* c. F9 B8 l  每当修改了ServletJSP之后,你都要重新启动你的服务器tomcatweblogic...因为自动装载功能可以为我们减少开发所需要的时间,说以此功能在开发过程中是非常重要的。但是,他的运行过程却是非常的消耗资源的;servletJSP由于诸多的不必要装载程序,大大加剧了类装载器的负载从而使性能变得很差。与此同时这也会使你的web应用服务由于已被各种的类装载器装载的类不能够和目前的类装载器装载的类不能够相互的协作而呈现出各种的异常的现象。所以,在应用运行时为了得到更佳的性能与弹性,关闭servletJSP的自动装载功能是很有必要的,它能够带给你更好的体验。/ l3 v9 {' L4 V& L
    3 _0 W* F; |3 h0 _7 @
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-20 16:20
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    27

    帖子

    63

    积分

    普通会员

    Rank: 2

    积分
    63
    发表于 2016-11-20 16:25:22 | 显示全部楼层
    不错好资源 可以用
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-1-22 20:54 , Processed in 0.276791 second(s), 29 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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