我是一名很长时间的ASP.NET开发人员,正在尝试自学java。我已下载Jetty和基本的Web应用程序设置。 Head First Servlets和JSP中的教程告诉我在编译时引用容器的servlet-api.jar(或Jetty的案例中的servlet-api-3.0.jar)文件,这是有意义的,因为我正在扩展servlet类和所有,但是这不会将我的应用程序绑定到特定容器的servlet实现吗?如果我针对Jetty编译我的应用程序,我是否仍然可以在Tomcat或任何EE服务器(glassfish,jboss等)下部署应用程序?
答案 0 :(得分:2)
不,这不应该是一个问题,因为您没有引用特定于servlet的类。 servlet-api.jar
是一个记录良好的规范,采用多个接口和抽象类的形式。
每个容器都必须有一个这个JAR的副本(可能使用不同的Java版本或编译器编译),因为它实现了规范,但API本身永远不会改变。但请注意,您实际上不必引用容器提供的JAR。您可以安全地使用maven的版本或您可以找到的任何其他版本。它们都是兼容的。由于各种许可不兼容,有时它们不会捆绑在一起。
话虽如此:写一次,到处运行也适用于此。
答案 1 :(得分:1)
你没有对jar编码,你正在编写jar恰好包含的规范。提供Web容器的任何服务器都将具有此规范的实现,其中包含的jar完全不相关。
只要您只对规范进行编码,那么您就不会受到任何服务器实现的约束。
在编译和运行时使用jar来解决您所需的类依赖性。您可以使用任何在编译时提供必要API依赖性的jar,但在运行时,您将隐式使用特定服务器提供的实现。我隐含地说,因为您不必为自己的webapp做任何特定配置以包含标准API或它的实现,服务器将为您提供,而不像独立应用程序。