Подтвердить что ты не робот

Почему я не вижу никакого основного метода в этом java-динамическом веб-проекте?

Я пытался понять, как работают веб-службы, и я наткнулся на этот учебник

Теперь я видел, что spring используется в корпоративных приложениях и всегда задавался вопросом, где главный метод и как все работает? И всякий раз, когда я перехожу к учебнику spring, они начинаются с beanFactory и Contexts, а что нет, все в основном java-методе и оттуда просто продолжают получать beans по мере необходимости. Это полностью отличается от того, что я вижу в приложениях.

Может ли кто-нибудь сказать мне, как именно работает spring в этом случае. Какова последовательность вызовов. Я предполагаю, что какой-то скрытый основной метод будет где-то, но я не уверен в этом.

Обычно, если бы я запускал простой проект java из командной строки, я бы сделал java mainClass. Теперь как это произойдет в этом случае.

Спасибо

4b9b3361

Ответ 1

Веб-приложения не имеют основного; "программа", которая работает, на самом деле представляет собой веб-контейнер (Apache Tomcat, Glassfish, JBoss, Weblogic, что угодно), и эта программа будет обслуживать веб-приложение (приложения), которое вы развертываете в нем. Возможно, вы захотите прочитать учебник JEE, чтобы узнать и понять, что такое веб-среда Java.

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

Ответ 2

Есть еще основной метод, он просто не написан разработчиком приложения, а разработчиком контейнера.

Вы все еще можете видеть, как главный метод вызывается с помощью отладчика, например:

  • Поместите контрольную точку в некоторый метод инициализации, такой как метод init некоторого сервлета Servlet.init()
  • Когда брандмаует попадает, прокрутите вниз трассировку вызова, а основной метод должен быть внизу.

Это пример с причалом:

enter image description here

Чтобы это увидеть, нам нужно поставить точку останова в метод инициализации, чтобы мы получили основной поток приложения.

Помещение точки останова при обработке запроса вместо метода инициализации будет показывать Thread.run() в нижней части трассировки стека, а не main().

Thread.run() является эквивалентом основного метода для потоков, отличных от основного потока.

Таким образом, основной метод все еще существует, он просто обрабатывается на уровне контейнера.

Ответ 3

Вы не видите явный метод main только потому, что это веб-проект. Этот проект встроен в файл архива веб-приложений (WAR), который развертывается в контейнере веб-сервера/сервлета, например. Tomcat в этом уроке.

Веб-приложения не должны содержать методы main. Это связано с тем, что вам не нужно явно запускать какой-либо Java-процесс из вашего веб-приложения. Где-то в глубине, Tomcat называет метод main кода, из которого он был построен. Это происходит во время запуска сервера.

Затем он привяжет ваш код к входящим HTTP-вызовам, но он не запустит для него новые процессы. Это скорее начнет новые потоки.

Ответ 4

Веб-приложения не являются автономным приложением, они запускаются в некоторых приложениях, что мы называем servletContainer в java-контексте, поэтому для любого веб-приложения нет main method or java process(os). Они просто развертываются в тех контейнерах, которые имеют основной метод и java-процесс во время работы ОС.

Ответ 5

Если вы создали базовую программу на Java, вы должны знать, что в каждой Java-программе есть метод main(), который является отправной точкой программы. Итак, почему у сервлетов нет main()? Это потому, что сервлеты обслуживаются через веб-контейнеры. Веб-контейнер будет выполнять всю основную работу от имени сервлета, чтобы программист мог сосредоточиться на бизнес-логике. Когда клиент запрашивает сервлет, сервер передает запросы веб-контейнеру, в котором развернут сервлет.

enter image description here