我正在努力提高web应用程序的性能。目前在浏览器上加载web表单大约需要3-5秒,但有时需要3-20秒。我想要分解组件所用的时间,一旦请求被分派到特定的JSP。这样我就可以分析它的web表单问题或服务器配置问题,并采取相应的纠正专业。
我的理解是,JSP在服务器上第一次被访问时被编译成类文件,并在随后的请求中使用。
当请求被分派到JSP时,服务器端会发生什么?有没有关于硬件配置的指导意见,可以帮助提高性能?
发布于 2015-07-11 08:01:59
一旦请求被分派到JSP,后端会发生什么?
页面将请求作为servlet提供服务。因此,JSP页面的生命周期和许多功能(特别是动态方面)由Java Servlet技术决定。
将请求映射到JSP页时,web容器首先检查JSP页的servlet是否比JSP页旧。如果servlet较旧,则web容器将JSP页面转换为servlet类并编译该类。在开发过程中,JSP页面相对于servlet的优势之一是构建过程是自动执行的。
翻译和编译
在转换阶段,JSP页面中的每种类型的数据都被区别对待。静态数据被转换为将数据发送到响应流的代码。JSP元素的处理方式如下:
JSP指令用于控制web容器如何转换和执行JSP元素插入到页的
jsp:[set|get]Property表达式的调用evaluator.jsp:[set|get]Property元素被转换为对components.jsp:[include|forward]的方法调用JavaBeans 元素被转换为Java Servlet API的调用
jsp:plugin元素被转换为浏览器特定的标记用于激活JSP标记标记被转换为对实现自定义标记的标记处理程序的调用。在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生命周期:
\_jspService方法,传递请求和响应对象。如果容器需要删除JSP页面的servlet,它调用jspDestroy方法。
执行
您可以使用页面指令控制各种JSP页面执行参数。这里讨论了与缓冲输出和处理错误相关的指令。其他指令在整个章节的特定页面创作任务的上下文中都有介绍。
缓冲
执行JSP页面时,会自动缓冲写入响应对象的输出。您可以使用下面的page指令设置缓冲区的大小:
<%@ page buffer="none|xxxkb“%>
较大的缓冲区允许在将任何内容实际发送回客户端之前写入更多内容,从而为JSP页面提供更多时间来设置适当的状态代码和标头或转发到另一个web资源。较小的缓冲区可减少服务器内存负载,并允许客户端更快地开始接收数据。
处理JSP页面错误
在执行JSP页面时,可能会出现任意数量的异常。要指定在发生异常时web容器应将控制转发到错误页,请在JSP页的开头包括以下页指令:
<%@ page errorPage=“文件名”%>
阅读more。
在硬件配置方面有什么可以帮助提高性能的指导吗?
购买更多的RAM和更昂贵的芯片,使用SSD硬盘,与CDN (内容分发网络)等。
您不会问如何通过编程方式调优性能。不过,我认为这个link对你很有帮助。
发布于 2015-07-11 08:16:06
JSP被转换为servlet类,并在运行时编译,或者在部署或打包时预编译(取决于应用程序服务器等)。
根据您的应用程序/web服务器,您可能有访问日志或其他一些指标,以了解在servlet/jsp中花费的时间。不是很聪明,但一般的解决方案是使用servlet过滤器来捕获在servlet中花费的时间。
如果它看起来可以接受,那么很可能是生成的html页面呈现有问题。在这个阶段,您需要浏览器级别的开发工具来查看正在发生的事情( chrome中的开发控制台、firebug等)。
https://stackoverflow.com/questions/31351929
复制相似问题