代码之家  ›  专栏  ›  技术社区  ›  Sheel Pancholi

Eclipse-在“服务器上运行”中选择服务器与设置“目标运行时”

  •  0
  • Sheel Pancholi  · 技术社区  · 7 年前

    当我们在Eclipse中创建动态web项目时,我们可以选择设置目标运行时。这基本上设置了类路径,以确保我们的项目找到项目运行所需的所有服务器类。然后,当我们通过单击“运行方式”来运行项目时->“在服务器上运行”,我们再次获得了一个服务器列表供选择。我知道我们总是可以选择“运行项目时始终使用此服务器”。但我的问题是,当您已经选择了目标运行时时,向用户提供一个服务器列表,供用户选择以再次运行其项目,背后的原理是什么。它像“在不同于目标运行时的服务器上测试项目”功能吗???

    2 回复  |  直到 7 年前
        1
  •  0
  •   fg78nc    7 年前

    当您为项目指定服务器运行时环境时,服务器容器JAR将被贡献到项目的类路径中。此外,IDE不允许您添加任何目标运行时服务器不支持的项目方面。这意味着目标运行时将确定可能的项目方面。 创建项目后,服务器容器类路径将贡献给项目的类路径,所以项目所需的和服务器容器中可用的任何JAR都将可用于您的项目。例如,如果您的项目需要Java Servlet API,并且添加Apache Tomcat作为目标运行时,Tomcat Catalina-Java Servlet API将在项目类路径上可用,并且此运行时环境提供的所有JAR将用于编译。这意味着您不需要手动将Servlet API JAR添加到项目类路径中,目标运行时将提供它们。 编译后,一旦包含了所有必要的JAR,您就可以在其他服务器上运行项目,而不必只在目标运行时上运行。 例如,在开发针对Apache Tomcat的Java Web应用程序时,编译后可以将其部署到另一个servlet容器或应用程序服务器上。

    回答最后一个问题:目标运行时将提供Servlet API,以便您可以编译项目。否则,您必须手动添加JAR以使用Servlet API,例如HttpServlet或HttpServletRequest或HttpServletResponse对象。如果不在类路径上分配JAR,无论如何都无法编译,因为依赖关系无法解析。关于您的问题,运行时将使用哪个实现-这取决于项目设置。例如,如果您使用maven作为构建工具,那么在maven中您可以声明依赖范围:编译范围,这是默认的,意味着在编译期间,依赖关系应该在项目的类路径中可用。但如果您指出提供的范围,则意味着JDK或服务器容器将在运行时提供依赖关系。因此,对于Servlet API,例如,如果您指示提供的依赖范围,您将在运行时获得Servlet容器提供的Servlet API,即您选择“在服务器上运行”的同一容器

        2
  •  0
  •   Brent Sandstrom    7 年前

    查看项目库文件夹。您将看到一个来自运行时服务器的文件夹,如“Apache Tomcat v7.0”。这会产生类似“javax.servlet”的项目依赖关系。如果右键单击项目(&T);属性>目标运行时您可以删除服务器运行时,看看会发生什么。Apache Tomcat库将消失,您的项目突然失去了依赖项。再加回来,错误就会消失。