如何将 Marvin Framework 添加到 tomcat 上的动态 Web 项目 运行?

How can I add Marvin Framework to a dynamic web project running on tomcat?

Marvin Framework 运行完美地融入了我在 Eclipse 中的 Java 项目。我已按照自述文件将整个 marvin 文件夹复制到项目根文件夹。一切顺利。

现在,当在 Eclipse 中设置与 动态 Web 项目 相同的应用程序并尝试在 Eclipse tomcat 9 上 运行 它时,我得到一个HTTP 状态 500 – 由 java.lang.ClassNotFoundException 引起的内部服务器错误(参见下面的“错误 1”)。

看来,在动态 Web 项目中,jar 应该在 WEB-INF/lib 中。将 marvin_1.5.5.jar 复制到 WEB-INF/lib 时,会正确找到 class marvin.image.MarvinImage(错误 1 ​​消失)。

但遗憾的是没有找到 Marvin 图像插件。我试图将整个 marvin 文件夹复制到 WEB-INF/lib - 没有用。我收到另一个 HTTP 状态 500 – 内部服务器错误 java.lang.NullPointerException(请参阅下面的 'ERROR 2')。 我试图将 MarvinDefinitions.setImagePluginPath 设置为 myproject/WebContent/WEB-INF/lib/plugins/ - 没有用。我在控制台中收到错误消息:java.nio.file.NoSuchFileException: \myproject\WebContent\WEB-INF\lib\plugins\org.marvinproject.image.transform.scale.jar.

-> 有谁知道如何在动态 web 项目中正确实现 Marvin 吗?

错误 1

HTTP Status 500 – Internal Server Error
Type Exception Report

Message Servlet execution threw an exception

Beschreibung The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


Root Cause
java.lang.NoClassDefFoundError: marvin/image/MarvinImage
    controller.HomeController.doPost(HomeController.java:58)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


Root Cause
java.lang.ClassNotFoundException: marvin.image.MarvinImage
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
    controller.HomeController.doPost(HomeController.java:58)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

错误 2

HTTP Status 500 – Internal Server Error
Type Exception Report

Beschreibung The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
java.lang.NullPointerException
    marvin.util.MarvinJarLoader.getClass(MarvinJarLoader.java:69)
    marvin.util.MarvinJarLoader.getObject(MarvinJarLoader.java:51)
    marvin.util.MarvinPluginLoader.loadPlugin(MarvinPluginLoader.java:55)
    marvin.util.MarvinPluginLoader.loadImagePlugin(MarvinPluginLoader.java:37)
    marvin.MarvinPluginCollection.checkAndLoadImagePlugin(MarvinPluginCollection.java:1225)
    marvin.MarvinPluginCollection.scale(MarvinPluginCollection.java:956)
    marvin.MarvinPluginCollection.scale(MarvinPluginCollection.java:973)
    controller.HomeController.doPost(HomeController.java:60)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Marvin zip distribution 工作方式的问题在于它在运行时将 JAR 文件作为文件加载。所以你必须找出插件的部署位置。检索对 ServletContext 的引用并设置:

MarvinDefinitions.setImagePluginPath(servletContext.getRealPath("/WEB-INF/lib/plugins"));

如果 WAR 存档被解压到一个目录(就像 Eclipse 所做的那样),则

可能会起作用。但它 并非在所有情况下都有效

更好的解决方案是从 Maven 下载 Marvin jars (MarvinFramework and MarvinPlugins) 并将它们放入您的 WEB-INF/lib 文件夹(或者如果您使用 Maven,则将它们添加为项目的依赖项)。在此发行版中,所有插件都已加载并可通过 marvinplugins.MarvinPluginCollection class.

中的静态方法使用