一旦将Request调度到JSP,后端会发生什么

时间:2015-07-10 23:45:41

标签: java jsp tomcat internet-explorer-8

我正在努力提高Web应用程序的性能。现在,在浏览器上加载Web表单大约需要3-5秒,但有时会在3-20秒之间变化。一旦将Request分派给特定的JSP,我想分解组件所花费的时间。这样我就可以分析它的Web表单问题或服务器配置问题,并相应地采取纠正措施。

我的理解是JSP在第一次在服务器上访问时被编译成类文件,并在后续请求中使用。

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

2 个答案:

答案 0 :(得分:1)

将Request分派给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方法。

     

<强> EXECUTION

     

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

     

<强> BUFFERING

     

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

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

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

     

处理JSP页面错误

     

执行JSP页面时可能会出现任意数量的异常。至   指定Web容器应将控制转发到错误页面   如果发生异常,请在该处包含以下页面指令   JSP页面的开头:

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

阅读more

有关可能有助于提升绩效的硬件配置的任何指导?

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

您不会问如何通过编程方式调整性能。尽管如此,我认为link对你有帮助。

答案 1 :(得分:0)

JSP被转换为servlet类并在运行时编译或在部署或打包时预编译(取决于app服务器等)。

取决于你的app / web服务器,你可能有访问日志或其他一些可用的指标来查找servlet / jsp的时间花费。不太聪明但通用的解决方案是使用servlet过滤器来捕获在servlet中花费的时间。

如果它看起来可以接受,那么很可能你生成的html页面渲染有问题。在这个阶段,您需要使用浏览器级开发工具来查看正在进行的操作(chrome,firebug等开发控制台)。