Java Jetty maven在不同端口上插入多个Web应用程序

Java Jetty maven在不同端口上插入多个Web应用程序,java,jetty,embedded-jetty,maven-jetty-plugin,jetty-9,Java,Jetty,Embedded Jetty,Maven Jetty Plugin,Jetty 9,如何使用最新版本的jetty maven插件在不同端口上运行多个Web应用程序 org.eclipse.jetty:jetty maven插件(撰写本文时的版本为9.2.2.v20140723) 例如: 在httpConnector下说明这一点 名称: 连接器的名称,用于将上下文配置为 仅在特定连接器上响应。 很好,所以我配置了一个名称,但如何将其绑定到上下文处理程序?这就是我目前所拥有的 org.eclipse.jetty 建议可以使用WebAppContext上的connectorNam

如何使用最新版本的jetty maven插件在不同端口上运行多个Web应用程序

org.eclipse.jetty:jetty maven插件
(撰写本文时的版本为
9.2.2.v20140723

例如:

在httpConnector下说明这一点

名称:
连接器的名称,用于将上下文配置为
仅在特定连接器上响应。
很好,所以我配置了一个
名称
,但如何将其绑定到
上下文处理程序
?这就是我目前所拥有的


org.eclipse.jetty

建议可以使用
WebAppContext
上的
connectorNames
属性来完成,但该属性不再可用

我会尝试使用参数,而不是
连接器
上下文处理程序
。为每一个war编写一个示例,并在pom中的
jettyXml
参数中引用它们。

查看文档:

还可以使用带有命名到连接器的虚拟主机机制的扩展,使某些web应用程序只能由特定连接器访问。如果连接器使用setName方法设置了名称“MyConnector”,则可以使用特殊的虚拟主机名“@MyConnector”引用该名称

然后,您可以暗示上下文,因为它将包含virtualhost:

使用@ConnectorName:

@连接名 连接器名称,严格来说它不是虚拟主机,而是只匹配在连接器上接收的请求,这些连接器的名称与connector.setName(字符串)设置了匹配名称

上面链接中的配置基于单独的jetty xml配置文件。我还没有对此进行测试,但您可以将其插入到您的contextHandler(具有setter)中:


@实例(u 8080)
应该与相应的连接器绑定


您也可以在Java中通过编程实现这一点。

在@BLuEGoD答案的基础上展开,下面是完整的工作配置

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Set name="connectors">
    <Array type="org.eclipse.jetty.server.Connector">
        <Item>
            <New class="org.eclipse.jetty.server.ServerConnector">
                <Arg> <Ref refid="Server"/> </Arg>
                <Set name="port">8080</Set>
                <Set name="name">instance_8080</Set>
            </New>
        </Item>
        <Item>
            <New class="org.eclipse.jetty.server.ServerConnector">
                <Arg> <Ref refid="Server"/> </Arg>
                <Set name="port">8081</Set>
                <Set name="name">instance_8081</Set>
            </New>
        </Item>
    </Array>
</Set>

<New id="context-foo" class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">foo.war</Set>
    <Set name="virtualHosts">
        <Array type="java.lang.String">
            <Item>@instance_8080</Item>
        </Array>
    </Set>
</New>

<New id="context-bar" class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">bar.war</Set>
    <Set name="virtualHosts">
        <Array type="java.lang.String">
            <Item>@instance_8081</Item>
        </Array>
    </Set>
</New>

<Set name="handler">
    <New class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
        <Set name="handlers">
            <Array type="org.eclipse.jetty.server.Handler">
                <Item>
                    <Ref refid="context-foo" />
                </Item>
                <Item>
                    <Ref refid="context-bar" />
                </Item>
                <Item>
                    <New class="org.eclipse.jetty.server.handler.DefaultHandler" />
                </Item>
            </Array>
        </Set>
    </New>
</Set>
插件配置:

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.2.2.v20140723</version>
    <configuration>
        <jettyXml>path/to/jetty.xml</jettyXml>
    </configuration>
</plugin>

org.eclipse.jetty
jetty maven插件
9.2.2.v20140723
路径/to/jetty.xml
xml配置

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Set name="connectors">
    <Array type="org.eclipse.jetty.server.Connector">
        <Item>
            <New class="org.eclipse.jetty.server.ServerConnector">
                <Arg> <Ref refid="Server"/> </Arg>
                <Set name="port">8080</Set>
                <Set name="name">instance_8080</Set>
            </New>
        </Item>
        <Item>
            <New class="org.eclipse.jetty.server.ServerConnector">
                <Arg> <Ref refid="Server"/> </Arg>
                <Set name="port">8081</Set>
                <Set name="name">instance_8081</Set>
            </New>
        </Item>
    </Array>
</Set>

<New id="context-foo" class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">foo.war</Set>
    <Set name="virtualHosts">
        <Array type="java.lang.String">
            <Item>@instance_8080</Item>
        </Array>
    </Set>
</New>

<New id="context-bar" class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">bar.war</Set>
    <Set name="virtualHosts">
        <Array type="java.lang.String">
            <Item>@instance_8081</Item>
        </Array>
    </Set>
</New>

<Set name="handler">
    <New class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
        <Set name="handlers">
            <Array type="org.eclipse.jetty.server.Handler">
                <Item>
                    <Ref refid="context-foo" />
                </Item>
                <Item>
                    <Ref refid="context-bar" />
                </Item>
                <Item>
                    <New class="org.eclipse.jetty.server.handler.DefaultHandler" />
                </Item>
            </Array>
        </Set>
    </New>
</Set>

8080
实例(u 8080)
8081
实例_8081
/
福娃
@实例(u 8080)
/
酒吧战争
@实例_8081

如果使用
jetty.xml
(插件配置中还不支持
virtualHosts
),则该方法有效
对jetty 9.2.2无效(jetty 9中不存在该类)@JoakimErdfelt,评论不错。下面的答案包含一个工作示例,唯一的缺点是它需要一个
jetty.xml
。是的,我完全知道:)这些是裸露的
服务器连接器
(即没有关联的
HttpConfiguration
)@Johan Sjoberg。谢谢你的回答。我试过了。它适用于一个webAppContext。我有两个webAppContext,它们具有不同的上下文路径,但具有相同的端口。当我运行时,生成失败,因为抛出了一个异常,表示端口已在使用中。如何配置相同的端口,但不同的Contexpath?
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Set name="connectors">
    <Array type="org.eclipse.jetty.server.Connector">
        <Item>
            <New class="org.eclipse.jetty.server.ServerConnector">
                <Arg> <Ref refid="Server"/> </Arg>
                <Set name="port">8080</Set>
                <Set name="name">instance_8080</Set>
            </New>
        </Item>
        <Item>
            <New class="org.eclipse.jetty.server.ServerConnector">
                <Arg> <Ref refid="Server"/> </Arg>
                <Set name="port">8081</Set>
                <Set name="name">instance_8081</Set>
            </New>
        </Item>
    </Array>
</Set>

<New id="context-foo" class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">foo.war</Set>
    <Set name="virtualHosts">
        <Array type="java.lang.String">
            <Item>@instance_8080</Item>
        </Array>
    </Set>
</New>

<New id="context-bar" class="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="war">bar.war</Set>
    <Set name="virtualHosts">
        <Array type="java.lang.String">
            <Item>@instance_8081</Item>
        </Array>
    </Set>
</New>

<Set name="handler">
    <New class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
        <Set name="handlers">
            <Array type="org.eclipse.jetty.server.Handler">
                <Item>
                    <Ref refid="context-foo" />
                </Item>
                <Item>
                    <Ref refid="context-bar" />
                </Item>
                <Item>
                    <New class="org.eclipse.jetty.server.handler.DefaultHandler" />
                </Item>
            </Array>
        </Set>
    </New>
</Set>