java - 如果它不是 'dynamic web app',如何在 eclipse 中对 Tomcat 运行 WAR?

标签 java eclipse tomcat

我正在阅读 jwt 教程(这是 Java Web Toolkit,而不是 JSON Web Tokens)。本教程提供了一个 eclipse 项目以下载并导入到 eclipse 中,并提供了在 jetty 服务器上部署它的说明。

我想将它部署在我已经在 eclipse 中作为服务器安装的 tomcat 服务器上,这样我就可以进行更改和重新部署,而无需将 WAR 文件复制到外部 Tomcat 安装并附加远程调试的烦人步骤 session 。

我已经构建了 war 文件,如果我将它部署到外部 session ,它运行良好。但是我不知道如何告诉 eclipse 将它部署到内部服务器。当我右键单击该项目并选择“运行”或“调试”时,有一个将其作为应用程序运行的选项,但没有用于在服务器上运行的选项。我猜测 eclipse 只为“动态 Web 应用程序”提供该选项,但这并没有这样标记,这只是一个猜测。

如何配置项目,以便 eclipse 知道将其 war 文件部署到内部服务器上?

另外 -- 这不是一个 Maven 项目,他们有一个用于 Ant 的 build.xml。


好吧,我找到了“Project Facets”并将我的“hello”应用程序的项目方面设置为“Dynamic Web Module”,现在可以选择在服务器上运行它。但是当我这样做时,我得到 404“没有找到当前资源的表示”,控制台或终端中没有错误消息。我在外部服务器中重试了 WAR 以确保它仍然有效。

有什么建议吗?


教程链接:它是 https://www.webtoolkit.eu/jwt/latest/doc/userguide/userguide.html 的第 3 节

我意识到 Dynamic Web Module 可能是一条错误的道路,但在我们这个反复试验编程的时代,尝试让 eclipse 认为它是一个用于此目的的 web 项目似乎是合理的。如果它不正确,我很乐意(以某种方式)支持它。

他们的说明包括在 eclipse 中为 Jetty 部署,我不使用它。我本以为,如果 tomcat-under-eclipse 需要 index.html 或 web.xml,那么 Jetty-under-eclipse 也需要它,但这只是一个猜测。

最佳答案

在进行以下配置更改后,我设法在 Eclipse 中的 Tomcat 上运行 jwt-hello:

  • 检查Properties > Project Facet > Dynamic Web Module,将版本设置为2.5(这样项目就有资格添加到Tomcat)。我在使用 3.04.0 版本时遇到问题。
  • Properties > Java Compiler > Compiler compliance level设置为1.8
  • 设置Properties > Java Build Path > Libraries > JRE System Library 以使用 JDK 1.8。
  • Properties > Web Project Settings > Context root 设置为 hello,因为它默认为 jwt-hello
  • 将下载的 JWt zip 文件的 dist 文件夹中的 jwt-3.3.11.jar 复制到 WEB-INF/lib
  • 复制slf4j-api-1.6.4.jarslf4j-simple-1.6.4.jarcommons-fileupload-1.3.3.jar 从下载的 JWt zip 文件的 lib 文件夹到 WEB-INF/lib

配置项目后,创建WEB-INF/web.xml,内容如下图,避免404问题,然后build.xml > Run As > Ant Build 构建项目。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">
        <servlet>
            <servlet-name>GreetingServlet</servlet-name>
            <servlet-class>eu.webtoolkit.jwt.examples.hello.HelloMain</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>GreetingServlet</servlet-name>
            <url-pattern>/Hello</url-pattern>
        </servlet-mapping>
    </web-app>

在 Eclipse 的 Tomcat 服务器上:

  • 将以下行添加到 server.xml 以反射(reflect)从 jwt-hello 更改为 hello 的上下文根:

    <Context docBase="jwt-hello" path="/hello" reloadable="true" source="org.eclipse.jst.jee.server:jwt-hello"/>
    
  • jwt-hello 项目添加到Tomcat 并启动它。该应用程序运行正常,日志中没有错误或异常:

    Localhost web app

注意事项:

  • 后来我才意识到 jwt-hello 有一个包含所需 lib 文件的 WebRoot 文件夹,以及一个示例 web.用于 Tomcat 的 xml。和我独立创作的不一样,但我没有进一步研究。
  • 我的环境:Windows 10 上的 Eclipse Photon + JDK 8u152 + Tomcat 9.0.10 + jwt-3.3.11-rc1.zip
  • 我使用 JDK 8 是因为与让 Tomcat 9 与 JDK 10 一起工作的无关问题。

关于java - 如果它不是 'dynamic web app',如何在 eclipse 中对 Tomcat 运行 WAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51655030/

相关文章:

java - Vaadin 为单个应用程序启动多个应用程序实例

java - 终止 mvn spring-boot :run doesn't stop tomcat

java - 将现有的 java WAR 文件上传到 AWS Elastic Beanstalk

eclipse - 如何更改 Eclipse IDE 中所有 View 的背景?

java - 编码从使用 JAXB 实现接口(interface)的类实例化的 Java 对象

java - 为 Eclipse 编写新的重构插件?

java - Liferay Tomcat Server 不断在服务器控制台上发出警告消息

java - 在 Python 中复制 Java 密码哈希代码 (PBKDF2WithHmacSHA1)

java - Eclipse 提示以下 String.format 用法

java - 将 JSON 字符串序列化为对象