Спецификация Java EE против реализации - PullRequest
2 голосов
/ 03 ноября 2019

Я недавно начал работать с Java EE и с трудом понимаю это. Я прочитал некоторые ответы здесь на SO, но я все еще чувствую, что есть некоторые пробелы в моем понимании. По сути, Java EE - это спецификация, а серверы приложений, такие как TOMCAT, Glassfish и т. Д., Имеют конкретные реализации. Кроме того, любой может предоставить реализацию для EE.

Итак, я скачал javax.sevlet-api-4.0.1-sources.jar из репозитория Maven, и я вижу, что это просто интерфейсы, и я предполагаю, что мы простоиспользовать их для сборки проекта?

В папке lib tomcat есть сервлет-api.jar. это реализация сервлета Tomcat? и если это так, то можно ли заменить его реализацией другой версии сервлета?

Теперь Hibernate является реализацией Persistence API. если я хочу использовать Hibernate с Tomcat. Мне просто нужно добавить JAR-файлы, связанные с Hibernate, в мое приложение и использовать их как для сборки, так и для запуска? без фактического получения контрактных классов.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

Если быть точным, Tomcat не является полноценным контейнером JavaEE, он обрабатывает только часть спецификации JavaEE (в основном, сервлет, jsp, jndi и некоторые другие).

И, как писал Андреас, вам нужен serlvet-api.jar для компиляции вашего кода (в противном случае HttpSerlvetRequest пропустит), но, поскольку tomcat уже предоставляет его (в качестве интерфейса), а также фактическую реализацию, вы должны добавить его в качестве «предоставленной» зависимости в файле maven.

2 голосов
/ 04 ноября 2019

Вам нужен jar-файл servlet-api при компиляции вашего кода, потому что это, например, HttpServletRequest. Вам не нужно включать этот jar-файл в ваше приложение, потому что он уже предоставляется контейнером сервлетов, в котором вы развертываете свой военный файл, например Tomcat.

С Tomcat, реализация изразличные классы сервлетов находятся в catalina.jar, по крайней мере, для Tomcat 9, например, ApplicationHttpRequest - это класс, реализующий HttpServletRequest. Вам не нужно это для компиляции кода.

...