Differenza tra Apache HTTP Server e Apache Tomcat? [chiuso]


637

Qual è la differenza in termini di funzionalità tra Apache HTTP Server e Apache Tomcat?

So che Tomcat è scritto in Java e HTTP Server è in C, ma a parte questo non so davvero come si distinguano. Hanno funzionalità diverse?


12
Ho aggiunto un riassunto nel mio blog, forse aiuta qualcuno: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Koray Tugay,

36
Mi chiedevo esattamente cosa chiedesse il PO e non vedo perché fosse chiuso. Fortunatamente ci sono risposte.
Florian F,

4
Il web server Apache e Apache Tomcat sono due strumenti diversi messi a punto per scopi diversi. Se non riusciamo più a distinguere i loro casi d'uso in base a fatti ed esperienza, allora arriviamo a un triste stato. Questo tentativo di chiudere le domande "argomentative" ha superato. Forse i moderatori devono essere più informati e meno ponderati. Come dice @FlorianF, almeno adesso ci sono risposte.
NeilG

2
Dato il numero di voti - questo non dovrebbe essere chiuso - ma dovrebbe essere bloccato - poiché in realtà è un'ottima domanda con risposte utili.
simbro

L' closedavviso su questa domanda afferma che richiede che le risposte abbiano un contenuto oggettivo, ma si aspetta che questa domanda produca invece un contenuto di risposta soggettivo - la maggior parte delle risposte sembra contenere un contenuto oggettivo (in particolare le risposte più votate) piuttosto che soggettivo - quindi questa domanda dovrebbe essere UN-CLOSED. Le paure della soggettività non sono mai realmente accadute, e non sono d'accordo sul fatto che la Domanda abbia mai rischiato di essere soggettiva in primo luogo.
cellepo,

Risposte:


475

Apache Tomcat viene utilizzato per distribuire servlet Java e JSP. Quindi nel tuo progetto Java puoi creare il tuo file WAR (abbreviazione di Web ARchive) e rilasciarlo nella directory deploy in Tomcat.

Quindi in pratica Apache è un server HTTP che serve HTTP. Tomcat è un Servlet e un server JSP che servono tecnologie Java.

Tomcat include Catalina, che è un contenitore servlet. Un servlet, alla fine, è una classe Java. I file JSP (che sono simili a PHP e file ASP precedenti) vengono generati nel codice Java (HttpServlet), che viene quindi compilato in file .class dal server ed eseguito dalla macchina virtuale Java.


51
Cosa intendi con "Apache serve [...] HTTP"? Tomcat non serve anche (ipertesto aka) HTTP? Perché Tomcat non può essere semplicemente un modulo Apache "mod_java"? Puoi spiegare?
Peterino,

30
Tomcat è un contenitore servlet. Un servlet, alla fine, è una classe Java. I file JSP (che sono simili ai file ASP PHP o precedenti) vengono generati nel codice Java (HttpServlet), che viene quindi compilato in file .class dal server ed eseguito dalla macchina virtuale Java. - A parte questo, questo forum spiega abbastanza bene la differenza tra Apache HTTPD e Tomcat: coderanch.com/t/85182/Tomcat/…
Peterino,

17
Tomcat porta davvero con sé un server web capace. Tomcat è un contenitore Servlet / JSP e offre anche un server Web. Il server Web Tomcat è abbastanza buono, in grado di gestire le esigenze dei siti Web più piccoli e medi. Con il supporto per Java NIO e memoria a 64 bit, anche alcuni siti Web di dimensioni maggiori possono essere ben serviti dal modulo Catalina di Tomcat. Per vari motivi, alcune persone scelgono di ignorare Catalina e invece utilizzano le funzionalità Servlet di Tomcat dietro il httpdprodotto web server Apache .
Basil Bourque,

21
Correzione al mio commento: Coyote è il modulo di Tomcat responsabile per il servizio web. Catalina è il modulo che fa Servlet. Jasper è il modulo che gestisce i JSP.
Basil Bourque,

17
@KorayTugay Sì. Tomcat = ( Web Server + Servlet container + JSP environment ). Il server Web è attivo per impostazione predefinita quando si esegue lo startup.shscript Tomcat , in ascolto sulla porta 8080 per le connessioni in entrata (chiamate HTTP). Tomcat è puro Java, con la sua implementazione del web server (Coyote). L' Apache HTTP Server (AHS), al contrario, dispone di un'implementazione completamente separata di un server web, utilizzando il codice nativo C / C ++. L'AHS è molto flessibile e potente, ma spesso è eccessivo. Il server Web di Tomcat funziona molto bene. Utilizzare AHS solo se veramente necessario.
Basil Bourque,

118

Oltre alle belle risposte di cui sopra, penso che si debba dire che Tomcat ha il proprio server HTTP integrato ed è perfettamente funzionante anche per servire contenuti statici. A seconda della configurazione della tua macchina virtuale Java, può effettivamente superare i tradizionali connettori in apache come mod_proxy e mod_jk.

Detto questo, un server Tomcat completamente ottimizzato dovrebbe servire rapidamente i file statici e se si hanno servlet Java, JSP e file ColdFusion oltre al contenuto statico, Tomcat può fare un lavoro eccellente da solo.


3
Vero. E molte persone usano ancora un'ulteriore configurazione di Apache oltre al loro Tomcat ... che nella maggior parte dei casi non è necessario.
Marco Schoolenberg,

6
La parte più potente di apache http supportata da pochi altri server è la capacità di reindirizzare e riscrivere la richiesta prima che l'applicazione debba vederla, in particolare tramite mod_rewritel'iniezione del motore e dell'ambiente condizionale. mod_proxyfornisce un bilanciamento del carico rudimentale (e combinato con mod_jk fornisce una sessione appiccicosa rudimentale / stato condiviso tra istanze tomcat con bilanciamento del carico).
cowbert,

81
  1. Apache è un server http generico, che supporta una serie di opzioni avanzate che Tomcat non offre.
  2. Sebbene Tomcat possa essere utilizzato come server http per scopi generici, è anche possibile configurare Apache e Tomcat in modo che collaborino con Apache per servire contenuto statico e inoltrare le richieste di contenuto dinamico a Tomcat.

Non tutto il web è statico alla fine? La mia comprensione è che Tomcat genera "un" contenuto statico (in modo dinamico), quindi Apache servirà a questo. Quindi Tomcat non servirà mai realmente contenuti dinamici o altro, lo genererà solo quando richiesto.
Koray Tugay,

11
@KorayTugay Stai confondendo i tuoi termini. "Generarlo quando richiesto" è esattamente ciò che significa "dinamico", ed è esattamente l'opposto di "statico". Lo scopo principale del server HTTP Apache è di fornire contenuto statico, mentre lo scopo principale della tecnologia Servlet è generare contenuto al volo (contenuto dinamico).
Basil Bourque,

1
@BasilBourque Ero confuso con Tomcat che stava effettivamente offrendo contenuti qui. Genererà solo il contenuto, non lo servirà quando utilizzato insieme ad Apache Http Server. Probabilmente hai ragione e io sono solo confuso, ma per me direi ancora, quando usato insieme, Apache serve, Tomcat genera contenuto statico quando richiesto. Se non viene usato Apache, Coyote in Tomcat farà il servizio, mentre Catalina e Jesper generano il contenuto dinamico.
Koray Tugay,

3
@KorayTugay Sì, il tuo ultimo commento è corretto. Se si utilizza Apache HTTP Server + Tomcat, i browser Web "vedono" solo AWS senza alcun indizio che Tomcat stia lavorando dietro le tende. AWS è un intermediario tra i client del browser Web e Tomcat. Se si utilizza Tomcat da solo, il modulo Coyote in Tomcat sostituisce AWS per rispondere alle richieste dei client del browser Web. Raccomando quest'ultimo (solo Tomcat) a meno che tu non sappia di avere esigenze molto speciali che sarebbero meglio affrontate da AWS.
Basil Bourque,

29

Tomcat è principalmente un server applicazioni, che serve richieste a servlet Java personalizzati o file JSP sul tuo server. Di solito viene utilizzato insieme al server HTTP Apache (almeno nella mia esperienza). Usalo per elaborare manualmente le richieste in arrivo.

Il server HTTP, da solo, è il migliore per servire contenuto statico ... file html, immagini, ecc.


9
Dubito Tomcat is primarily an application serveraffermazione.
Rachel,

6
tomcat è principalmente pensato per essere un application server. anche se non contenuti statici del server pure.
Scalabile

4
Sì, Tomcat è in effetti principalmente un server applicazioni, se il termine è inteso nel senso di un contenitore Servlet che genera contenuto dinamico consegnato ai browser Web. Come uno dei primi contenitori Servlet, questa è la ragione per cui Tomcat è.
Basil Bourque,

1
tomcat non è un application server, è un web server. javajee.com/web-server-web-container-and-application-server
Prateek Mishra

@PrateekMishra In base al collegamento fornito, la tua affermazione che Tomcat è un server Web non è corretta; è (principalmente) un contenitore web , noto anche come contenitore servlet .
skomisa,

21

un server apache è un server http che può servire qualsiasi semplice richiesta http, in cui il server tomcat è in realtà un contenitore servlet che può servire richieste servlet java.

Il server Web [apache] elabora le richieste del client Web (browser Web) e le inoltra al contenitore servlet [tomcat] e il contenitore elabora le richieste e invia la risposta che viene inoltrata dal server Web al client Web [browser].

Inoltre puoi controllare questo link per ulteriori chiarimenti: -

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

Controlla anche questa risposta per ulteriori ricerche: -

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


sites.google.com/site/sureshdevang/servlet-architecture Come hai spiegato, dai una visione migliore
Akitha_MJ

13

Se si utilizza la tecnologia Java (Servlet / JSP) per creare un'applicazione Web, probabilmente si utilizzerà Apache Tomcat. Tuttavia, se stai usando altre tecnologie come Perl, PHP o ruby, è meglio (più facile) usare Apache HTTP Server.


9
Questa risposta non ha senso per me. La prima frase è errata in quanto ci sono molti altri contenitori Servlet / JSP oltre a Tomcat, alcuni piuttosto popolari come Jetty, JBoss / Wildfly, Glassfish, WebSphere e molti altri. Sebbene popolare, Tomcat non domina, con solo una minoranza di quote di mercato. Per quanto riguarda la seconda frase, Tomcat viene spesso utilizzato come contenitore Servlet dietro Apache HTTP Server. E PHP ecc. Vengono spesso utilizzati con molti altri server Web come Nginx, Lighttpd e altri.
Basil Bourque,

3

Bene, Apache è un server web HTTP, dove come Tomcat è anche un server web per Servlet e JSP. Inoltre Apache è preferito su Apache Tomcat in tempo reale


19
Questa domanda è piuttosto vecchia e la tua risposta sembra duplicare quelle che sono state postate molto tempo fa. Le risposte sono apprezzate ma le nuove risposte dovrebbero contribuire ad aggiungere alla conversazione.
GargantuChet,

-2

Apache è un server Web HTTP che funge da HTTP.

Apache Tomcat è un contenitore servlet java. Funziona allo stesso modo del web server ma è personalizzato per eseguire pagine servlet java e JSP.


1
sì, la risposta è un po 'confusa come @ Basil Bourque ha detto sopra "Coyote è il modulo in Tomcat responsabile del servizio web, Catalina è il modulo che fa i servlet. e Jasper è il modulo che gestisce i JSP" ora dà chiarezza su come "CARATTERISTICHE DI TOMCAT come server web personalizzato per eseguire servlet java e pagine JSP !!!! "
Dev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.