- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从我的 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/
我的应用程序在 Windows 和 Mac 上运行良好,但是当我将完全相同的 JBoss 文件夹复制到 Debian(或 CentOS)时,我无法弄清楚发生了什么。 经过一些研究,我发现有些问题,因为
我想从我的 Spring boot 项目中删除我的 web.xml 文件。 我正在尝试一种混合方法(如 guide )。 我在我的 web.xml 中定义了这个 MessageBrokerServle
大家好, 我正在处理从 Java 到 Flex 的服务器推送。但是有些 MessageBrokerServlet 没有被初始化,好像它正在调用一个方法: flex.messaging.config.L
我是一名优秀的程序员,十分优秀!