代码之家  ›  专栏  ›  技术社区  ›  Malax

依赖注入:Jetty 7

  •  1
  • Malax  · 技术社区  · 16 年前

    我的应用程序需要几个接口实现,这些接口实现需要Jetty服务器来完成它们的工作。然而,这些接口的每个实现都不一定都是这样,因此Jetty服务器只是一个依赖项。

    由于将整个jetty服务器与其所有日志记录、连接器和处理程序配置打包将是一件非常痛苦的事情,因此我希望使用Spring将服务器注入到这些实现中。我认为注入服务器类不是一个好主意,因为实现可能会停止服务器,即使在其他位置需要它。目前我注入的是空的 HandlerList

    问题:这些处理程序可能会干扰其他处理程序,例如:实现一可能会为/foo注册一个处理程序,实现二也可能会注册一个处理程序。。。问题有人在这样的环境中使用过Jetty吗?如何解决这个问题呢?

    我的XML来澄清我的问题:

    <bean id="jetty" class="org.eclipse.jetty.server.Server" destroy-method="stop">
        <property name="connectors">
            <list>
                <bean class="org.eclipse.jetty.server.bio.SocketConnector">
                    <property name="host" value="10.8.0.46" />
                    <property name="port" value="9999" />
                </bean>
            </list>
        </property>
    
        <property name="handler">
            <bean class="org.eclipse.jetty.server.handler.HandlerCollection">
                <property name="handlers">
                    <list>
                        <ref bean="jetty.handlerList" />
                        <bean class="org.eclipse.jetty.server.handler.RequestLogHandler">
                            <property name="requestLog">
                                <bean class="org.eclipse.jetty.server.NCSARequestLog">
                                    <constructor-arg value="${jetty.logfile}" />
                                    <property name="extended" value="false"/>
                                </bean>
                            </property>
                        </bean>
                    </list>
                </property>
            </bean>
        </property>
    
        <property name="sendServerVersion" value="false" />
    </bean>
    
    <bean id="jetty.handlerList" class="org.eclipse.jetty.server.handler.HandlerList" />
    

    如果我需要一个空的 com.example.myapp.util.ioc.CreateHandlerListFactory org.springframework.beans.factory.FactoryBean 这创造了一个新的 车手名单 车手名单

    <constructor-arg>
        <bean class="com.example.myapp.util.ioc.CreateHandlerListFactory">
            <constructor-arg ref="jetty.handlerList"/>
        </bean>
    </constructor-arg>
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Stefan L    16 年前

    我有一些可能的建议:

    添加org.eclipse.jetty.servlet.ServletHandler,而不是jetty特定的处理程序,映射标准servlet。您可以通过逐个添加ServletHandler的servlet(每个都包装在ServletHolder中)或使用setServlets(ServletHolder[]holders)来设置ServletHandler的servlet。ServletMappings的设置类似。

    您可以将ServletHandler注入到每个接口实现中,让它们添加映射的servlet,或者集中创建ServletHolder和ServletMappings的数组,从而还可以通过不控制每个接口实现中的路径来防止重复路径。后者还允许至少根据标准ServletAPI编程接口实现,从而使大部分代码独立于Jetty。