java - 依赖注入(inject): Jetty 7

标签 java spring dependency-injection jetty embedded-jetty

我的应用程序需要多个接口(interface)实现,这些接口(interface)实现需要 Jetty 服务器来完成它们的工作。然而,这些接口(interface)的每个实现中并不一定都是这种情况,因此 Jetty 服务器只是一个依赖项。

由于将整个 jetty 服务器及其所有日志记录、连接器和处理程序配置包装起来会非常痛苦,因此我想使用 Spring 将服务器注入(inject)到这些实现中。我认为注入(inject) Server 类不是一个好主意,因为即使在另一个位置需要,实现也可能会停止服务器。目前,我向这些实现注入(inject)空的 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" />

如果我需要一个空的HandlerList,我会使用类似的东西,其中com.example.myapp.util.ioc.CreateHandlerListFactory是一个org.springframework.beans .factory.FactoryBean 在给定的HandlerList 中创建一个新的HandlerList

<constructor-arg>
    <bean class="com.example.myapp.util.ioc.CreateHandlerListFactory">
        <constructor-arg ref="jetty.handlerList"/>
    </bean>
</constructor-arg>

最佳答案

我有一些可能的建议:

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

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

关于java - 依赖注入(inject): Jetty 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709796/

相关文章:

java - 运行示例代码时找不到 URL

java - 上传文件到S3时如何设置内容md5?

java - 3 项 IllegalAnnotationExceptions

java - 为什么@Qualifier 不允许在构造函数之上?

android - dagger2 非@Nullable @Provides 方法

java - 在两个 bean 中注入(inject) spring bean-实现相同的接口(interface)

java - Xamarin Android Theme.AppCompat 异常

Java 日志记录说明

java - jackson ,序列化引用的一个属性

c# - 为什么我在开发环境中只会收到范围内的服务解析错误?