Déploiement d’un projet sur Tomcat externe

J’ai suivi le guide Spring Web Sockets suivant pour créer une application utilisant Spring Web Sockets sur stomp. https://spring.io/guides/gs/messaging-stomp-websocket/ L’application fonctionne correctement lorsque je l’exécute à l’aide du Tomcat intégré Spring Boot. Cependant, je souhaite maintenant le déployer sur une instance locale de Tomcat 7.

J’ai modifié la classe Application comme suit,

@Configuration @ComponentScan @EnableAutoConfiguration public class Application extends SpringBootServletInitializer { public static void main(Ssortingng[] args) { SpringApplication.run(applicationClass, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(applicationClass); } @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.scan(WebSocketConfig.class.getPackage().getName()); servletContext.addListener(new ContextLoaderListener(context)); ServletRegistration.Dynamic appServlet = servletContext.addServlet("appServlet", new DispatcherServlet(context)); appServlet.setLoadOnStartup(1); Set mappings = appServlet.addMapping("/app"); if (!mappings.isEmpty()) { throw new IllegalStateException("Conflicting mappings found! Terminating. " + mappings); } } private static Class applicationClass = Application.class; } 

La configuration de WebSocket est la suivante,

 @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/hello").withSockJS(); } } 

Et mon build.gradle est comme suit,

 buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'spring-boot' apply plugin: 'war' war { baseName = 'opl-ws-webui' version = '0.1.0' } repositories { jcenter() maven { url "http://repo.spring.io/libs-snapshot" } } bootRepackage { enabled false } sourceCompatibility = 1.8 targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { comstack("org.springframework.boot:spring-boot-starter-websocket") comstack("org.springframework:spring-messaging") comstack group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.8.1' comstack group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.8.1' comstack group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.1' comstack files('lib/opla230.jar') //providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' comstack group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0' testComstack("junit:junit") } task wrapper(type: Wrapper) { gradleVersion = '2.3' } 

Lorsque je clique avec le bouton droit de la souris sur le projet et que je l’exécute sur le serveur depuis eclipse, il sert le fichier index.html correct dans l’URL suivante. http: // localhost: 8080 / opl-ws-webui /

Cependant, lorsque j’appuie sur le bouton de connexion qui est censé ouvrir une zone de saisie de texte, je ne reçois rien. En vérifiant les outils de développement, voici le message d’erreur que je reçois.

 sockjs-0.3.4.js:807 GET http://localhost:8080/hello/info 404 (Not Found) Whoops! Lost connection to undefined 

J’ai cherché le message d’erreur dans Google et essayé d’appliquer les suggestions des liens suivants, Whoops! Connexion perdue avec undefined – Connexion perdue juste après la connexion établie Stomp over socket utilisant sockjs ne peut pas se connecter avec Spring 4 WebSocket

Et pourtant je continue à avoir la même erreur. J’ai essayé de déployer à la fois Tomcat 7 et 8 et toujours les mêmes. Vraiment apprécier une aide sur la question.

Si vous utilisez Spring Boot, vous pouvez passer à un emballage war au lieu d’un fichier jar, puis à l’étendue provided de la dépendance tomcat.

Pour plus de détails, consultez:

Jar à la guerre

Construire config

Servir du contenu statique

Peut-être un problème avec le contexte d’application. Lorsque vous exécutez l’application dans votre système local, elle est mappée sur la racine de contexte (/). Mais lorsque vous le téléchargez sur tomcat, le contexte sera le nom de votre fichier. Par exemple, si votre nom de fichier est “myapp”, le contexte sera http: // serveur: 8080 / myapp, mais il s’exécutera en tant qu’application racine dans le système local. Vous pouvez résoudre ce problème en définissant votre application en tant que contexte racine de tomcat ou en modifiant les chemins de l’application en contexte de production (dans ce cas, myapp). Pour définir l’application ROOT, accédez à (Ubuntu):

/var/lib/tomcat7/conf/server.xml

Puis append,

   WEB-INF/web.xml  

et supprimez les autres config racine, le cas échéant. Enfin, redémarrez le serveur tomcat.

J’utilise Apache Tomcat Maven Plugin à cette fin, mais vous utilisez Gradle. Il fonctionne parfaitement avec Tomcat 7 mais ne prend pas en charge Tomcat 8. Veuillez voir ceci [lien] [1]. http://tomcat.apache.org/maven-plugin-2.0/tomcat7-maven-plugin/

SockJS n’honore pas les URL relatives. Trouvez une approche à un problème lié ici

Vous ne pouvez pas exécuter l’application avec l’IDE lui-même, vous devez créer un fichier war et le déployer dans tomcat, il sera exécuté. assurez-vous que le numéro de port 8080 n’est utilisé par aucun autre serveur / application.