java在annotationdriven Spring MVC应用程序中实现大气
我目前遇到了这个错误:java.lang.IllegalStateException: MeteorServlet not defined in web.xml
因为我的Spring项目完全配置了注释,所以我没有web。xml
这是我的配置类:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.musicbox")
public class AppConfig extends WebMvcConfigurerAdapter {
...
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new AtmosphereArgumentResolver());
}
}
大气分解器。与我能找到的任何示例相同,但我将一些函数移到了utils类中:
public class AtmosphereArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
return AtmosphereUtils.getAtmosphereResource(webRequest.getNativeRequest(HttpServletRequest.class));
}
@Override
public boolean supportsParameter(MethodParameter parameter) {
return AtmosphereResource.class.isAssignableFrom(parameter.getParameterType());
}
}
以及相应的utils类别:
public final class AtmosphereUtils {
public static AtmosphereResource getAtmosphereResource(HttpServletRequest request) {
return getMeteor(request).getAtmosphereResource();
}
public static Meteor getMeteor(HttpServletRequest request) {
return Meteor.build(request);
}
...
}
正如我所理解的,我必须为meteor servlet创建一个配置。但我找不到任何例子如何做到这一点。。。至少没有任何注释驱动
编辑:
我现在的问题是,我认为Meteor.build(request)
将采用某种默认配置。但看起来,它需要在我的网站上配置。xml(我没有)。如果是这种情况,那么用JavaConfig配置meteor的方法是什么(需要配置什么)
Edit2: 好的,我在启动时添加了MeteroServlet,这使Atmosphere框架在服务器启动时得到初始化(如日志所示),从而使它更进一步
public class AppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
WebApplicationContext context = getContext();
servletContext.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
ServletRegistration.Dynamic meteor = servletContext.addServlet("MeteorServlet", new MeteorServlet());
meteor.setLoadOnStartup(1);
meteor.addMapping("/meteor");
}
然而,这个问题仍然存在
共 (0) 个答案