0

我已经开始使用 tomcat 7 几天了。我试过用它执行许多基于 JAVA 的 Web 应用程序。我实际上想检查基于 java 的 Web 应用程序的流程。这意味着 Web 应用程序的方法按什么顺序执行。为此,我使用 java profiler 分析 tomcat 服务器。

我的分析器是这样工作的:

  1. 我将应用程序的war文件部署到tomcat的web Apps目录中。
  2. 我启动服务器./startup.sh
  3. 我在浏览器中访问应用程序并执行它。
  4. 我停止服务器./shutdown.sh

在我停止服务器后,分析器以 xml 格式转储输出(它将方法的层次结构显示为调用上下文树)。(我的分析器基本上分析了 java 类的方法。)

如您所知,可能是因为 Tomcat 基于 servlet,对于应用程序的 2 次完全相同的运行(我按照上述 4 个步骤进行了 2 次,并且对于 2 次相同的运行有 2 个不同的输出),分析器给出了不同的输出。Q.1)我不完全知道为什么会发生这种情况,我很想知道它背后的原因。

即使对于简单的应用程序,输出也非常大(大约 200 MB)。为了限制输出的大小并为 2 次完全相同的运行提供相同的输出,我从分析中排除了 org.apache.* 的方法。因为我最终对了解 Web 应用程序本身的流程感兴趣。(了解 Web 应用程序的哪些顺序方法被执行)。对于这种情况,我有以下问题。

Q.2)通过部署war文件运行应用程序并通过从目录本身获取它来运行它可以对分析器的输出产生影响?还是会影响它们在这两种情况下执行的一系列方法?

Q.3)我想知道当我执行应用程序的jsp页面时会发生什么?我的意思是tomcat如何执行它们?请明智地...

Q.4)当我在执行应用程序后检查分析器的输出时,我看到没有大量来自 org/eclipse/jdt/internal/... 的方法被执行。那么这些类实际上是做什么的呢?为什么我的输出中有它们?

如果我未能解释我的问题,请告诉我。我搜索了很多,但找不到我的问题的非常准确的答案。

我真的很感谢你的回复..

谢谢。

4

1 回答 1

0

我强烈建议阅读一些关于 tomcat 作品的信息。简而言之

Q.2应该没有任何区别。

Q.3 JSP 在被调用时被编译为 servlet 类。如果 JSP 中没有 Servlet 类,则 tomcat 制作一个。如果有对应的servlet类,tomcat看哪个更年轻,是JSP还是servlet。如果 JSP 更年轻,它会进行新的编译,否则使用 servlet。

Q.1不确定。可能是多线程/定时的事情,也许这是您的探查器的工作方式。

Q.4不确定。可以是您的 servlet 代码使用的分析器或库中的类吗?

编辑:对于Q.4,请查看 Ian Roberts 对问题的评论。

你用什么分析器?如何通过调试逐步完成代码?

于 2012-09-06T13:20:13.877 回答