Sự khác biệt giữa Máy chủ HTTP Apache và Tomcat của Apache? [đóng cửa]


637

Sự khác biệt về chức năng giữa Máy chủ HTTP Apache và Tomcat của Apache là gì?

Tôi biết rằng Tomcat được viết bằng Java và Máy chủ HTTP bằng C, nhưng khác với điều đó tôi không thực sự biết chúng được phân biệt như thế nào. Họ có chức năng khác nhau?


12
Tôi đã thêm một bản tóm tắt trong blog của mình, có thể nó giúp được ai đó: tugay.biz/2014/11/what-is-tomcat-is-it-web-server-what.html
Koray Tugay

36
Tôi đã tự hỏi chính xác những gì OP đang hỏi, và tôi không hiểu tại sao nó bị đóng cửa. May mắn là có câu trả lời.
Florian F

4
Máy chủ web Apache và Apache Tomcat là hai công cụ khác nhau được điều chỉnh cho các mục đích khác nhau. Nếu chúng ta không còn có thể phân biệt các trường hợp sử dụng của họ bằng thực tế và chuyên môn thì chúng ta sẽ đến trạng thái xin lỗi. Ổ đĩa này để đóng các câu hỏi "tranh luận" đã vượt quá. Có lẽ người điều hành cần được thông báo nhiều hơn và ít ý kiến ​​hơn. Như @FlorianF nói, ít nhất là có câu trả lời ngay bây giờ.
NeilG

2
Với số lượng upvote - điều này không nên bị đóng - mà thay vào đó nên bị khóa - vì đây thực sự là một câu hỏi rất hay với những câu trả lời hữu ích.
simbro

Các closedthông báo về Câu hỏi này nói nó đòi hỏi câu trả lời cho có nội dung khách quan, nhưng dự kiến Câu hỏi này để thay thế sẽ tạo ra nội dung trả lời chủ - đa số Answers dường như chứa nội dung khách quan (đặc biệt là cao hơn bình chọn Answers) chứ không phải là chủ quan - vì vậy Câu hỏi này nên được ĐÓNG CỬA. Nỗi sợ về sự chủ quan không bao giờ thực sự xảy ra và tôi không đồng ý Câu hỏi có nguy cơ bị chủ quan ngay từ đầu.
cellepo

Câu trả lời:


475

Apache Tomcat được sử dụng để triển khai Java Servlets và JSP của bạn. Vì vậy, trong dự án Java của bạn, bạn có thể xây dựng tệp WAR (viết tắt của Web ARchive) và chỉ cần thả nó vào thư mục triển khai trong Tomcat.

Vì vậy, về cơ bản Apache là một Máy chủ HTTP, phục vụ HTTP. Tomcat là một Máy chủ Servlet và JSP phục vụ các công nghệ Java.

Tomcat bao gồm Catalina, là một thùng chứa servlet. Một servlet, ở cuối, là một lớp Java. Các tệp JSP (tương tự như PHP và các tệp ASP cũ hơn) được tạo thành mã Java (HttpServlet), sau đó được biên dịch thành các tệp. Class bởi máy chủ và được thực thi bởi máy ảo Java.


51
Bạn dự định gì khi "Apache là [...] phục vụ HTTP"? Không phải Tomcat cũng đang phục vụ (siêu văn bản hay còn gọi là) HTTP? Tại sao Tomcat không thể đơn giản là một mô-đun Apache "mod_java"? Bạn có thể giải thích?
Peterino

30
Tomcat là một thùng chứa servlet. Một servlet, ở cuối, là một lớp Java. Các tệp JSP (tương tự như các tệp ASP oder PHP) được tạo thành mã Java (HttpServlet), sau đó được biên dịch thành các tệp. Class bởi máy chủ và được thực thi bởi máy ảo Java. - Ngoài ra, diễn đàn này ở đây giải thích sự khác biệt giữa Apache HTTPD và Tomcat khá tốt: coderanch.com/t/85182/Tomcat/ Kẻ
Peterino

17
Tomcat thực sự mang theo một máy chủ web có khả năng. Tomcat là một thùng chứa Servlet / JSP cũng cung cấp một máy chủ web. Máy chủ web của Tomcat khá tốt, có thể đáp ứng hầu hết các nhu cầu trang web vừa và nhỏ. Với sự hỗ trợ cho Java NIO và bộ nhớ 64 bit, thậm chí một số trang web quy mô lớn hơn có thể được mô đun Catalina của Tomcat phục vụ tốt. Vì nhiều lý do, một số người chọn bỏ qua Catalina và thay vào đó sử dụng các khả năng Servlet của Tomcat đằng sau httpdsản phẩm máy chủ web Apache .
Basil Bourque

21
Sửa lỗi cho nhận xét của tôi: Coyote là mô-đun trong Tomcat chịu trách nhiệm phục vụ web. Catalina là mô-đun làm Servlets. Jasper là mô-đun xử lý các tệp tin.
Basil Bourque

17
@KorayTugay Vâng. Tomcat = ( Web Server + Servlet container + JSP environment ). Máy chủ web được BẬT theo mặc định khi bạn chạy startup.shtập lệnh của Tomcat , nghe trên cổng 8080 cho các kết nối đến (các cuộc gọi HTTP). Tomcat là Java thuần túy, với triển khai máy chủ web riêng (Coyote). Các Apache HTTP Server (AHS), ngược lại, có một thực hiện hoàn toàn riêng biệt của một máy chủ web, sử dụng có nguồn gốc C / C ++. AHS rất linh hoạt và mạnh mẽ, nhưng thường là quá mức cần thiết. Máy chủ web của Tomcat hoạt động rất tốt. Chỉ sử dụng AHS nếu thực sự cần thiết.
Basil Bourque

118

Ngoài các câu trả lời hay ở trên, tôi nghĩ nên nói rằng Tomcat có máy chủ HTTP riêng được tích hợp sẵn và cũng có đầy đủ chức năng trong việc cung cấp nội dung tĩnh. Tùy thuộc vào cấu hình máy ảo java của bạn, nó thực sự có thể vượt trội hơn thông qua các trình kết nối truyền thống trong apache như mod_proxy và mod_jk.

Điều đó nói rằng một máy chủ Tomcat được tối ưu hóa hoàn toàn sẽ phục vụ các tệp tĩnh nhanh chóng và nếu bạn có các máy chủ Java, các tệp JSP và ColdFusion ngoài nội dung tĩnh, bạn có thể thấy tomcat thực hiện công việc tuyệt vời.


3
Thật. Và nhiều người vẫn sử dụng một thiết lập Apache bổ sung bên cạnh Tomcat của họ .. điều này không cần thiết trong hầu hết các trường hợp.
Marco Schoolenberg

6
Phần mạnh nhất của apache http mà ít máy chủ khác hỗ trợ là khả năng định tuyến lại và viết lại yêu cầu trước khi ứng dụng phải xem nó, cụ thể là thông qua mod_rewritecông cụ và môi trường có điều kiện. mod_proxycung cấp cân bằng tải thô sơ (và kết hợp với mod_jk cung cấp phiên dính / trạng thái chia sẻ thô sơ giữa các trường hợp tomcat cân bằng tải).
cowbert

81
  1. Apache là một máy chủ http có mục đích chung, hỗ trợ một số tùy chọn nâng cao mà Tomcat không có.
  2. Mặc dù Tomcat có thể được sử dụng làm máy chủ http cho mục đích chung, bạn cũng có thể thiết lập Apache và Tomcat để hoạt động cùng với Apache phục vụ nội dung tĩnh và chuyển tiếp các yêu cầu cho nội dung động tới Tomcat.

Không phải tất cả các trang web là tĩnh ở cuối? Hiểu biết của tôi là, Tomcat tạo ra "một" nội dung tĩnh (động) sau đó Apache sẽ phục vụ việc này. Vì vậy, Tomcat sẽ không bao giờ thực sự phục vụ nội dung động hoặc bất cứ điều gì, nó sẽ chỉ tạo ra nó khi được yêu cầu.
Koray Tugay

11
@KorayTugay Bạn đang nhầm lẫn các điều khoản của bạn. "Tạo nó khi được yêu cầu" chính xác là "động" nghĩa là gì và ngược lại với "tĩnh". Mục đích chính của Máy chủ HTTP Apache là phục vụ nội dung tĩnh, trong khi mục đích chính của công nghệ Servlet là tạo nội dung nhanh chóng (nội dung động).
Basil Bourque

1
@BasilBourque Tôi đã nhầm lẫn với Tomcat thực sự phục vụ nội dung ở đây. Nó sẽ chỉ tạo ra nội dung, nó sẽ không phục vụ nó khi được sử dụng cùng với Máy chủ HTTP Apache. Có lẽ bạn đúng và tôi chỉ bối rối nhưng với tôi tôi vẫn sẽ nói, khi được sử dụng cùng nhau, Apache phục vụ, Tomcat tạo ra nội dung tĩnh khi được yêu cầu. Nếu không sử dụng Apache, Coyote trong Tomcat sẽ thực hiện việc phục vụ, trong khi Catalina và Jesper đang tạo ra nội dung động.
Koray Tugay

3
@KorayTugay Vâng, nhận xét cuối cùng của bạn là chính xác. Nếu sử dụng Apache HTTP Server + Tomcat, thì các trình duyệt web chỉ "nhìn thấy" AWS mà không có manh mối nào cho thấy Tomcat đang làm việc đằng sau màn cửa. AWS là một người trung gian giữa các ứng dụng khách trình duyệt web và Tomcat. Nếu chỉ sử dụng Tomcat, thì mô-đun Coyote trong Tomcat thay thế AWS cho các yêu cầu trường từ các máy khách trình duyệt web. Tôi khuyên bạn nên sử dụng thứ hai (một mình Tomcat) trừ khi bạn biết bạn có nhu cầu rất đặc biệt sẽ được AWS giải quyết tốt hơn.
Basil Bourque

29

Tomcat chủ yếu là một máy chủ ứng dụng, phục vụ các yêu cầu đối với các tệp Java hoặc tệp tin được xây dựng tùy chỉnh trên máy chủ của bạn. Nó thường được sử dụng cùng với máy chủ HTTP Apache (ít nhất là theo kinh nghiệm của tôi). Sử dụng nó để xử lý thủ công các yêu cầu đến.

Bản thân máy chủ HTTP là tốt nhất để phục vụ nội dung tĩnh ... tệp html, hình ảnh, v.v.


9
Tôi nghi ngờ Tomcat is primarily an application servertuyên bố.
Rachel

6
tomcat chủ yếu có nghĩa là một máy chủ ứng dụng. mặc dù nó cũng làm máy chủ nội dung tĩnh.
Có thể mở rộng

4
Có Tomcat thực sự chủ yếu là một máy chủ ứng dụng, nếu thuật ngữ này có nghĩa là một thùng chứa Servlet tạo ra nội dung động được gửi đến các trình duyệt web. Là một trong những container Servlet đầu tiên, đó là lý do tồn tại của Tomcat.
Basil Bourque

1
tomcat không phải là một máy chủ ứng dụng, nó là một máy chủ web. javajee.com/web-server-web-container-and-application-server
Prateek Mishra

@PrateekMishra Dựa trên liên kết bạn cung cấp, tuyên bố của bạn rằng tomcat là một máy chủ web là không chính xác; nó (chủ yếu) là một bộ chứa web , còn được gọi là bộ chứa servlet .
skomisa

21

một máy chủ apache là một máy chủ http có thể phục vụ bất kỳ yêu cầu http đơn giản nào, trong đó máy chủ tomcat thực sự là một thùng chứa servlet có thể phục vụ các yêu cầu java servlet.

Máy chủ web [apache] xử lý các yêu cầu máy khách web (trình duyệt web) và chuyển tiếp nó tới thùng chứa servlet [tomcat] và vùng chứa xử lý các yêu cầu và gửi phản hồi được máy chủ web chuyển tiếp đến máy khách web [trình duyệt].

Ngoài ra, bạn có thể kiểm tra liên kết này để làm rõ hơn: -

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

Đồng thời kiểm tra câu trả lời này để nghiên cứu thêm: -

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


sites.google.com/site/sureshdevang/servlet-architecture Như bạn giải thích điều này cho cái nhìn tốt hơn
Akitha_MJ

13

Nếu bạn đang sử dụng công nghệ java (Servlet / JSP) để tạo ứng dụng web, có thể bạn sẽ sử dụng Apache Tomcat. Tuy nhiên, nếu bạn đang sử dụng các công nghệ khác như Perl, PHP hoặc ruby, thì tốt hơn (dễ dàng hơn) để sử dụng Máy chủ HTTP Apache.


9
Câu trả lời này không có ý nghĩa với tôi. Câu đầu tiên sai ở chỗ có nhiều thùng chứa Servlet / JSP khác ngoài Tomcat, một số khá phổ biến như Jetty, JBoss / Wildfly, Glassfish, WebSphere và nhiều hơn nữa. Mặc dù phổ biến, Tomcat không chiếm ưu thế, chỉ chiếm thiểu số thị phần. Đối với câu thứ hai, Tomcat thường được sử dụng làm thùng chứa Servlet phía sau Máy chủ HTTP Apache. Và PHP, vv thường được sử dụng với một số Máy chủ web khác như Nginx, Lighttpd và các máy chủ khác.
Basil Bourque

3

Chà, Apache là máy chủ web HTTP, trong đó Tomcat cũng là máy chủ web cho Servlets và JSP. Hơn nữa, Apache được ưa thích hơn Apache Tomcat trong thời gian thực


19
Câu hỏi này khá cũ và câu trả lời của bạn dường như trùng lặp với những câu hỏi đã được đăng từ lâu. Câu trả lời được đánh giá cao nhưng câu trả lời mới sẽ giúp thêm vào cuộc trò chuyện.
GargantuChet

-2

Apache là một máy chủ web HTTP hoạt động như HTTP.

Apache Tomcat là một thùng chứa java servlet. Nó có tính năng tương tự như máy chủ web nhưng được tùy chỉnh để thực thi các trang java servlet và JSP.


1
có câu trả lời hơi khó hiểu khi @ Basil Bourque nói ở trên "Coyote là mô-đun trong Tomcat chịu trách nhiệm phục vụ web, Catalina là mô-đun thực hiện Servlets. Và Jasper là mô-đun xử lý các tệp tin" bây giờ nó cho thấy rõ về cách "TOMCAT TÍNH NĂNG Tương tự như máy chủ web được tùy chỉnh để thực thi java servlet và các trang JSP !!!! "
Dev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.