Чем отличается HTTP-сервер Apache от Tomcat Apache? [закрыто]


637

В чем разница с точки зрения функциональности между Apache HTTP Server и Apache Tomcat?

Я знаю, что Tomcat написан на Java, а HTTP-сервер - на C, но кроме этого я не знаю, как они различаются. У них разные функции?


12
Я добавил резюме в своем блоге, может, кому-то это поможет: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Корай Тугай,

36
Мне было интересно, что именно спрашивал ОП, и я не понимаю, почему он был закрыт. К счастью, есть ответы.
Флориан Ф

4
Веб-сервер Apache и Apache Tomcat - это два разных инструмента, настроенных для разных целей. Если мы больше не можем различать их случаи использования по фактам и опыту, то мы приходим в плачевное состояние. Стремление закрыть «спорные» вопросы перешло. Возможно, модераторы должны быть более информированными и менее самоуверенными. Как говорит @FlorianF, по крайней мере, сейчас есть ответы.
NeilG

2
Учитывая количество голосов - это не должно было быть закрыто - но вместо этого должно быть заблокировано - поскольку это на самом деле очень хороший вопрос с полезными ответами.
Симбро

В closedуведомлении по этому Вопросу говорится, что требуется, чтобы Ответы имели объективное содержание, но ожидается, что вместо этого Вопрос будет давать субъективное содержание Ответа - большинство Ответов, по-видимому, содержат объективное содержание (особенно Ответы с более высоким рейтингом), а не субъективное - поэтому этот Вопрос должен быть НЕ ЗАКРЫТ. Опасения субъективности никогда не случались, и я не согласен с тем, что Вопрос когда-либо рисковал быть субъективным.
cellepo

Ответы:


475

Apache Tomcat используется для развертывания ваших Java-сервлетов и JSP. Таким образом, в вашем проекте Java вы можете создать файл WAR (сокращение от Web ARchive) и просто поместить его в каталог развертывания в Tomcat.

В общем, Apache - это HTTP-сервер, обслуживающий HTTP. Tomcat - это сервлет и сервер JSP, обслуживающие технологии Java.

Tomcat включает в себя Catalina, которая является контейнером сервлетов. В конце сервлет - это класс Java. Файлы JSP (которые похожи на PHP и более старые файлы ASP) генерируются в код Java (HttpServlet), который затем компилируется сервером в файлы .class и выполняется виртуальной машиной Java.


51
Что вы подразумеваете под «Apache [...] обслуживает HTTP»? Разве Tomcat также не обслуживает (гипертекст, иначе) HTTP? Почему Tomcat просто не может быть модулем Apache "mod_java"? Вы можете объяснить?
Петерино

30
Tomcat - это контейнер сервлетов. В конце сервлет - это класс Java. Файлы JSP (которые похожи на файлы PHP oder ASP) генерируются в код Java (HttpServlet), который затем компилируется сервером в файлы .class и выполняется виртуальной машиной Java. - Кроме того, этот форум довольно хорошо объясняет разницу между Apache HTTPD и Tomcat: coderanch.com/t/85182/Tomcat/…
Петерино

17
Tomcat действительно обладает способным веб-сервером. Tomcat - это контейнер сервлетов / JSP, а также веб-сервер. Веб-сервер Tomcat неплохой, он способен справиться с большинством небольших и средних потребностей веб-сайта. Благодаря поддержке Java NIO и 64-битной памяти, даже некоторые крупномасштабные веб-сайты могут хорошо обслуживаться модулем Tomcat Catalina. По разным причинам некоторые люди предпочитают игнорировать Catalina и вместо этого использовать возможности сервлета Tomcat, стоящие за httpdпродуктом веб-сервера Apache .
Василий Бурк

21
Исправление к моему комментарию: Coyote - это модуль в Tomcat, отвечающий за веб-обслуживание. Каталина это модуль, который делает сервлетов. Jasper - это модуль, который обрабатывает JSP.
Василий Бурк

17
@KorayTugay Да. Tomcat = ( Web Server + Servlet container + JSP environment ), По умолчанию веб-сервер включен, когда вы запускаете startup.shскрипт Tomcat , прослушивая порт 8080 для входящих соединений (HTTP-вызовы). Tomcat - это чистый Java с собственной реализацией веб-сервера (Coyote). Apache HTTP Server (AHS), напротив, имеет совершенно отдельную реализацию веб - сервера, используя родной C / C ++ код. AHS очень гибкая и мощная, но часто излишняя. Собственный веб-сервер Tomcat работает очень хорошо. Используйте AHS, только если действительно необходимо.
Василий Бурк

118

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

При этом полностью оптимизированный сервер Tomcat должен быстро обслуживать статические файлы, и если у вас есть Java-сервлеты, файлы JSP и ColdFusion, в дополнение к статическому контенту, вы можете обнаружить, что tomcat сам по себе отлично справляется.


3
Правда. И многие люди все еще используют дополнительную настройку Apache, кроме своего Tomcat, что в большинстве случаев не требуется.
Марко Шуленберг

6
Самая мощная часть apache http, которую поддерживают немногие другие серверы, - это возможность перенаправить и переписать запрос до того, как приложение его увидит, а именно через mod_rewriteвнедрение ядра и условной среды. mod_proxyобеспечивает элементарную балансировку нагрузки (и в сочетании с mod_jk обеспечивает элементарную липкую сессию / разделяемое состояние между экземплярами tomcat с балансировкой нагрузки).
ковбер

81
  1. Apache - это http-сервер общего назначения, который поддерживает ряд дополнительных параметров, которых нет у Tomcat.
  2. Хотя Tomcat можно использовать как http-сервер общего назначения, вы также можете настроить Apache и Tomcat для совместной работы с Apache, обслуживающим статическое содержимое и перенаправляющим запросы на динамическое содержимое в Tomcat.

Разве не все сети в конце статичны? Насколько я понимаю, Tomcat генерирует статический контент (динамически), тогда Apache будет его обслуживать. Таким образом, Tomcat никогда не будет обслуживать динамический контент или что-либо еще, он будет генерировать его только при необходимости.
Корай Тугай

11
@KorayTugay Вы путаете свои условия. «Генерировать его при необходимости» - это именно то, что означает «динамический», и является полной противоположностью «статического». Основная цель Apache HTTP Server - обслуживать статический контент, тогда как основная цель технологии Servlet - генерировать контент на лету (динамический контент).
Василий Бурк

1
@BasilBourque Я был перепутан с Tomcat, который на самом деле размещал здесь контент. Он будет только генерировать контент, он не будет обслуживать его при использовании вместе с Apache Http Server. Вероятно, вы правы, и я просто растерялся, но я бы сказал, что при совместном использовании Apache Tomcat генерирует статический контент, когда это необходимо. Если не используется Apache, Coyote в Tomcat будет выполнять обслуживание, в то время как Catalina и Jesper генерируют динамический контент.
Корай Тугай

3
@KorayTugay Да, ваш последний комментарий правильный. Если вы используете Apache HTTP Server + Tomcat, веб-браузеры только «видят» AWS, не зная, что Tomcat работает за кулисами. AWS является посредником между клиентами веб-браузера и Tomcat. Если используется только Tomcat, то модуль Coyote в Tomcat заменяет AWS для отправки запросов от клиентов веб-браузера. Я рекомендую последний вариант (один только Tomcat), если вы не знаете, что у вас есть особые потребности, которые лучше бы удовлетворял AWS.
Василий Бурк

29

Tomcat - это прежде всего сервер приложений, который обслуживает запросы к специально созданным Java-сервлетам или файлам JSP на вашем сервере. Обычно он используется вместе с HTTP-сервером Apache (по крайней мере, по моему опыту). Используйте его для ручной обработки входящих запросов.

Сам по себе HTTP-сервер лучше всего подходит для обслуживания статического содержимого ... HTML-файлов, изображений и т. Д.


9
Я сомневаюсь в Tomcat is primarily an application serverутверждении.
Рэйчел

6
Tomcat в первую очередь предназначен для сервера приложений. хотя это делает статический контент сервера также.
Масштабируемый

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

1
Tomcat - это не сервер приложений, а веб-сервер. javajee.com/web-server-web-container-and-application-server
Мишра

@PrateekMishra На основании предоставленной вами ссылки ваше утверждение о том, что tomcat является веб-сервером , неверно; это (прежде всего) веб-контейнер , также известный как контейнер сервлетов .
скомиса

21

сервер apache - это сервер http, который может обслуживать любые простые запросы http, где сервер tomcat на самом деле является контейнером сервлетов, который может обслуживать запросы сервлетов java.

Веб-сервер [apache] обрабатывает запросы веб-клиента (веб-браузеры) и перенаправляет их в контейнер сервлетов [tomcat], а контейнер обрабатывает запросы и отправляет ответ, который передается веб-сервером веб-клиенту [браузеру].

Также вы можете проверить эту ссылку для уточнения: -

https://sites.google.com/site/sureshdevang/servlet-architecture

Также проверьте этот ответ для дальнейшего исследования: -

https://softwareengineering.stackexchange.com/a/221092


sites.google.com/site/sureshdevang/servlet-architecture Как вы объясняете, это дает лучшее представление
Akitha_MJ

13

Если вы используете технологию Java (Servlet / JSP) для создания веб-приложения, вы, вероятно, будете использовать Apache Tomcat. Однако, если вы используете другие технологии, такие как Perl, PHP или ruby, лучше использовать Apache HTTP Server.


9
Этот ответ не имеет смысла для меня. Первое предложение неверно в том смысле, что помимо Tomcat есть много других контейнеров Servlet / JSP, некоторые довольно популярные, такие как Jetty, JBoss / Wildfly, Glassfish, WebSphere и многие другие. Несмотря на популярность, Tomcat не доминирует, имея лишь небольшую долю рынка. Что касается второго предложения, Tomcat часто используется в качестве контейнера сервлета за Apache HTTP Server. И PHP и т. Д. Часто используются с несколькими другими веб-серверами, такими как Nginx, Lighttpd и другие.
Василий Бурк

3

Итак, Apache - это веб-сервер HTTP, а Tomcat также является веб-сервером для сервлетов и JSP. Более того, в реальном времени Apache предпочитается над Apache Tomcat.


19
Этот вопрос довольно старый, и ваш ответ, кажется, дублирует те, которые были опубликованы давно. Ответы приветствуются, но новые ответы должны помочь добавить к разговору.
GargantuChet

-2

Apache - это веб-сервер HTTP, который служит HTTP.

Apache Tomcat - это контейнер Java-сервлетов. Он работает так же, как веб-сервер, но настроен для выполнения страниц Java-сервлета и страниц JSP.


1
да, ответ немного запутанный, так как @ Basil Bourque сказал выше: «Койот - это модуль в Tomcat, отвечающий за веб-обслуживание, Catalina - это модуль, выполняющий сервлеты. А Jasper - это модуль, который обрабатывает JSP», теперь он дает ясность о том, как «ОСОБЕННОСТИ TOMCAT как веб-сервер, настроенный для выполнения страниц сервлетов Java и JSP !!!! "
Dev
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.