什么是Spring控制器中的ServletWrappingController

时间:2011-08-19 11:13:54

标签: spring-mvc

我试图了解Spring中的ServletWrappingController。

我的问题是

如何在应用程序中实现ServletWrappingController?

此ServletWrappingController类是否应在Controller类

中扩展

请告诉我。

3 个答案:

答案 0 :(得分:3)

ServletWrappingController是Spring API中的一个类 - 文档为right there

  

Spring Controller实现,它包装它在内部管理的servlet实例。这种包装的servlet在该控制器之外是未知的;这里介绍了它的整个生命周期(与ServletForwardingController不同)。

     

通过Spring的调度基础结构调用现有的servlet非常有用,例如将Spring HandlerInterceptors应用于其请求。

答案 1 :(得分:0)

正如您可以从the documentation读取的那样,ServletWrappingController是一个包装现有标准Java servlet的控制器。

它的主要原因似乎是允许开发人员利用Spring的功能(如处理程序拦截器),同时仍然使用其他基于servlet的技术,如您自己的自定义servlet,或者如文档中提到的Struts框架。

答案 2 :(得分:0)

这是一个如何实现ServletWrappingController的示例。在这种情况下,我将包裹普罗米修斯' MetricsServlet,但您可以轻松地为任何现有的servlet修改它。

@Configuration
public class MetricsConfiguration {

    /**
     * Register the metricsController.
     * @return Returns the ServletWrappingController for the Prometheus
     * MetricsServlet.
     */
    @Bean
    public ServletWrappingController metricsController() throws Exception {
        ServletWrappingController controller = new ServletWrappingController();
        controller.setServletClass(MetricsServlet.class);
        controller.setBeanName("metricsController");
        controller.afterPropertiesSet();

        return controller;
    }

    /**
     * Map /metrics to the metricsController.
     * @return Returns the SimpleUrlHandlerMapping.
     */
    @Bean
    public SimpleUrlHandlerMapping metricsControllerMapping() {
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
        Properties urlProperties = new Properties();
        urlProperties.put("/metrics", "metricsController");
        mapping.setMappings(urlProperties);
        mapping.setOrder(Integer.MAX_VALUE - 2);

        return mapping;
    }

}

如果您想使用XML而不是注释,the documentation中有一些示例(如@pap所述)。

关于如何进行映射部分here还有一些很好的信息。