Зачем изобретать Tomcat, когда в Apache уже может быть JVM

0

Я работал с веб-сервером Apache раньше, используя PHP, Ruby и статические страницы JavaScript/HTML.

Одна вещь, с которой я запутался в Tomcat, в основном, ПОЧЕМУ, что Tomcat существует в первую очередь, вместо использования Apache с установленной JVM? Почему все эти популярные языки нуждаются в Java в своем специализированном контейнере, а именно Tomcat?

Если вы хотите использовать PHP для обслуживания контента, просто установите PHP на сервер Apache и вуаля, когда пользователь перейдет на mysite.com/mypage.php:

  1. Сервер Apache получает соответствующий файл mypage.php
  2. видит PHP, использует PHP intepreter для обработки страницы
  3. возвращает результат

Почему это не так, как при работе с Java?

На мой взгляд, это должно выглядеть так: просто установите Java и JVM на сервер Apache, а затем, когда пользователь перейдет на mysite.com/mypage, это произойдет:

  1. Сервер Apache получает соответствующий файл
  2. видит Java, использует JVM для компиляции/обработки страницы
  3. возвращает результат

Это связано с тем, что файлы Java необходимо скомпилировать, и нет смысла перекомпилировать его при каждом запросе? Тогда почему бы просто не сопоставить запрос с соответствующим файлом .class?

Это может показаться абсурдным для тех, кто уверен в Tomcat, но, как видите, я, к сожалению, этого не понимаю.

Теги:
tomcat
jvm

2 ответа

1
Лучший ответ

Php и Java - это платформы разработки, которые могут работать независимо от Apache. Для запуска PHP-скриптов/приложений вам сначала нужно установить PHP-интерпретатор, то же самое касается Java, где вам нужно будет установить JVM, который работает как интерпретатор для файлов/приложений Java.

Для запуска PHP файлов с помощью Apache вам необходимо включить расширение mod_php, это в основном программа, которая позволяет вызывать PHP-интерпретатор из Apache и выполнять скрипты php. Для выполнения или запуска веб-приложений на платформе J2EE требуется веб-контейнер (https://docs.oracle.com/javaee/5/tutorial/doc/bnabo.html). Apache может подключаться к веб-контейнеру J2EE с помощью модуля, как правило, вы должны использовать AJP, чтобы Apache мог взаимодействовать с Tomcat и выполнять сервлеты Java или страницы JSP.

Вы не требуете, чтобы Apache запускал веб-приложения Java, однако вы должны использовать веб-контейнер J2EE для их запуска, поэтому технически Tomcat можно использовать в качестве веб-сервера, но он не рекомендуется для производства, поскольку Apache будет иметь лучшую производительность, особенно когда обслуживающий статический контент.

  • 1
    поэтому для запуска PHP на Apache вам нужен mod_php , но для запуска Java на Apache вам нужен какой-то Web Container , а Tomcat является его реализацией? Я думаю, я удивлен / смущен для PHP, это просто вызов интерпретатора, тогда как для Java это отдельный «контейнер», используемый ... если я правильно следовал этому
  • 0
    Да, вы правы, причина этого в том, что веб-контейнер является компонентом платформы J2EE, который отличается архитектурой / подходом от PHP. ( oracle.com/technetwork/java/javaee/overview/index.html ) ( en.wikipedia.org/wiki/Application_server )
Показать ещё 2 комментария
1

Tomcat - проект Apache. Хотя теоретически возможно реализовать JSP и контейнер Servlet (например, Tomcat) с использованием собственного кода, который не является стратегией реализации, которая была в конечном итоге выбрана (я считаю, что Websphere действительно соответствует этой модели реализации). Тем не менее, у tomcat есть Соединители и процитировать

AJP

При использовании одного сервера производительность при использовании собственного веб-сервера перед экземпляром Tomcat в большинстве случаев значительно хуже, чем автономный Tomcat с его стандартным HTTP-коннектором, даже если большая часть веб-приложения сделана из статических файлов, Если по какой-либо причине требуется интеграция с собственным веб-сервером, разъем AJP обеспечит более высокую производительность, чем прокси-HTTP. Кластеризация AJP является наиболее эффективной с точки зрения Tomcat. В противном случае это функционально эквивалентно кластеризации HTTP.

Родственные разъемы, поддерживаемые этой версией Tomcat:

JK 1.2.x with any of the supported servers
mod_proxy on Apache HTTP Server 2.x (included by default in Apache HTTP 
   Server 2.2), with AJP enabled
  • 0
    Почему необходимо предоставить этот JSP and Servlet container ? Почему этот container такая необходимая вещь? Как я упоминал в OP, другие языки, похоже, не имеют никакого container кроме самого веб-сервера и интерпретатора языка (насколько я могу судить)
  • 0
    Я не уверен, что «необходимо» - правильное слово. Если я создаю файл веб-архива Java (.war), я могу поместить его в Tomcat, JBoss, Glassfish, Jetty и т. Д., И он будет обработан. Кроме того, существует множество замечательных функций, доступных при развертывании внутри контейнера.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню