【问题标题】:Use Spring IoC with servlets defined in web.xml将 Spring IoC 与 web.xml 中定义的 servlet 一起使用
【发布时间】:2011-03-12 10:54:38
【问题描述】:

这可能是一个相对直截了当的问题,我只是没有正确搜索,但我正在尝试使用 Spring IoC 容器来配置我的 servlet。我有一些额外的处理程序(它们是私有数据成员),因此我想在运行时进行配置。可以这样做吗?

现在我的 web.xml 正确加载了 servlet,但是,问题是我不确定如何将这些实例连接到 Spring IoC 容器,或者将 IoC 容器生成的实例连接到小服务程序容器。

在我的 web.xml 文件中,我正在设置 ContextLoaderListener

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

并且还为 bean 上下文配置正确的位置

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    /WEB-INF/beans.xml
  </param-value>
</context-param>

我还知道 beans.xml 文件正在被解析,因为我在输入错误时遇到了几个异常。

想法?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java spring servlets ioc-container


    【解决方案1】:

    我认为大多数想要做你正在做的事情的人只是使用 Spring MVC 框架。在这种情况下,它是一个 Spring 类,您只需实现“控制器”(而不是实际的 servlet)。

    也就是说,完全有可能完全按照您的要求进行操作。查看FrameworkServlet(您可以对其进行扩展)或DelegatingFilterPorxy(您可以使用此类作为示例编写一个'DelegatingSevletProxy')。

    【讨论】:

    • 谢谢,我会调查的。我从一开始就在考虑使用 SpringMVC,但我自己的懒惰阻止了这一点。这次我会继续做正确的;-)
    • 谢谢大哥! ...来自 Apache 的 FileUploadServlet,Dropzone JS 并且无法使用 Spring 的 IOC 将我的 DAO 等添加到 apache FileUploadServlet,尝试了各种废话,然后这个,1)从 FrameworkServlet 继承并添加一个名为 FileUploadServlet-servlet 的文件Spring 实际要求的 WEB-INF 中的 .xml ... ...Spring 大错误!
    【解决方案2】:

    你应该把你的逻辑从 servlet 中移出,这样它们就只是一个瘦包装器,它可以获取对 Spring 应用程序上下文的引用,从上下文中实例化一个 bean,将 HTTP 请求、会话、任何其他需要的东西传递给它,然后告诉bean 来完成这项工作。

    考虑到您无法在 servlet 容器之外实例化 servlet,因此无法对其进行单元测试。 IoC 容器无法实例化它。它不会从 IoC 或 DI 中受益。

    如果可以,请使用 Spring MVC;您可能希望将 servlet 中的逻辑移动到控制器类中。

    否则,看看 org.springframework.web.context.ContextLoaderListener;从那里你可以看到 Spring 如何引导自己。

    【讨论】:

    • Drew 下面的建议看起来不错;他关于 FrameworkServlet 和 DelegatingFilterProxy 的观点可能比阅读我提到的代码更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    相关资源
    最近更新 更多