Różnica między serwerem Apache HTTP Server a Apache Tomcat? [Zamknięte]

637

Jaka jest różnica pod względem funkcjonalności między serwerem Apache HTTP Server a Apache Tomcat?

Wiem, że Tomcat jest napisany w Javie, a serwer HTTP w C, ale poza tym tak naprawdę nie wiem, jak się je rozróżnia. Czy mają inną funkcjonalność?

kaybenleroll
źródło
12
Dodałem streszczenie na moim blogu, może to komuś pomaga: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Koray Tugay
36
Zastanawiałem się dokładnie, o co prosi OP i nie rozumiem, dlaczego został zamknięty. Na szczęście są odpowiedzi.
Florian F
4
Serwer WWW Apache i Apache Tomcat to dwa różne narzędzia dostosowane do różnych celów. Jeśli nie możemy dłużej rozróżniać przypadków ich użycia według faktów i wiedzy specjalistycznej, jesteśmy w żałobie. Ta tendencja do zamykania „argumentacyjnych” pytań została przekroczona. Być może moderatorzy muszą być lepiej poinformowani i mniej opiniowani. Jak mówi @FlorianF, przynajmniej są teraz odpowiedzi.
NeilG,
2
Biorąc pod uwagę liczbę głosów pozytywnych - nie powinno to być zamknięte - ale zamiast tego powinno zostać zablokowane - ponieważ w rzeczywistości jest to bardzo dobre pytanie z przydatnymi odpowiedziami.
simro
closedZawiadomienie w tej sprawie mówi, że wymaga odpowiedzi, aby konkretna treść, ale spodziewa się to pytanie zamiast produkować subiektywną treść odpowiedzi - większość odpowiedzi wydają się zawierać konkretna treść (zwłaszcza wyższej głosowali odpowiedzi) niż subiektywne - więc to pytanie powinien być NIE ZAMKNIĘTY. Obawy o podmiotowość nigdy tak naprawdę się nie wydarzyły i nie zgadzam się, że Pytanie kiedykolwiek ryzykowało bycie subiektywnym.
cellepo

Odpowiedzi:

475

Apache Tomcat służy do wdrażania serwletów Java i stron JSP. Tak więc w swoim projekcie Java możesz zbudować plik WAR (skrót od Web ARchive) i po prostu upuścić go w katalogu wdrażania w Tomcat.

Zasadniczo Apache to serwer HTTP obsługujący HTTP. Tomcat to serwer serwletów i JSP obsługujący technologie Java.

Tomcat obejmuje Catalinę, która jest pojemnikiem serwletu. Na końcu serwlet jest klasą Java. Pliki JSP (podobne do PHP i starsze pliki ASP) są generowane do kodu Java (HttpServlet), który jest następnie kompilowany do plików .class przez serwer i wykonywany przez maszynę wirtualną Java.

Bernie Perez
źródło
51
Co zamierzasz przez „Apache [...] obsługuje HTTP”? Czy Tomcat nie obsługuje także HTTP (hipertekstu)? Dlaczego Tomcat nie może być po prostu modułem Apache „mod_java”? Możesz wytłumaczyć?
Peterino,
30
Tomcat to pojemnik serwletu. Na końcu serwlet jest klasą Java. Pliki JSP (podobne do plików PHP lub ASP ASP) są generowane do kodu Java (HttpServlet), który jest następnie kompilowany do plików .class przez serwer i wykonywany przez maszynę wirtualną Java. - Poza tym to forum całkiem dobrze wyjaśnia różnicę między Apache HTTPD a Tomcat: coderanch.com/t/85182/Tomcat/…
Peterino
17
Tomcat rzeczywiście ma ze sobą sprawny serwer WWW. Tomcat jest kontenerem Servlet / JSP i oferuje również serwer WWW. Serwer Tomcat jest całkiem dobry, jest w stanie obsłużyć większość małych i średnich potrzeb stron internetowych. Dzięki obsłudze Java NIO i pamięci 64-bitowej nawet niektóre strony internetowe na większą skalę mogą być dobrze obsługiwane przez moduł Catalina firmy Tomcat. Z różnych powodów niektórzy ludzie ignorują Catalinę i zamiast tego korzystają z możliwości serwletu Tomcat stojących za httpdproduktem serwera WWW Apache .
Basil Bourque
21
Korekta do mojego komentarza: Coyote to moduł w Tomcat odpowiedzialny za serwowanie stron internetowych. Catalina to moduł wykonujący serwlety. Jasper to moduł obsługujący strony JSP.
Basil Bourque
17
@KorayTugay Tak. Tomcat = ( Web Server + Servlet container + JSP environment ). Serwer WWW jest domyślnie WŁĄCZONY po uruchomieniu startup.shskryptu Tomcat , nasłuchując na porcie 8080 pod kątem połączeń przychodzących (połączeń HTTP). Tomcat to czysta Java z własną implementacją serwera WWW (Coyote). Natomiast serwer HTTP Apache (AHS) ma całkowicie oddzielną implementację serwera WWW, wykorzystującą natywny kod C / C ++. AHS jest bardzo elastyczny i potężny, ale często przesadza. Własny serwer Tomcat działa bardzo dobrze. Używaj AHS tylko wtedy, gdy jest to naprawdę potrzebne.
Basil Bourque
118

Oprócz powyższych dobrych odpowiedzi, uważam, że należy powiedzieć, że Tomcat ma wbudowany własny serwer HTTP i jest w pełni funkcjonalny w obsłudze treści statycznych. W zależności od konfiguracji wirtualnej maszyny java może ona faktycznie przewyższać przechodzenie przez tradycyjne łączniki w apache, takie jak mod_proxy i mod_jk.

To powiedziawszy, w pełni zoptymalizowany serwer Tomcat powinien szybko obsługiwać pliki statyczne, a jeśli masz serwlety Java, pliki JSP i pliki ColdFusion oprócz zawartości statycznej, może się okazać, że tomcat sam wykonuje doskonałą robotę.

etyreal
źródło
3
Prawdziwe. I wiele osób nadal używa dodatkowej konfiguracji Apache oprócz Tomcat .. co w większości przypadków jest niepotrzebne.
Marco Schoolenberg,
6
Najpotężniejszą częścią apache http obsługiwaną przez kilka innych serwerów jest możliwość przekierowania i przepisania żądania, zanim aplikacja go zobaczy, a mianowicie poprzez mod_rewritewstrzyknięcie silnika i środowiska warunkowego. mod_proxyzapewnia podstawowe równoważenie obciążenia (w połączeniu z mod_jk zapewnia podstawowy lepki stan sesji / współużytkowania między instancjami tomcat z równoważeniem obciążenia).
cowbert
81
  1. Apache to serwer HTTP ogólnego przeznaczenia, który obsługuje wiele zaawansowanych opcji, których Tomcat nie ma.
  2. Chociaż Tomcat może być używany jako serwer HTTP ogólnego przeznaczenia, można również skonfigurować Apache i Tomcat do współpracy z Apache obsługującym zawartość statyczną i przesyłanie żądań zawartości dynamicznej do Tomcat.
Satish Dhiman
źródło
Czy na końcu cała sieć nie jest statyczna? Rozumiem, że Tomcat generuje „a” zawartość statyczną (dynamicznie), a następnie Apache ją obsłuży. Tak więc Tomcat nigdy nie będzie wyświetlał dynamicznych treści ani niczego, będzie je generował tylko wtedy, gdy będzie to wymagane.
Koray Tugay
11
@KorayTugay Mylisz swoje warunki. „Generuj to, gdy jest to wymagane” jest dokładnie tym, co oznacza „dynamiczny” i jest przeciwieństwem „statycznego”. Głównym celem serwera HTTP Apache jest dostarczanie treści statycznych, podczas gdy głównym celem technologii Servlet jest generowanie treści w locie (zawartość dynamiczna).
Basil Bourque,
1
@BasilBourque Byłem mylony z Tomcatem, który faktycznie wyświetlał tutaj treści. Będzie generować tylko zawartość, nie będzie jej wyświetlać, gdy będzie używana razem z serwerem Apache Http. Prawdopodobnie masz rację i jestem po prostu zdezorientowany, ale nadal powiedziałbym, że gdy używa się go razem, Apache służy, Tomcat generuje statyczną zawartość, gdy jest to wymagane. Jeśli nie zostanie użyty Apache, Coyote w Tomcat wykona porcję, podczas gdy Catalina i Jesper będą generować dynamiczną zawartość.
Koray Tugay,
3
@KorayTugay Tak, twój ostatni komentarz jest poprawny. Jeśli używasz serwera Apache HTTP Server + Tomcat, wówczas przeglądarki internetowe tylko „widzą” AWS bez pojęcia, że ​​Tomcat pracuje za zasłonami. AWS jest pośrednikiem między klientami przeglądarki internetowej a Tomcat. Jeśli używasz samego Tomcata, moduł Coyote w Tomcat zastępuje AWS do wysyłania żądań od klientów przeglądarki internetowej. Polecam to drugie (sam Tomcat), chyba że wiesz, że masz specjalne potrzeby, które lepiej zaspokoi AWS.
Basil Bourque,
29

Tomcat to przede wszystkim serwer aplikacji, który obsługuje żądania do niestandardowo zbudowanych serwletów Java lub plików JSP na serwerze. Zwykle jest używany w połączeniu z serwerem HTTP Apache (przynajmniej z mojego doświadczenia). Użyj go do ręcznego przetwarzania przychodzących żądań.

Sam serwer HTTP najlepiej nadaje się do wyświetlania treści statycznych ... plików HTML, obrazów itp.

levand
źródło
9
Wątpię w Tomcat is primarily an application serveroświadczenie.
Rachel
6
Tomcat jest głównie przeznaczona do być serwerem aplikacji. chociaż robi to również statyczną zawartość serwera.
Skalowalny
4
Tak, Tomcat jest rzeczywiście przede wszystkim serwerem aplikacji, jeśli termin ten oznacza kontener serwletu generujący dynamiczną zawartość dostarczaną do przeglądarek internetowych. To jeden z pierwszych kontenerów serwletów, dlatego Tomcat jest tego powodem.
Basil Bourque
1
tomcat nie jest serwerem aplikacji, to serwer WWW. javajee.com/web-server-web-container-and-application-server
Prateek Mishra
@PrateekMishra Na podstawie podanego linku stwierdzenie, że tomcat jest serwerem internetowym, jest nieprawidłowe; jest to (przede wszystkim) kontener WWW , znany również jako kontener serwletu .
skomisa
21

serwer Apache to serwer HTTP, który może obsługiwać dowolne proste żądania HTTP, przy czym serwer tomcat jest w rzeczywistości kontenerem serwletów, który może obsługiwać żądania serwletów Java.

Serwer WWW [apache] przetwarza żądania klienta WWW (przeglądarki internetowe) i przekazuje je do kontenera serwletu [tomcat], a kontener przetwarza żądania i wysyła odpowiedź, która jest przekazywana przez serwer WWW do klienta WWW [przeglądarki].

Możesz również sprawdzić ten link, aby uzyskać dodatkowe wyjaśnienia: -

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

Sprawdź również tę odpowiedź w celu dalszych badań: -

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

smuga
źródło
13

Jeśli używasz technologii Java (Servlet / JSP) do tworzenia aplikacji internetowych, prawdopodobnie będziesz używać Apache Tomcat. Jeśli jednak używasz innych technologii, takich jak Perl, PHP lub Ruby, lepiej (łatwiej) używać Apache HTTP Server.

Vishal
źródło
9
Ta odpowiedź nie ma dla mnie sensu. Pierwsze zdanie jest błędne, ponieważ istnieje wiele innych kontenerów Servlet / JSP oprócz Tomcat, niektóre dość popularne, takie jak Jetty, JBoss / Wildfly, Glassfish, WebSphere i wiele innych. Choć popularny, Tomcat nie dominuje, z niewielkim udziałem w rynku. Co do drugiego zdania, Tomcat jest często używany jako kontener serwletów za serwerem HTTP Apache. PHP itp. Są często używane z kilkoma innymi serwerami WWW, takimi jak Nginx, Lighttpd i innymi.
Basil Bourque,
3

Cóż, Apache jest serwerem HTTP, gdzie podobnie jak Tomcat jest serwerem dla serwletów i JSP. Ponadto Apache jest preferowany w czasie rzeczywistym w porównaniu z Apache Tomcat

yadul
źródło
19
To pytanie jest dość stare, a twoja odpowiedź zdaje się powielać te, które zostały opublikowane dawno temu. Odpowiedzi są mile widziane, ale nowe odpowiedzi powinny pomóc w dodaniu do rozmowy.
GargantuChet
-2

Apache to serwer WWW HTTP, który służy jako HTTP.

Apache Tomcat to kontener serwletów Java. Działa tak samo jak serwer WWW, ale jest dostosowany do uruchamiania serwletu Java i stron JSP.

Karthikeyan
źródło
1
tak, odpowiedź jest nieco myląca, ponieważ @ Basil Bourque powiedział powyżej: „Coyote jest modułem w Tomcat odpowiedzialnym za serwowanie stron internetowych, Catalina jest modułem obsługującym serwlety. a Jasper jest modułem obsługującym strony JSP”, teraz wyjaśnia, w jaki sposób „TOMCAT FEATURES Same jako serwer WWW dostosowany do uruchamiania serwletu Java i stron JSP !!!! ”
Dev.