我试图了解Spring中的ServletWrappingController。
我的问题是
如何在应用程序中实现ServletWrappingController?
此ServletWrappingController类是否应在Controller类
中扩展请告诉我。
答案 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还有一些很好的信息。