ความแตกต่างระหว่าง Apache HTTP Server และ Apache Tomcat? [ปิด]


637

อะไรคือความแตกต่างของการทำงานระหว่าง Apache HTTP Server และ Apache Tomcat?

ฉันรู้ว่า Tomcat เขียนขึ้นใน Java และ HTTP Server อยู่ใน C แต่นอกเหนือจากนั้นฉันไม่ทราบว่าแตกต่างอย่างไร พวกเขามีฟังก์ชั่นที่แตกต่างกันอย่างไร


12
ฉันได้เพิ่มสรุปในบล็อกของฉันบางทีมันอาจจะช่วยให้คน: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Koray Tugay

36
ฉันสงสัยว่า OP กำลังถามอะไรและฉันไม่เห็นว่าทำไมมันถึงปิด โชคดีที่มีคำตอบอยู่
Florian F

4
Apache เว็บเซิร์ฟเวอร์และ Apache Tomcat เป็นเครื่องมือสองแบบที่แตกต่างกันที่ปรับมาเพื่อจุดประสงค์ที่แตกต่างกัน หากเราไม่สามารถแยกแยะกรณีการใช้ของพวกเขาด้วยข้อเท็จจริงและความเชี่ยวชาญอีกต่อไปเราก็จะต้องเสียใจ ไดรฟ์นี้เพื่อปิดคำถาม "โต้แย้ง" เกินความคาดหมาย บางทีผู้ดำเนินรายการจำเป็นต้องได้รับข้อมูลมากขึ้นและให้ความเห็นน้อยลง อย่างที่ @FlorianF พูดว่าอย่างน้อยก็มีคำตอบแล้ว
NeilG

2
ระบุจำนวน upvotes - สิ่งนี้ไม่ควรถูกปิด - แต่ควรถูกล็อคแทน - จริง ๆ แล้วมันเป็นคำถามที่ดีมากที่มีคำตอบที่เป็นประโยชน์
simbro

การclosedแจ้งให้ทราบเกี่ยวกับคำถามนี้บอกว่าต้องการคำตอบเพื่อให้มีเนื้อหาที่มีวัตถุประสงค์ แต่คาดว่าคำถามนี้จะสร้างเนื้อหาคำตอบแบบอัตนัย - คำตอบส่วนใหญ่ดูเหมือนจะมีเนื้อหาที่เป็นวัตถุประสงค์ (โดยเฉพาะคำตอบที่ได้รับ ควรถูกปิด ความกลัวของผู้กระทำไม่เคยเกิดขึ้นจริง ๆ และฉันไม่เห็นด้วยกับคำถามที่เคยเสี่ยงกับการเป็นผู้กระทำในตอนแรก
cellepo

คำตอบ:


475

Apache Tomcat ใช้เพื่อปรับใช้ Java Servlets และ JSP ของคุณ ดังนั้นในโปรเจ็กต์ Java ของคุณคุณสามารถสร้างไฟล์ WAR (ย่อมาจาก Web ARchive) ของคุณและวางลงในไดเร็กทอรี deploy ใน Tomcat

ดังนั้นโดยทั่วไป Apache เป็นเซิร์ฟเวอร์ HTTP ที่ให้บริการ HTTP Tomcat เป็น Servlet และ JSP Server ที่ให้บริการเทคโนโลยี Java

Tomcat รวมถึง Catalina ซึ่งเป็นคอนเทนเนอร์ servlet servlet ในตอนท้ายเป็นคลาส Java ไฟล์ JSP (ซึ่งคล้ายกับ PHP และไฟล์ ASP ที่เก่ากว่า) สร้างขึ้นในรหัส Java (HttpServlet) ซึ่งจะถูกคอมไพล์แล้วเป็นไฟล์. class โดยเซิร์ฟเวอร์และดำเนินการโดยเครื่องเสมือน Java


51
คุณตั้งใจทำอะไรโดย "Apache คือ [... ] ที่ให้บริการ HTTP" Tomcat นั้นเสิร์ฟ HTTP (ไฮเปอร์เท็กซ์) หรือไม่ ทำไม Tomcat ไม่สามารถเป็นเพียงโมดูล Apache "mod_java" คุณสามารถอธิบาย?
Peterino

30
Tomcat เป็นคอนเทนเนอร์ servlet servlet ในตอนท้ายเป็นคลาส Java ไฟล์ JSP (ซึ่งคล้ายกับไฟล์ PHP oder ASP) จะถูกสร้างเป็นโค้ด Java (HttpServlet) ซึ่งจะถูกคอมไพล์แล้วเป็นไฟล์. class โดยเซิร์ฟเวอร์และดำเนินการโดยเครื่องเสมือน Java - นอกจากนั้นฟอรัมนี้อธิบายความแตกต่างระหว่าง Apache HTTPD และ Tomcat ค่อนข้างดี: coderanch.com/t/85182/Tomcat/…
Peterino

17
Tomcat ได้นำเว็บเซิร์ฟเวอร์ที่มีความสามารถมาด้วย Tomcat เป็นคอนเทนเนอร์ของ Servlet / JSP และยังมีเว็บเซิร์ฟเวอร์ เว็บเซิร์ฟเวอร์ของ Tomcat ค่อนข้างดีสามารถจัดการกับความต้องการของเว็บไซต์ขนาดเล็กและขนาดกลางได้ ด้วยการรองรับ Java NIO และหน่วยความจำ 64 บิตเว็บไซต์ขนาดใหญ่กว่าบางเว็บอาจให้บริการได้เป็นอย่างดีโดยโมดูล Catalina ของ Tomcat ด้วยเหตุผลต่าง ๆ ผู้ใช้บางคนเลือกที่จะไม่สนใจ Catalina และใช้ความสามารถของ Servlet ของ Tomcat แทนhttpdผลิตภัณฑ์เว็บเซิร์ฟเวอร์Apache
Basil Bourque

21
การแก้ไขความคิดเห็นของฉัน: โคโยตี้เป็นโมดูลใน Tomcat รับผิดชอบการให้บริการเว็บ Catalina เป็นโมดูลที่ทำหน้าที่ Servlets Jasper เป็นโมดูลที่จัดการ JSP
Basil Bourque

17
@KorayTugay ใช่ Tomcat = ( Web Server + Servlet container + JSP environment ). เว็บเซิร์ฟเวอร์เปิดใช้งานตามค่าเริ่มต้นเมื่อคุณเรียกใช้startup.shสคริปต์ของ Tomcat โดยฟังที่พอร์ต 8080 สำหรับการเชื่อมต่อขาเข้า (การโทร HTTP) Tomcat เป็นจาวาบริสุทธิ์โดยมีเว็บเซิร์ฟเวอร์ (โคโยตี้) เป็นของตัวเอง Apache HTTP Server (AHS) ในทางตรงกันข้ามมีการดำเนินงานที่แยกจากกันอย่างสมบูรณ์ของเว็บเซิร์ฟเวอร์โดยใช้พื้นเมือง C / C ++ รหัส AHS นั้นยืดหยุ่นและทรงพลังมาก แต่มักจะเกินกำลัง เว็บเซิร์ฟเวอร์ของ Tomcat ทำงานได้ดีมาก ใช้ AHS หากจำเป็นจริงๆเท่านั้น
Basil Bourque

118

นอกเหนือจากคำตอบที่ดีข้างต้นฉันคิดว่าควรจะกล่าวว่า Tomcat มีเซิร์ฟเวอร์ HTTP ของตัวเองและทำงานได้อย่างสมบูรณ์ในการให้บริการเนื้อหาคงที่เช่นกัน ขึ้นอยู่กับการกำหนดค่าเครื่องเสมือน Java ของคุณจริง ๆ แล้วมันสามารถมีประสิทธิภาพสูงกว่าผ่านตัวเชื่อมต่อแบบดั้งเดิมใน apache เช่น mod_proxy และ mod_jk

ที่กล่าวว่าเซิร์ฟเวอร์ Tomcat ที่ได้รับการปรับแต่งอย่างเต็มที่ควรให้บริการไฟล์คงที่อย่างรวดเร็วและหากคุณมี Java servlets, JSPs และไฟล์ ColdFusion นอกเหนือจากเนื้อหาแบบคงที่คุณอาจพบว่า tomcat ทำงานได้อย่างยอดเยี่ยม


3
จริง และหลายคนยังคงใช้การตั้งค่า Apache เพิ่มเติมนอกเหนือจาก Tomcat .. ซึ่งไม่จำเป็นในกรณีส่วนใหญ่
Marco Schoolenberg

6
ส่วนที่มีประสิทธิภาพที่สุดของ apache http ที่เซิร์ฟเวอร์อื่น ๆ ไม่กี่สนับสนุนคือความสามารถในการกำหนดเส้นทางใหม่และเขียนคำขอใหม่ก่อนที่แอปพลิเคชันจะต้องเห็นมันคือผ่านmod_rewriteเครื่องยนต์และการฉีดสภาพแวดล้อมตามเงื่อนไข mod_proxyให้สมดุลภาระพื้นฐาน (และรวมกับ mod_jk ให้เซสชั่นพื้นฐานเหนียว / รัฐที่ใช้ร่วมกันระหว่างอินสแตนซ์โหลดแคตตาล็อกสมดุล)
cowbert

81
  1. Apache เป็นเซิร์ฟเวอร์ http วัตถุประสงค์ทั่วไปซึ่งรองรับตัวเลือกขั้นสูงจำนวนมากที่ Tomcat ไม่ทำ
  2. แม้ว่า Tomcat สามารถใช้เป็นเซิร์ฟเวอร์ http วัตถุประสงค์ทั่วไปคุณยังสามารถตั้งค่า Apache และ Tomcat ให้ทำงานร่วมกับ Apache ที่ให้บริการเนื้อหาแบบคงที่และส่งต่อคำขอสำหรับเนื้อหาแบบไดนามิกไปยัง Tomcat

ท้ายที่สุดแล้วเว็บทั้งหมดจะหยุดนิ่งหรือไม่ ความเข้าใจของฉันคือ Tomcat สร้างเนื้อหา "แบบคงที่" (แบบไดนามิก) จากนั้น Apache จะให้บริการสิ่งนี้ ดังนั้น Tomcat จะไม่ให้บริการเนื้อหาแบบไดนามิกหรืออะไรจริง ๆ มันจะสร้างเฉพาะเมื่อจำเป็น
Koray Tugay

11
@KorayTugay คุณสับสนข้อกำหนดของคุณ "สร้างเมื่อต้องการ" คือความหมายของ "ไดนามิก" และตรงกันข้ามกับ "คงที่" วัตถุประสงค์หลักของ Apache HTTP Server คือการให้บริการเนื้อหาแบบคงที่ในขณะที่วัตถุประสงค์หลักของเทคโนโลยี Servlet คือการสร้างเนื้อหาแบบทันที (เนื้อหาแบบไดนามิก)
Basil Bourque

1
@BasilBourque ฉันสับสนกับ Tomcat ที่ให้บริการเนื้อหาที่นี่จริง ๆ มันจะสร้างเนื้อหาเท่านั้นมันจะไม่แสดงเมื่อใช้ร่วมกับ Apache Http Server บางทีคุณพูดถูกและฉันก็สับสน แต่สำหรับฉันฉันยังคงพูดว่าเมื่อใช้ร่วมกัน Apache ให้บริการ Tomcat สร้างเนื้อหาคงที่เมื่อจำเป็น หากไม่มีการใช้งาน Apache โคโยตี้ใน Tomcat จะให้บริการในขณะที่ Catalina และ Jesper กำลังสร้างเนื้อหาแบบไดนามิก
Koray Tugay

3
@KorayTugay ใช่ความคิดเห็นล่าสุดของคุณถูกต้อง หากใช้ Apache HTTP Server + Tomcat แสดงว่าเว็บเบราว์เซอร์เท่านั้น "เห็น" AWS โดยไม่มีร่องรอยว่า Tomcat ทำงานอยู่หลังม่าน AWS เป็นคนกลางระหว่างเว็บเบราว์เซอร์ไคลเอ็นต์และ Tomcat หากใช้ Tomcat เพียงอย่างเดียวโมดูล Coyote ใน Tomcat จะแทนที่ AWS เพื่อร้องขอฟิลด์จากเว็บเบราว์เซอร์ไคลเอ็นต์ ฉันขอแนะนำตัวหลัง (Tomcat เพียงอย่างเดียว) เว้นแต่คุณจะรู้ว่าคุณมีความต้องการพิเศษที่ AWS ให้ความสำคัญมากขึ้น
Basil Bourque

29

Tomcat เป็นแอปพลิเคชั่นเซิร์ฟเวอร์เป็นหลักซึ่งให้บริการการร้องขอไปยังเซิร์ฟเล็ต Java ที่สร้างขึ้นเองหรือไฟล์ JSP บนเซิร์ฟเวอร์ของคุณ มันมักจะใช้ร่วมกับเซิร์ฟเวอร์ Apache HTTP (อย่างน้อยในประสบการณ์ของฉัน) ใช้เพื่อประมวลผลคำขอเข้ามาด้วยตนเอง

เซิร์ฟเวอร์ HTTP โดยตัวของมันเองดีที่สุดสำหรับการแสดงเนื้อหาแบบคงที่ ... ไฟล์ html, รูปภาพ, ฯลฯ


9
ฉันสงสัยTomcat is primarily an application serverคำสั่ง
Rachel

6
Tomcat มีความหมายเป็นเซิร์ฟเวอร์แอปพลิเคชันเป็นหลัก แม้ว่ามันจะเซิร์ฟเวอร์เนื้อหาแบบคงที่เช่นกัน
สามารถปรับขนาดได้

4
ใช่ Tomcat เป็นแอปพลิเคชั่นเซิร์ฟเวอร์เป็นหลักถ้าคำนั้นหมายถึงในแง่ของคอนเทนเนอร์ Servlet ที่สร้างเนื้อหาแบบไดนามิกที่ส่งไปยังเว็บเบราว์เซอร์ เป็นหนึ่งในคอนเทนเนอร์ Servlet แรกนั่นคือเหตุผลของ Tomcat
Basil Bourque

1
Tomcat ไม่ใช่เซิร์ฟเวอร์แอปพลิเคชัน แต่เป็นเว็บเซิร์ฟเวอร์ javajee.com/web-server-web-container-and-application-server
Prateek Mishra

@PrateekMishra ตามลิงค์ที่คุณระบุข้อความสั่งของคุณว่า tomcat เป็นเว็บเซิร์ฟเวอร์ไม่ถูกต้อง มันเป็น (ส่วนใหญ่) กภาชนะเว็บยังเป็นที่รู้จักในฐานะที่เป็นภาชนะ servlet
skomisa

21

เซิร์ฟเวอร์ apache เป็นเซิร์ฟเวอร์ http ซึ่งสามารถให้บริการการร้องขอ HTTP แบบง่าย ๆ ได้โดยที่เซิร์ฟเวอร์ Tomcat นั้นเป็นคอนเทนเนอร์ servlet ซึ่งสามารถให้บริการการร้องขอ Java servlet ได้

เว็บเซิร์ฟเวอร์ [apache] ประมวลผลคำขอของไคลเอ็นต์เว็บ (เว็บเบราว์เซอร์) และส่งต่อไปยัง servlet container [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

หากคุณใช้เทคโนโลยีจาวา (Servlet / JSP) สำหรับการสร้างเว็บแอปพลิเคชันคุณอาจจะใช้ Apache Tomcat อย่างไรก็ตามหากคุณใช้เทคโนโลยีอื่น ๆ เช่น Perl, PHP หรือ ruby ​​จะดีกว่า (ง่ายกว่า) ในการใช้ Apache HTTP Server


9
คำตอบนี้ไม่สมเหตุสมผลสำหรับฉัน ประโยคแรกนั้นผิดที่มีภาชนะอื่น ๆ อีกมากมายนอกเหนือจาก Tomcat ซึ่งเป็นที่นิยมเช่น Jetty, JBoss / Wildfly, Glassfish, WebSphere และอีกมากมาย ในขณะที่ได้รับความนิยม Tomcat ไม่ได้ครองส่วนแบ่งการตลาดเพียงเล็กน้อย สำหรับประโยคที่สอง Tomcat มักจะใช้เป็นคอนเทนเนอร์ Servlet หลัง Apache HTTP Server และ PHP ฯลฯมักใช้กับเว็บเซิร์ฟเวอร์อื่น ๆเช่น Nginx, Lighttpd และอื่น ๆ
Basil Bourque

3

Apache คือเว็บเซิร์ฟเวอร์ HTTP โดยที่ Tomcat เป็นเว็บเซิร์ฟเวอร์สำหรับ Servlets และ JSP ด้วย ยิ่งไปกว่านั้น Apache เป็นที่ต้องการมากกว่า Apache Tomcat แบบเรียลไทม์


19
คำถามนี้ค่อนข้างเก่าและคำตอบของคุณดูเหมือนจะซ้ำกับคำถามที่โพสต์เมื่อนานมาแล้ว คำตอบได้รับการชื่นชม แต่คำตอบใหม่ควรช่วยเพิ่มการสนทนา
GargantuChet

-2

Apache เป็นเว็บเซิร์ฟเวอร์ HTTP ซึ่งทำหน้าที่เป็น HTTP

Apache Tomcat เป็นคอนเทนเนอร์ Java servlet มันมีคุณสมบัติเช่นเดียวกับเว็บเซิร์ฟเวอร์ แต่ได้รับการปรับแต่งให้เรียกใช้งาน Java servlet และหน้า JSP


1
ใช่คำตอบคือความสับสนเล็กน้อยตามที่ @ Basil Bourque กล่าวไว้ข้างต้น "Coyote เป็นโมดูลใน Tomcat ที่รับผิดชอบการให้บริการเว็บ Catalina เป็นโมดูลที่ทำหน้าที่ Servlets และ Jasper เป็นโมดูลที่จัดการ JSPs" ตอนนี้มันให้ความกระจ่างเกี่ยวกับ "TOMCAT FEATURES Same เป็นเว็บเซิร์ฟเวอร์ที่ปรับแต่งเพื่อรัน java servlet และหน้า JSP !!!! "
Dev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.