为什么我在这个Java动态Web项目中没有看到任何主要方法?

2022-09-03 03:44:55

我试图了解 Web 服务的工作原理,我遇到了本教程

现在,我已经看到Spring被用于企业应用程序,并且总是想知道主要方法在哪里以及一切是如何工作的?每当我去参加春季教程时,他们都会从beanFactory和Entexts开始,所有这些都在主要的Java方法中,从那里继续根据需要获取bean。这与我在应用程序中看到的完全不同。

在这种情况下,Spring究竟是如何工作的?呼叫的顺序是什么?我想在某个地方会有一些隐藏的主要方法,但我不确定这一点。

通常,如果我从命令行运行一个简单的Java项目,我会这样做。那么在这种情况下会发生什么呢?java mainClass


答案 1

仍然有一个主要方法。它不是由应用程序的开发人员编写的,而是由容器的开发人员编写的。

您仍然可以看到使用调试器调用 main 方法,如下所示:

  • 在某些初始化方法中放置一个断点,例如某些 servlet Servlet.init() 的 init 方法
  • 当断点命中时,向下滚动调用跟踪,主方法应位于底部。

这是 Jetty 的一个例子:

Enter image description here

要看到这一点,我们需要将断点放在初始化方法中,以便我们获得应用程序的主线程。

将断点放在请求的处理中而不是初始化方法中,会在堆栈跟踪的底部显示 Thread.run() 而不是 main()。

Thread.run() 等效于主线程以外的线程的 main 方法。

所以主要的方法仍然存在。它只是在容器级别进行处理。


答案 2

Web应用程序没有主;正在运行的“程序”实际上是Web容器(Apache Tomcat,Glassfish,JBoss,Weblogic等),该程序将为您部署到其中的Web应用程序提供服务。您可能想阅读 JEE 教程来学习和理解什么是 Java Web 环境。

https://docs.oracle.com/javaee/7/tutorial/


推荐