1

我有一个带有几个 servlet 的 WEB-INF/web.xml 文件,以及一个用于引导应用程序的上下文侦听器。我想在这个 Web 应用程序中使用 Spring。将 Spring 用于此的最佳方法是什么,以便我可以在整个应用程序中使用 Spring 的注入机制——即使在当今存在的 servlet 中也是如此?

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>Company's XMLRPC service</display-name>
    <!-- Servlet Listeners -->
    <listener>
        <listener-class>com.company.download.context.DefaultServletContextListener</listener-class>
    </listener>

    <!-- Servlet Declarations -->
    <servlet>
        <servlet-name>DefaultTrackDownloadServlet</servlet-name>
        <servlet-class>com.company.download.web.impl.DefaultTrackDownloadServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>DefaultXmlRpcServlet</servlet-name>
        <servlet-class>com.company.download.web.impl.DefaultXmlRpcServlet</servlet-class>
    </servlet>

    <!-- Servlet Configurations -->
    <servlet-mapping>
        <servlet-name>DefaultTrackDownloadServlet</servlet-name>
        <url-pattern>/track</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>DefaultXmlRpcServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>
4

1 回答 1

2

Spring 能否与同一个 webapp 中的其他 servlet 一起“存在”?

是的,Spring MVC 基本上只是一个DispatcherServlet可以利用ContextLoaderListener.

这两个类已经设置为与一个或多个ApplicationContext实例交互,并让 Spring 管理声明的 bean。

您的自定义Servlet类不是。如果您需要将 bean 注入到您自己的Servlet实例中,则需要ApplicationContext从 the中获取对的引用ContextLoaderListener并获取您想要的 bean。有几个选项,无论您是自己做还是使用内置功能。

ContextLoaderListener存储ApplicationContext它加载到一个名为的ServletContext属性中

org.springframework.web.context.WebApplicationContext.ROOT

所以你可以用它来检索它(有一个易于使用的常量)

ApplicationContext ac = (ApplicationContext) config.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

存在其他选项,请在此处查看其中一些选项:

于 2014-03-30T20:57:30.173 回答