Java Jetty maven在不同端口上插入多个Web应用程序
如何使用最新版本的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
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>