gpt4 book ai didi

java - MessageBrokerServlet 与 XmlWebAppInitializer 方法

转载 作者:行者123 更新时间:2023-11-29 08:24:32 25 4
gpt4 key购买 nike

我想从我的 Spring boot 项目中删除我的 web.xml 文件。

我正在尝试一种混合方法(如 guide )。

我在我的 web.xml 中定义了这个 MessageBrokerServlet 如下:

<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

此 servlet 使用有关其配置的 services-config.xml 文件。

在指南中,当我用配置位置文件映射一个 servlet 时,我必须如下编写:

ServletRegistration.Dynamic dispatcher = container
.addServlet("dispatcher", new DispatcherServlet(context));

所以我将 servlet 与其上下文文件链接起来,但是我的 MessageBrokerServlet 没有带参数的构造,所以我编写了以下代码:

    // MessageBrokerServlet
XmlWebApplicationContext context = new XmlWebApplicationContext();
context.setConfigLocation("/WEB-INF/flex/services-config.xml");

MessageBrokerServlet mbs = new MessageBrokerServlet();

mbs.init(context.getServletConfig());
ServletRegistration.Dynamic messageBrokenServlet = container.addServlet("MessageBrokerServlet", mbs);

messageBrokenServlet.setLoadOnStartup(1);
messageBrokenServlet.addMapping("/messagebroker/*");

container.addListener(new ContextLoaderListener(context));

但是当我从上下文对象中获取 servletConfig 时,它是空的。

如何将正确的 servletConfig 传递给我的 MessageBrokerServlet,以便我可以链接到 services-config.xml 文件

最佳答案

MessageBrokerServlet 的生命周期由 servlet 容器处理。这在 Spring Boot 应用程序中没有区别(可能有点)。所以不需要调用 init 方法。

MessageBrokerServlet 也与 Spring 无关,因此尝试使用 Spring 加载配置然后期望 MessageBrokerServlet 对其执行操作也不会做任何事情。

使用 Spring Boot,您可以简单地将 servlet 注册为应用程序上下文中的 bean,Spring Boot 将负责注册。要注册 servlet,请将其包装在 ServletRegistrationBean 中以传递初始化参数和进一步配置。另见 this section Spring Boot 引用指南。

@Bean
public MessageBrokerServlet messageBrokerServlet() {
return new MessageBrokerServlet();
}

@Bean
public ServletRegistrationBean<MessageBrokerServlet> messageBrokerServletRegistration() {
ServletRegistrationBean<MessageBrokerServlet> registration =
new ServletRegistrationBean(messageBrokerServlet(), "/messagebroker/*");
return registration;
}

将其放在您的 @SpringBootApplication 注释类或特定的 @Configuration 注释类中。

这完全模仿了您在 web.xml 中发布的部分。如果您有额外的 init-param block (您没有显示它们),您可以使用 addInitParameter 方法将它们添加到 ServletRegistrationBean

关于java - MessageBrokerServlet 与 XmlWebAppInitializer 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54307922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com