2008-08-27 55 views
510

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

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

+10

Tôi đã thêm một bản tóm tắt trong blog của tôi, có lẽ nó giúp ai đó: http://www.tugay.biz/2014/11 /what-is-tomcat-is-it-web-server-what.html –

+13

Tôi đã tự hỏi chính xác những gì OP đã hỏi, và tôi không thấy lý do tại sao nó bị đóng cửa. May mắn có câu trả lời. –

Trả lời

361

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 Servlet và JSP Server phục vụ các công nghệ Java.

Tomcat là một thùng chứa servlet. Một servlet, cuối cùng, 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.

+1

Tôi biết rằng các tập lệnh Perl có thể chạy trong tomcat. Điều này có đúng không? – serengeti12

+32

Bạn có ý định gì bởi "Apache là [...] phục vụ HTTP"? Không phải Tomcat cũng đang phục vụ (hypertext aka) HTTP? Tại sao Tomcat không thể chỉ đơn thuần là một mô-đun Apache "mod_java"? Bạn có thể giải thích? – Peterino

+26

Tomcat là một thùng chứa servlet. Một servlet, cuối cùng, là một lớp Java. Các tệp JSP (tương tự như các tệp ASP của 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: http://www.coderanch.com/t/85182/Tomcat/difference-between-Apache-HTTP-server – Peterino

20

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 servlet Java hoặc các tệp JSP được tạo tùy chỉnh trên máy chủ của bạn. Nó thường được sử dụng kết hợp với máy chủ Apache HTTP (ít nhất là trong kinh nghiệm của tôi). Sử dụng nó để xử lý các yêu cầu gửi đến theo cách thủ công.

Máy chủ HTTP, bởi chính nó, là tốt nhất cho phục vụ tối đa nội dung tĩnh ... file html, hình ảnh, vv

+8

Tôi nghi ngờ 'Tomcat chủ yếu là một tuyên bố của máy chủ ứng dụng'. – Rachel

+4

tomcat chủ yếu * có nghĩa là * là một máy chủ ứng dụng. mặc dù nó * cũng * nội dung tĩnh của máy chủ. – Scalable

+0

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à theo ý nghĩa của một thùng chứa Servlet tạo ra nội dung động được phân phối cho các trình duyệt web. Là một trong những container Servlet đầu tiên, đó là lý do của Tomcat. –

90

Ngoài các câu trả lời hay ở trên, tôi nghĩ rằng Tomcat có máy chủ HTTP riêng của nó được tích hợp vào nó và hoàn toàn có chức năng phục vụ 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ể hoạt động tốt hơn thông qua các kết nối truyền thống trong apache như mod_proxy và mod_jk.

Điều đó nói rằng máy chủ Tomcat được tối ưu hóa hoàn toàn sẽ phân phát tệp tĩnh nhanh và nếu bạn có Java servlets, JSP và tệp 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.

+1

Đúng. Và nhiều người vẫn sử dụng một thiết lập Apache phụ bên cạnh Tomcat của họ .. đó là không cần thiết trong hầu hết các trường hợp. –

+1

Phần mạnh nhất của apache http mà một vài 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 nhìn thấy nó, cụ thể là thông qua công cụ 'mod_rewrite' và tiêm môi trường có điều kiện. 'mod_proxy' cung cấp cân bằng tải thô sơ (và kết hợp với mod_jk cung cấp phiên thô sơ/trạng thái chia sẻ giữa các thể hiện tomcat cân bằng tải). – cowbert

9

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.

+5

Câu trả lời này không có ý nghĩa với tôi. Câu đầu tiên là sai trong đó có rất nhiều Servlet/JSP container bên cạnh Tomcat, một số khá phổ biến như Jetty, JBoss/Wildfly, Glassfish, WebSphere, và nhiều hơn nữa. Trong khi phổ biến, Tomcat không thống trị, chỉ với một phần nhỏ thị phần. Đối với câu thứ hai, Tomcat thường được sử dụng như một thùng chứa Servlet phía sau Apache HTTP Server. Và PHP vv là [thường được sử dụng với một số máy chủ web khác] (http://en.m.wikipedia.org/wiki/PHP#Use) chẳng hạn như Nginx, Lighttpd và những người khác. –

-1

Apache là một máy chủ web HTTP nó phục vụ như HTTP nhưng apache tomcat là một thùng chứa java servlet, các tính năng CNTT Giống như máy chủ web được tùy chỉnh để thực thi các trang servlet và JSP java.

+4

Câu trả lời này có một chút khó hiểu – mac

+1

câu trả lời có hơi khó hiểu như @ Basil Bourque đã nói ở trên "Coyote là mô-đun trong Tomcat chịu trách nhiệm về việc phân phát web, Catalina là mô-đun thực hiện Servlets. Jasper là mô-đun xử lý các JSP" cho rõ ràng về cách "các tính năng TOMCAT Giống như máy chủ web được tùy chỉnh để thực thi các trang servlet và JSP java !!!!" – Dev

60
  1. Apache là 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 thực hiện.
  2. Mặc dù Tomcat có thể được sử dụng như một máy chủ http mục đích chung, bạn cũng có thể thiết lập Apache và Tomcat để làm việc 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.
+0

Không phải tất cả các trang web đều là tĩnh ở cuối? Sự 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ụ điều này. Vì vậy Tomcat sẽ không bao giờ thực sự phục vụ nội dung động hay bất cứ thứ gì, nó sẽ chỉ tạo ra nó khi cần thiết. –

+7

@KorayTugay Bạn đang nhầm lẫn với các điều khoản của mình. "Tạo ra nó khi được yêu cầu" là chính xác những gì "động" có nghĩa là, và là rất ngược lại của "tĩnh". Mục đích chính của Apache HTTP Server 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 trực tuyến (nội dung động). –

+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 Apache Http Server. Có lẽ bạn là đúng và tôi chỉ nhầm lẫn 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ần thiết. Nếu không sử dụng Apache, Coyote trong Tomcat sẽ thực hiện việc phân phát, trong khi Catalina và Jesper đang tạo ra nội dung động. –

2

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

+14

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 câu trả lờ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

14

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

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

Các vấn đề liên quan