我正在阅读 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.0 和 4.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.jar、slf4j-simple-1.6.4.jar和commons-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 并启动它。该应用程序运行正常,日志中没有错误或异常:
注意事项:
- 后来我才意识到 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/