【问题标题】:How to deploy an application with addon to a war file如何将带有插件的应用程序部署到war文件
【发布时间】:2013-12-17 06:28:29
【问题描述】:

我正在为我的 Vaadin 项目使用响应式插件。我编译了小部件,并且能够在 Eclipse 上运行该项目。我使用的版本是 Vaadin 7.1.9 和 Eclipse Juno。

然后,当我尝试导出到 war 文件并将其部署在 Jetty 8 和 Jetty 9 上时。我收到以下错误。

在 Jetty 8,我回来了: 我可以启动码头,但是当我尝试从浏览器访问时,我得到了以下信息:

      Widgetset does not contain implementation for com.vaadin.addon.responsive.Responsive. 
      Check its component connector's @Connect mapping, widgetsets GWT module description file and re-compile your widgetset. 
      In case you have downloaded a vaadin add-on package, you might want to refer to add-on instructions.

在 Jetty 9,我回来了:

    java.lang.IllegalStateException: Multiple servlets map to path: /*
            at org.eclipse.jetty.servlet.ServletHandler.updateMappings(ServletHandle
    r.java:1383)
            at org.eclipse.jetty.servlet.ServletHandler.setServletMappings(ServletHa
    ndler.java:1480)
            at org.eclipse.jetty.servlet.ServletHandler.addServletMapping(ServletHan
    dler.java:916)
            at org.eclipse.jetty.annotations.WebServletAnnotation.apply(WebServletAn

请注意:我还有另一个在 Jetty 8 和 Jetty 9 中都成功执行的 war 文件。我的项目也可以在没有那个小部件集的情况下工作。

使用 Jetty 8,我尝试再次重新编译小部件,但我得到了同样的错误。

这是我的 web.xml 文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <display-name>Demo</display-name>
        <context-param>
            <description>Vaadin production mode</description>
            <param-name>productionMode</param-name>
            <param-value>false</param-value>
        </context-param>
        <servlet>
            <servlet-name>Myrmnui Application</servlet-name>
            <servlet-class>com.demo.main.DemoResponsiveAppServlet</servlet-class>
            <init-param>
                <description>Vaadin UI class</description>
                <param-name>UI</param-name>
                <param-value>com.demo.main.MainUI</param-value>
            </init-param>
            <init-param>
                <description>
                Application widgetset</description>
                <param-name>widgetset</param-name>
                <param-value>com.demo.main.widgetset.DemoWidgetset</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>Application</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Application</servlet-name>
            <url-pattern>/VAADIN/*</url-pattern>
        </servlet-mapping>
    </web-app>

请告诉我如何构建一个战争文件并与小部件一起部署。我使用eclipse导出到war文件。为了确保小部件文件存在,我解压缩了 war 文件并且它们存在。这些文件的文件大小不为零。

提前致谢。

【问题讨论】:

  • 这是我找到的一个解决方案:这适用于 Jetty 8。在您的 VaadinServlet 自定义类中,我们需要指定 widgetset 包,如下所示:@WebServlet(value = {"/*", " /VAADIN/*"}, asyncSupported = true) @VaadinServletConfiguration(productionMode = false, ui = MainUI.class, widgetset="com.demo.main.widgetset.DemoWidgetset")

标签: java eclipse jetty vaadin vaadin7


【解决方案1】:

错误...

`java.lang.IllegalStateException: Multiple servlets map to path: /*` 

... 说明,因为它指向无效的 WAR 部署,其中有多个 servlet 都映射到相同的路径规范。这在 Servlet API 中是不允许的。

其中一个应该是过滤器吗?

或者某个图书馆引入了更多与您的冲突的@WebServlet(value={"/*"}) 条目?

如果您针对命名记录器org.eclipse.jetty.servlet.ServletHandler 设置DEBUG 日志记录(或FINEST,如果使用java.util.logging),您可以看到一些关于正在发生的事情的一些细节。

但是,错误信息可以改进,所以已经提交了一个错误来改进它:https://bugs.eclipse.org/424284

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2020-06-30
    • 2021-12-28
    相关资源
    最近更新 更多