如何将 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.
中的静态方法使用
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.