2015-07-10 47 views
0

我正在尝试改进Web应用程序的性能。现在,浏览器加载Web表单需要大约3-5秒,但有时会在3到20秒之间变化。一旦将Request分派给特定的JSP,我想要细分组件花费的时间。这样我就可以分析它的web表单问题或服务器配置问题,并据此采取纠正性的专业。将请求分派给JSP后台会发生什么情况

我的理解是,JSPs在服务器上首次访问时被编译为类文件,并在随后的请求中使用。

将请求分派给JSP时,服务器端会发生什么?有关硬件配置的任何指导可能有助于性能改进?

回答

1

一旦将请求分派给JSP,后端会发生什么?

JSP页面服务请求作为servlet。因此,生命周期和JSP页面的许多功能(特别是动态的 方面)由Java Servlet技术决定。

当请求被映射到JSP页面时,Web容器首先检查 JSP页面的servlet是否比JSP页面更早。如果 servlet较旧,则Web容器将JSP页面转换为一个 servlet类并编译该类。在开发过程中,JSP页面优于Servlet的其中一个优点是构建过程自动执行为 。

翻译和编译

在翻译阶段在JSP页面中的每个数据类型是 区别对待。静态数据被转换成代码,将 发送到响应流的数据。 JSP元素被视为 如下:

  • 指令用于控制Web容器如何转换和执行JSP页面。
  • 将脚本元素插入到JSP页面的servlet类中。表达式语言表达式作为参数传递给调用JSP表达式求值器的 。
  • jsp:[set|get]Property元素被转换成JavaBeans组件的方法调用。
  • jsp:[include|forward]元素被转换为Java Servlet API的调用。
  • jsp:plugin元素转换为用于激活小应用程序的特定于浏览器的标记。
  • 自定义标签被转换为对实现自定义标签的标签处理程序的调用。在Application Server中, 的源代码从名为pageName的JSP页面创建的servlet位于此文件中: domain-dir/generated/jsp/j2ee-modules/WAR-NAME/pageName_jsp.java

例如,索引页的来源(名为index。JSP)在本章 开头讨论的 日期本地化例如将被命名为:

domain-dir/generated/jsp/j2ee-modules/date/index_jsp.java 

无论是翻译和编译阶段可以产生的误差只有当请求第一个页面 观察时间。如果在任一阶段遇到 错误,服务器将返回 JasperException以及包含JSP页面名称和发生错误的行的消息。

的页面已经被翻译和编译后,JSP页面的 的servlet(大部分)遵循servlet的生命周期Servlet的生命周期描述 :

1. If an instance of the JSP page’s servlet does not exist, the container: 
    a. Loads the JSP page’s servlet class 
    b. Instantiates an instance of the servlet class 
    c. Initializes the servlet instance by calling the jspInit method 
2. The container invokes the `_jspService` method, passing request and response objects. If the container needs to remove the JSP page’s 

的servlet,它调用jspDestroy方法。

执行中

可以使用页面 指令控制各种JSP页面的执行参数。这里讨论有关缓冲输出和处理错误的指令。其他指令在本章中的特定页面创作任务的上下文中涵盖在 中。

BUFFERING

当执行JSP页,写入到响应对象输出 自动缓冲。您可以使用 以下页面指令设置缓冲区的大小:

<%@ page buffer="none|xxxkb" %> 

缓冲区越大,允许更多的内容,任何事情之前要写入 实际发送回客户端,从而提供JSP页面 更多时间来设置适当的状态代码和标题或转发到另一个网络资源 。较小的缓冲区减少了服务器内存负载,并允许客户端更快地开始接收数据。

硫磷JSP PAGE ERRORS

执行JSP页面时可出现任意数量的异常。要 规定,如果发生异常的Web容器应转发控制 一个错误页面,包括在 开始你的JSP页面的下面的page指令:

<%@ page errorPage="file-name" %> 

more

有关硬件配置的任何指导可能有助于性能改进?

购买更多内存和更昂贵的芯片,使用SSD硬盘,CDN(内容交付网络)等。

你不问如何通过编程的方式来优化性能。 Althought,我觉得这是link对你有帮助。

0

JSP被翻译成servlet类和在运行时编译或上部署或包装预编译(取决于应用服务器等上)。

取决于你的应用程序/ Web服务器可能必须提供给找出的servlet/JSP花费的时间访问日志或一些其他指标上。不太聪明,但通用的解决方案是使用servlet过滤器来捕获在servlet中花费的时间。

,如果它看起来可以接受的话,很有可能你有一个生成的HTML页面的渲染问题。在这个阶段,你需要浏览器级开发工具,看看发生了什么事情(开发者控制台中铬,萤火虫等)。

相关问题