`
weifly
  • 浏览: 239449 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jetty-如何让一个应用响应一个特定端口

 
阅读更多

jetty中文文档:www.jettycn.com

 

 

一个应用一个端口

Jetty >> howto >> 一个应用一个端口

A应用只能从A端口访问,B应用只能从B端口访问

要做到这一点的最有效的方法是创建两个org.eclipse.jetty.server.Server实例。还有另外一种效率较低的替代方案

服务器实例A有一个监听A端口的connector并部署A应用,服务器实例B有一个监听B端口的connector并部署B应用。例如:

我们希望A应用从8080端口访问,B应用通过SSL协议从8443端口访问。我们建立了2个服务器实例,每个实例的jetty.xml文件如下所示:

jettyA.xml

<Configure id="ServerA" class="org.eclipse.jetty.server.Server">

    <!-- set up the port for ServerA -->
    <Set name="connectors">
      <Array type="org.eclipse.jetty.server.Connector">
        <Item>
          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="port">8080</Set>
            <Set name="maxIdleTime">30000</Set>
            <Set name="Acceptors">10</Set>
          </New>
        </Item>
      </Array>
    </Set>

    <!-- set up a context provider for Server A -->
    <Call name="addLifeCycle">
      <Arg>
        <New class="org.eclipse.jetty.deploy.providers.ContextProvider">
          <Set name="contexts"><Ref id="Contexts"/></Set>
          <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contextsA</Set>
          <Set name="scanInterval">5</Set>
        </New>
      </Arg>
    </Call>

</Configure>

jettyB.xml:

<Configure id="ServerB" class="org.eclipse.jetty.server.Server">

    <!-- set up the port for ServerB -->
    <Set name="connectors">
      <Array type="org.eclipse.jetty.server.Connector">
        <Item>
          <New class="org.eclipse.jetty.server.ssl.SslSocketConnector">
            <Set name="Port">8443</Set>
            <Set name="maxIdleTime">30000</Set>
            <Set name="Keystore"><SystemProperty name="jetty.home" default="." />/etc/keystore</Set>
            <Set name="Password">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
            <Set name="KeyPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set>
          </New>
        </Item>
      </Array>
    </Set>

    <!-- set up a context provider for ServerB -->
    <Call name="addLifeCycle">
      <Arg>
        <New class="org.eclipse.jetty.deploy.providers.ContextProvider">
          <Set name="contexts"><Ref id="Contexts"/></Set>
          <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contextsB</Set>
          <Set name="scanInterval">5</Set>
        </New>
      </Arg>
    </Call>

</Configure>

现在我们需要配置两个context文件,一个描述需要部署到ServerA上的A应用,另一个描述需要部署到ServerB上的B应用。然后,我们把这些文件分别放到$JETTY_HOME/contextsA或$JETTY_HOME/contextsB中。

contextA.xml

    <Configure class="org.eclipse.jetty.webapp.WebAppContext">
      <Set name="war"><SystemProperty name="jetty.home"/>/webapps/A</Set>
      <Set name="contextPath">/webappA</Set>
       ...
    </Configure>

contextB.xml:

    <Configure class="org.eclipse.jetty.webapp.WebAppContext">
      <Set name="war"><SystemProperty name="jetty.home"/>/webapps/B</Set>
      <Set name="contextPath">/webappB</Set>
       ...
    </Configure>

你将在同一个JVM中运行2个服务器实例,只需提供2个xml配置文件:

java -jar start.jar jettyA.xml jettyB.xml

当然,你也可以启动2个独立Jetty实例,一个实例使用jettyA.xml,另一个实例使用jettyB.xml。但是,在同一JVM中运行2个服务器通常是更有效的。

替代方案

还有另一种方法,也可以实现上述相同的结果,但它的效率稍微差一些。这需要设置web应用的connector列表,只有列表中的connector发送过来的请求才会被处理。相对于上面描述的方法,这是一个效率较低的解决方案,因为该请求提交给每一个web应用,web应用必须决定是否接收并处理这个请求。在第一个解决方案,请求只会传给唯一的一个web应用。在此配置中,你只需要一个服务器实例。你需要为每个connector定义唯一的名称,然后给每个web应用指派connector名称列表,这样web应用就可以响应指定connector发来的请求了。

以下代码展示了如何配置connector列表:

jetty.xml:

<Configure class="org.eclipse.jetty.server.Server">

    <!-- set up both connectors -->
    <Set name="connectors">
      <Array type="org.eclipse.jetty.server.Connector">
        <Item>
          <New id="connA" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="port">8080</Set>
            <Set name="maxIdleTime">30000</Set>
            <Set name="Acceptors">1</Set>
            <Set name="name">connA</Set>
          </New>
        </Item>
        <Item>
          <New id="connB" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
            <Set name="port">9090</Set>
            <Set name="maxIdleTime">30000</Set>
            <Set name="Acceptors">1</Set>            
            <Set name="name">connB</Set>
          </New>
        </Item>
      </Array>
    </Set>

    <!-- set up a context provider -->
    <Call name="addLifeCycle">
      <Arg>
        <New class="org.eclipse.jetty.deploy.providers.ContextProvider">
          <Set name="contexts"><Ref id="Contexts"/></Set>
          <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>
          <Set name="scanInterval">5</Set>
        </New>
      </Arg>
    </Call>
</Configure>

contextA.xml:

    <Configure class="org.eclipse.jetty.webapp.WebAppContext">      
      <Set name="war"><SystemProperty name="jetty.home"/>/webapps/A</Set>
      <Set name="contextPath">/webappA</Set>
      <Set name="connectorNames">
        <Array type="String">
          <Item>connA</Item>
        </Array>
      </Set>
      ...
    </Configure>

contextB.xml:

    <Configure  class="org.eclipse.jetty.webapp.WebAppContext">
      <Set name="war"><SystemProperty name="jetty.home"/>/webapps/B</Set>
      <Set name="contextPath"/webappB</Set>
      <Set name="connectorNames">
        <Array type="String">
          <Item>connB</Item>
        </Array>
      </Set>
    </Configure>

现在像往常一样启动jetty(如果你的服务器配置文件叫jetty.xml,可以从命令行省略它):

java -jar start.jar
分享到:
评论
2 楼 weifly 2012-05-31  
lge9101230 写道
我在配置完了以后 java -jar start.jar jettyA.xml 用着运行。但是java.io.FileNotFoundException: Unable to find XML Config: etc/jetty.xml。为什么还是默认的找jetty.xml这个文件而不是找我输入的jettyA.xml。


jetty目录中的start.ini中默认引入了很多配置文件:etc/jetty.xml, etc/jetty-deploy.xml 等等
1 楼 lge9101230 2012-05-17  
我在配置完了以后 java -jar start.jar jettyA.xml 用着运行。但是java.io.FileNotFoundException: Unable to find XML Config: etc/jetty.xml。为什么还是默认的找jetty.xml这个文件而不是找我输入的jettyA.xml。

相关推荐

    jetty-distribution-9.2.29.v20191105.zip

    Jetty 9.2.29.v20191105是该版本的一个特定发布,这个版本包含了对稳定性和安全性的改进以及一些bug修复。 在Jetty 9.2系列中,有几个重要的知识点值得我们了解: 1. **Servlet 3.1支持**:Jetty 9.2.x版本支持...

    Jetty java程序指定一个端口,开通一个TCP服务

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者在Java应用程序中直接启动HTTP...通过上述步骤,你可以快速搭建一个简单的Jetty服务,指定特定端口提供TCP服务,为你的测试或其他目的提供便利。

    jetty-4.2.24

    Jetty的版本4.2.24rc0是该软件的一个历史版本,可能包含了修复的一些错误或者特定功能的改进。在本文中,我们将深入探讨Jetty的核心特性、工作原理以及如何使用这个版本。 一、Jetty简介 Jetty由Mortbay ...

    jetty 事例

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛用于开发、测试以及部署Web应用程序。本教程将深入探讨Jetty的核心概念、安装配置、实用特性以及开发应用,帮助你全面理解并掌握Jetty。 1. **...

    jetty-test

    Jetty是一个开源的、轻量级的Java Web服务器和HTTP协议栈,它广泛用于开发、测试和部署Web应用程序。这篇博客文章(虽然描述是空的,但我们可以通过博文链接深入探究)可能涵盖了如何在Jetty环境下进行单元测试或...

    how tomcat works和jetty-src和tomcat7-src

    【Tomcat7-src】Tomcat 7是Tomcat的一个特定版本,其源代码包含了服务器的所有组件和模块。分析Tomcat 7的源代码可以帮助我们理解其在处理多线程、容器管理、安全策略等方面的设计决策。例如,`Catalina`是Tomcat的...

    Jetty中文手册

    如何让一个应用响应一个特定端口 使用JNDI 使用JNDI 在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 ...

    osgi-jetty-9.3.10环境配置-注册Servlet工程示例

    在本示例中,我们将探讨如何在OSGi环境下配置Jetty 9.3.10,创建一个注册Servlet的工程,并进行Jetty的性能优化。 首先,我们需要准备OSGi运行时环境。常见的OSGi容器有Apache Felix、Equinox等。这里我们选择一个...

    jetty6.1.6-1

    这个版本是Jetty 6系列的一个具体发行版,主要服务于Java应用程序,尤其是那些基于Servlet API的应用。"jetty6.1.6-1"的描述指出这是一部分,但不包含"lib"目录,这意味着提供的压缩包可能不包括所有依赖库,开发者...

    Android i-jetty开源项目.zip

    i-jetty开源项目就是这样一个为Android平台定制的嵌入式HTTP服务器,它基于Java的Jetty服务器,提供了在Android应用中实现本地HTTP服务的功能。本文将对这个项目进行深度解析,以帮助开发者更好地理解和利用这个工具...

    GeoServer跨域问题.zip

    在Web应用开发中,跨域问题是一个常见的挑战,特别是在利用Ajax进行异步数据交互时。由于浏览器的安全策略,不同源(域名、协议或端口)之间的请求会被阻止,除非服务器允许这些跨域请求。在GeoServer的环境中,当...

    eclipse插件jetty 离线安装包

    6. 确认路径无误后,输入一个描述性的名称,例如“Run-Jetty-Run Offline”。 7. 回到“Install New Software”窗口,你应该能看到新添加的插件源。勾选列出的插件,然后点击“Next”。 8. 阅读并接受许可证协议,...

    Spring整合Jetty开发web应用的例程

    - 创建Server对象:在Spring配置文件中定义一个`org.eclipse.jetty.server.Server`bean,设置端口和其他服务器属性。 - 添加Servlet容器:创建`org.eclipse.jetty.servlet.ServletContextHandler`对象,并设置其上...

    simple-jetty-helloworld

    【标题】"simple-jetty-helloworld" 是一个基于Java的项目,主要目的是向开发者展示如何使用Jetty服务器来创建一个简单的“Hello, World”应用程序。Jetty是一个轻量级、高性能的HTTP服务器和Servlet容器,它允许...

    jrtty.zip webservice

    标题中的“jrtty.zip webservice”表明这是一个与Jetty服务器和Web服务相关的资源包。Jetty是一款轻量级、高性能的开源Java Web服务器和HTTP协议栈,它被广泛用于开发和部署Web应用程序,包括RESTful Web服务。在这...

    Android i-jetty开源项目.rar

    - **本地数据共享**:在多个应用之间共享数据,无需通过网络进行传输。 - **模拟API服务器**:在没有网络或者网络不稳定时,本地模拟API接口供应用调用。 - **离线模式**:为用户提供离线浏览或操作的功能。 - *...

    Jetty源码分析.pdf

    - **HttpHandler**:具体负责处理HTTP请求与响应,可以是一个具体的Servlet或静态资源处理器。 - **HttpListener**:监听特定端口上的HTTP请求,并将这些请求传递给`HttpServer`处理。 #### 三、HttpServer与配置...

    maven的打包、jetty配置、jetty事务检查、打包除resource之外的资源文件

    Jetty是一个轻量级的Java Web容器,它可以快速地运行Servlet和Web应用。配置Jetty主要涉及修改jetty.xml或相关的context.xml文件,比如设置端口、添加部署、调整线程池参数等。例如,在jetty-context.xml文件中,你...

    jetty6 eclipse配置

    - 首先,你需要在Eclipse中创建一个新的Dynamic Web Project,这将生成一个包含基本Web应用结构的项目,如WEB-INF目录和web.xml文件。 - 在项目属性中,可以配置Jetty插件,使其关联到当前项目,这样就可以在...

    jetty嵌入式实例

    接下来,创建一个简单的Jetty服务器,监听特定端口并处理HTTP请求。以下是一个基础的Jetty服务器示例: ```java import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler...

Global site tag (gtag.js) - Google Analytics