我已经开始使用 tomcat 7 几天了。我已经尝试用它执行许多基于 JAVA 的 Web 应用程序。我实际上想检查基于 Java 的 Web 应用程序的流程。这意味着 Web 应用程序的方法以何种顺序执行。为此,我使用 java 分析器分析了 tomcat 服务器。
我的分析器是这样工作的:
- 我将应用程序的 war 文件部署到 tomcat 的 Web Apps 目录中。
- 我通过
./startup.sh
启动服务器 - 我在浏览器中访问应用程序并执行它。
- 我通过
./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/... 中没有大量方法被执行。那么这些类(class)实际上做了什么?为什么我的输出中有它们?
如果我未能解释我的问题,请告诉我。我搜索了很多,但找不到我的问题的非常精确的答案。
非常感谢您的回复..
谢谢。
最佳答案
我强烈建议阅读一些关于 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 对该问题的评论。
您使用什么分析器?如何通过调试逐步完成代码?
关于java - 使用 tomcat 执行 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12300755/