gpt4 book ai didi

No suitable default RequestUpgradeStrategy found on Dailyrazor's tomcat 8.5 server(在Dailyrazor的Tomcat 8.5服务器上找不到合适的默认RequestUpgradeStrategy)

转载 作者:bug小助手 更新时间:2023-10-25 13:36:09 29 4
gpt4 key购买 nike



I am fairly new to spring-boot and Websockets in general. I am attempting to create a program that requires websockets to manage a chat application. The program runs perfectly fine on my local machine. However, when uploading it to my tomcat server on Dailyrazor, I get the error message No suitable default RequestUpgradeStrategy found.

总的来说,我对Spring-Boot和WebSockets还是个新手。我正在尝试创建一个需要WebSockets来管理聊天应用程序的程序。这个程序在我的本地机器上运行得很好。然而,当我把它上传到我在Dailyrazor上的Tomcat服务器上时,我得到了错误消息:没有找到合适的默认RequestUpgradeStrategy。


What I have tried:

我尝试了以下几点:



  1. I have checked my spring-boot version to ensure that it is compatible with my Tomcat 8.5 server

  2. I have checked to make sure that my websockets version is also compatible. It is also important to note that my program ran perfectly fine on Dailyrazor before I added websockets to it.


Here is my build.gradle file

这是我的build.gradle文件


buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:2.2.2.RELEASE"
classpath "io.spring.gradle:dependency-management-plugin:1.0.8.RELEASE"
}
}

plugins {
id 'war'
}

group 'com.teamtreehouse'
version '1.0-SNAPSHOT'



allprojects {
apply plugin: 'maven'
apply plugin: "io.spring.dependency-management"
group = 'com.wnp'
version = '6.5.0-SNAPSHOT'
}

apply plugin: 'java'
apply plugin: "org.springframework.boot"

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
mavenCentral()
}

dependencies {
// https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-websocket

// compile 'org.projectreactor:reactor-spring:1.0.1.release'
implementation 'io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.1.0'

compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
compile 'org.springframework.boot:spring-boot-starter-security'
//// https://mvnrepository.com/artifact/org.springframework/spring-web
// implementation 'org.springframework:spring-web:6.0.0'


implementation 'org.springframework.boot:spring-boot-starter-mail:2.2.2.RELEASE'

compile group: 'org.apache.maven.plugins', name: 'maven-surefire-plugin', version: '2.22.2'
implementation 'org.ocpsoft.prettytime:prettytime:3.2.7.Final'

// compile 'org.springframework:spring-orm'
// compile group: 'org.hibernate', name: 'hibernate-core'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat
// providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '2.7.5'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat:2.2.2.RELEASE'

compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'org.hashids:hashids:1.0.1'

// https://mvnrepository.com/artifact/mysql/mysql-connector-java
implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'org.springframework.boot:spring-boot-starter-websocket'

testImplementation group: 'junit', name: 'junit', version: '4.11'
implementation group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.12.131'
// https://mvnrepository.com/artifact/org.projectlombok/lombok
compileOnly 'org.projectlombok:lombok:1.18.28'

testImplementation 'software.amazon.awssdk:s3:2.17.102'

runtimeOnly 'software.amazon.awssdk:bom:2.17.102'


}

Here is my websockets configuration:

以下是我的WebSockets配置:


@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat");
registry.addEndpoint("/chat").withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}


}

Finally, here is my error log:

最后,以下是我的错误日志:


INFO next-step-co.com-startStop-2 org.apache.catalina.core.ContainerBase.[Catalina].[next-step-co.com].[/] - 2 Spring WebApplicationInitializers detected on classpath
INFO mysql-cj-abandoned-connection-cleanup org.apache.catalina.loader.WebappClassLoader - Illegal access: this web application instance has been stopped already. Could not load . The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
INFO next-step-co.com-startStop-2 org.apache.catalina.core.ContainerBase.[Catalina].[next-step-co.com].[/] - Initializing Spring embedded WebApplicationContext
ERROR next-step-co.com-startStop-2 org.apache.catalina.core.ContainerBase - ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[next-step-co.com].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:919)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1704)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stompWebSocketHandlerMapping' defined in class path resource [org/springframework/web/socket/config/annotation/DelegatingWebSocketMessageBrokerConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'stompWebSocketHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No suitable default RequestUpgradeStrategy found
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:484)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$878/444480024.getObject(Unknown Source)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:152)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:132)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:92)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5164)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 10 more
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'stompWebSocketHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No suitable default RequestUpgradeStrategy found
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651)
... 33 more
Caused by: java.lang.IllegalStateException: No suitable default RequestUpgradeStrategy found
at org.springframework.web.socket.server.support.AbstractHandshakeHandler.initRequestUpgradeStrategy(AbstractHandshakeHandler.java:153)
at org.springframework.web.socket.server.support.AbstractHandshakeHandler.<init>(AbstractHandshakeHandler.java:119)
at org.springframework.web.socket.server.support.DefaultHandshakeHandler.<init>(DefaultHandshakeHandler.java:35)
at org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.<init>(WebSocketHttpRequestHandler.java:74)
at org.springframework.web.socket.config.annotation.WebMvcStompWebSocketEndpointRegistration.getMappings(WebMvcStompWebSocketEndpointRegistration.java:142)
at org.springframework.web.socket.config.annotation.WebMvcStompEndpointRegistry.getHandlerMapping(WebMvcStompEndpointRegistry.java:155)
at org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurationSupport.stompWebSocketHandlerMapping(WebSocketMessageBrokerConfigurationSupport.java:82)
at org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration$$EnhancerBySpringCGLIB$$89bc0503.CGLIB$stompWebSocketHandlerMapping$11(<generated>)
at org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration$$EnhancerBySpringCGLIB$$89bc0503$$FastClassBySpringCGLIB$$d170f115.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
at org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration$$EnhancerBySpringCGLIB$$89bc0503.stompWebSocketHandlerMapping(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 34 more
ERROR next-step-co.com-startStop-2 org.apache.catalina.startup.HostConfig - Error deploying web application archive /home/nextste2/tomcat/webapps/next-step-co.com/ROOT.war
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[next-step-co.com].StandardContext[]]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:727)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:919)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1704)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)


更多回答
优秀答案推荐

The error message indicates that Spring is unable to upgrade the HTTP request to a WebSocket connection on your Tomcat server.

该错误消息指出,在Tomcat服务器上,Spring无法将HTTP请求升级为WebSocket连接。


There are few things to check:

有几件事要检查:



  • Make sure you are using a compatible version of Tomcat that supports Servlet 3.1 or later. Tomcat 8.5 meets this requirement.

    确保您使用的是支持Servlet 3.1或更高版本的兼容版本的Tomcat。Tomcat 8.5符合这一要求。



  • Add the tomcat-websocket dependency to your pom.xml:

    将tomcat-web套接字依赖项添加到pom.xml:




<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>9.0.43</version>
</dependency>


  • Configure Spring to use the TomcatRequestUpgradeStrategy:


@Configuration
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat").setHandshakeHandler(new DefaultHandshakeHandler(
new TomcatRequestUpgradeStrategy())).withSockJS();
}

}

This explicitly configures Spring to use Tomcat's built-in WebSocket support.

这显式地将Spring配置为使用Tomcat的内置WebSocket支持。


更多回答

I am using Spring starter-web which has a built in tomcat. Wouldn't adding another tomcat interfere with that?

我使用的是Spring starter-web,它有一个内置的Tomcat。添加另一只Tomcat不会干扰这一点吗?

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