Если вы загрузили файл, который был сохранен, в отличие от того, чтобы быть в документе, невозможно определить, когда загрузка будет завершена, поскольку она не входит в объем текущего документа, а отдельный процесс в браузера.
Вот довольно старое сравнение . Таким образом, возможности каждого сервера, несомненно, улучшились.
Редактировать: Вот текущее сравнение.
И то и другое более чем достаточно стабильно для производственного использования. Это действительно сводится к особенностям.
Они на самом деле не сопоставимы.
Apache Tomcat не является сервером J2EE. Это просто контейнер сервлетов для веб-приложений. Ничего более. Если вам нужны реализации J2EE API, вы должны взять их из других источников. Например, используя сервер Apache Geronimo, который использует Tomcat в качестве своего контейнера, или принимая файлы JAR из Glassfish.
Glassfish - это полный Java-сервер приложений с реализацией для таких API, как JPA, EJB и т. Д. Glassfish содержит Servlet Engine, первоначально использовавшийся Tomcat, но они улучшили его (не знаю, что именно). Более поздние серверы Glassfish используют другой контейнер, использующий grizzly
, который использует NIO API для ввода / вывода и достаточно хорошо масштабируется. Насколько я знаю, сервлетный движок Glassfish более производительный. Здесь я нашел хороший тест (хотя он немного староват):
http://weblogs.java.net/blog/sdo/archive/2007/05/how_to_test_con.html
Это может быть немного устаревшим и, возможно, даже немного предвзятым, но это из Оракула. Вы можете перейти к разделу для сравнения Glass Fish с Tom Cat
http://java.sun.com/developer/technicalArticles/glassfish/GFandMySQL_Part1.html
Большой вопрос: почему? Как вы думаете, что вам понадобится Glassfish вместо Tomcat или Jetty? Может быть, утилиты управления?
Большинство вещей, которые вы хотите, кроме базового контейнера сервлета, легко подключаются.
Так что, хотя Glassfish и в порядке, нет смысла двигаться «просто потому что». Большинство производственных служб, которые я построил, работают на простых старых контейнерах сервлетов, не используя ни одной из специфических для реализации функций.