Різниця між HTTP-сервером Apache та Apache Tomcat? [зачинено]


637

Яка різниця у функціональності між HTTP-сервером Apache та Apache Tomcat?

Я знаю, що Tomcat написаний на Java, а HTTP Server - на C, але крім цього я не знаю, як їх розрізняти. Чи мають вони різні функціональні можливості?


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

36
Мені було цікаво, що саме просить ОП, і я не бачу, чому це було закрито. На щастя, є відповіді.
Флоріан Ф

4
Веб-сервер Apache та Apache Tomcat - це два різних інструменти, налаштовані на різні цілі. Якщо ми більше не можемо розрізнити випадки їх використання за фактами та експертизою, тоді ми прийдемо в шкоду. Цей потяг до закриття "аргументативних" питань уже досягнуто. Можливо, модераторам потрібно бути більш поінформованими та менш самовпевненими. Як говорить @FlorianF, зараз принаймні є відповіді.
NeilG

2
Зважаючи на кількість оновлень - це не повинно було бути закритим, а натомість має бути заблокованим - адже це насправді дуже гарне запитання з корисними відповідями.
simbro

У closedповідомленні про це запитання йдеться, що він вимагає, щоб відповіді мали об'єктивний зміст, але очікують, що це питання натомість призведе до суб'єктивного змісту відповідей - більшість відповідей, здається, містять об'єктивний зміст (особливо відповіді з більш високою оцінкою), а не суб'єктивне - тому це запитання має бути НЕ ЗАКРИТО. Побоювання суб'єктивності ніколи насправді не бувало, і я не погоджуюся з тим, що питання коли-небудь ризикувало бути суб'єктивним.
cellepo

Відповіді:


475

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

Таким чином Apache - це сервер HTTP, що обслуговує HTTP. Tomcat - сервер і сервер JSP, що обслуговує технології Java.

До складу Tomcat входить Каталіна, яка є контейнером для сервлетів. Нарешті, сервлет - це клас Java. Файли JSP (схожі на PHP та більш старі файли ASP) генеруються у коді Java (HttpServlet), який потім компілюється у файли .class сервером та виконується віртуальною машиною Java.


51
Що ви маєте намір "Apache обслуговує HTTP"? Чи Tomcat також не обслуговує (гіпертекст ака) HTTP? Чому Tomcat просто не може бути модулем Apache "mod_java"? Ви можете пояснити?
Петерино

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

17
Tomcat дійсно приносить із собою здатний веб-сервер. Tomcat є контейнером Servlet / JSP, а також пропонує веб-сервер. Веб-сервер Tomcat досить хороший, здатний обробляти більшість малих та середніх потреб веб-сайту. Завдяки підтримці Java NIO та 64-бітній пам’яті навіть деякі більш масштабні веб-сайти можуть добре обслуговуватися модулем Catalina Tomcat. З різних причин деякі люди вирішують ігнорувати Каталіну і замість цього використовують серветські можливості 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, вона може перевершити перехід традиційних роз'ємів в апаші, таких як 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 - обслуговувати статичний контент, тоді як основна мета технології Servlet - генерувати контент на ходу (динамічний контент).
Василь Бурк

1
@BasilBourque Мене плутали з Tomcat, який фактично подає вміст тут. Він буде генерувати вміст, він не буде його обслуговувати при використанні разом з Apache Http Server. Напевно, ти маєш рацію, і я просто розгублений, але мені все одно сказати, що при спільному використанні Apache служить, Tomcat генерує статичний вміст, коли потрібно. Якщо не використовується Apache, Coyote в Tomcat зробить подачу, тоді як Каталіна та 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 - це насамперед сервер додатків, якщо цей термін означає сенс контейнера Servlet, який генерує динамічний контент, доставлений веб-браузерам. Як один з перших контейнерів сервлетів, це причина Tomcat.
Василь Бурк

1
tomcat - не сервер додатків, це веб-сервер. javajee.com/web-server-web-container-and-application-server
Prateek Mishra

@PrateekMishra На основі посилання, яке ви надали, ваше твердження про те, що tomcat - це веб-сервер, є невірним; це (головним чином) веб-контейнер , також відомий як контейнер сервлетів .
skomisa

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. І 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 сказав вище: "Coyote - це модуль у Tomcat, відповідальний за розміщення в Інтернеті, Catalina - це модуль, який виконує сервлети. як веб - сервер налаштованого для виконання Java Servlet і JSP - сторінки !!!! "
Dev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.