Primavera de arranque de aplicaciones web no se ejecuta en Tomcat 9

DS. :

Mi aplicación web funciona bien en Eclipse, Java Photon STS 8 y el resorte de arranque 2.02 con el Embebido Tomcat mediante criterio de valoración:

http://localhost:8081/DataViewer/tspsPatentSearch

Pero cuando compilo el código en el archivo DataViewer.war (utilizando el paquete de MVN) y ejecutarlo en Tomcat 9 en Linux con punto final:

http://myserver.com:8081/DataViewer/tspsPatentSearch

Me da la infame:

Whitelabel Error Page
There was an unexpected error (type=Not Found, status=404).
/DataViewer/tspsPatentSearch

Mi pom.xml es:

`<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
<groupId>com.clarivate</groupId>
<artifactId>dataviewer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>dataviewer</name>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <start-class>com.clarivate.dataviewer.DvMain</start-class>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- DS may need to remove for tomcat installation -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

   <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.1.0</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </dependency>

</dependencies>

   <!-- Required to find ojdbc6, because Oracle don't make it available to maven-->
    <repositories>
        <repository>
          <id>codelds</id>
          <url>https://code.lds.org/nexus/content/groups/main-repo</url>
        </repository>
      </repositories>

<build>
    <finalName>DataViewer</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId> 
            <configuration>
                <mainClass>com.clarivate.dataviewer.DvMain</mainClass>
            </configuration>    
        </plugin>
    </plugins>
</build>


<description>TSPS data viewer</description>

En application.properties que tengo:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.servlet.path=/DataViewer 

Mi clase principal es:

package com.clarivate.dataviewer;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication

public class DvMain extends SpringBootServletInitializer {

    static Logger logger = LogManager.getRootLogger();

    public static void main(String[] args) {
        logger.debug("DS1A in main()");
        SpringApplication.run(DvMain.class, args);
        logger.info("DS1C finished.");
    }


    //@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(DvMain.class);
     }  
}

Mi MainController.java tiene:

@GetMapping("/tspsPatentSearch")
public String tspsPatentSearch(Model model) {
     model.addAttribute("tspsPatent", new TspsPatent());

     return "tspsPatentSearch";                 
}

El archivo de la guerra descomprime bien y no hay errores. En catalina.out tenemos:

2018-10-04 12:09:09.954  INFO 12950 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/tspsPatentSearch],methods=[POST]}" onto public java.lang.String com.clarivate.dataviewer.controller.MainController.tspsPatentSearch(com.clarivate.dataviewer.model.TspsPatent,org.springframework.ui.Model,org.springframework.validation.BindingResult)

y no hay errores. He intentado esta decir que mi estructura del paquete es correcta y esta es decir, mis de JSP son en la ubicación correcta (data_viewer \ src \ Main \ webapp \ WEB-INF \ JSP) y ahora estoy quedando sin ideas. Cualquier ayuda muy apreciada

Editar: Si copio tspsPatentSearch.jsp en el directorio superior archivo de la guerra entonces Tomcat encuentra. Así que parece que Tomcat está ignorando:

spring.mvc.view.prefix=/WEB-INF/jsp/

o no encontrar application.properties en absoluto.

Jon Sampson:

Agregue esto a su application.properties:

server.servlet.contextPath=/

Me he tomado el código de muestra y, suponiendo que su anotada MainControllersimplemente como @Controller, poner un despliegue juntos. He cambiado algunas cosas por ahí, pero creo que esta era la parte que lo hizo. No he podido encontrar ninguna referencia que explican por qué podría ser requerido por Tomcat, pero tengo la intención de seguir buscando. Voy a actualizar que si encuentro algo.

Editar:

Me di cuenta de algunos de registro duplicado en la primavera 2.0.2 relacionado con este tema: https://github.com/spring-projects/spring-boot/issues/13470

El problema parecía fijo en 2.0.4 por lo tanto, he actualizado.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

Además, me quita la server.servlet.contextPath=/entrada y Tada Todavía puedo llegar a la Hello World JSP He definido. Si la actualización es posible para usted, tal vez usted podría intentar que antes de añadir algo a application.propertieslo que podría considerarse la funcionalidad duplicada. Al menos yo puedo prometer una mejor experiencia de la explotación forestal.

Editar # 2:

Sin pistola humeante, hasta el momento, pero éstos (de 2.0.4) podría estar relacionada:

Proporcionar una manera consistente para descubrir la ruta primaria de DispatcherServlet

servlets despachador con un nombre de servlet personalizado no se encuentran por las asignaciones de punto final

Nada parecía probable que en una exploración de superficie de 2.0.3. Voy a darle un descanso por ahora y le dará la oportunidad de probar algunas cosas. ¡Buena suerte!

Editar # 3:

Lo siento para continuar sugiriendo que cambiar cosas ambiente a su alrededor, pero una diferencia entre lo que he observado que probé y lo que va a trabajar tiene que parece estar utilizando Tomcat-9.0.0.M20 donde como estaba probando con 9,0 0.12 .

Tanto si desea actualizar o no, algunas cosas a tener en cuenta y / o hacen:

1) Modificar una pregunta con lo que tienes ahora si es diferente a la anterior. Incluir el server.servlet.contextPath=/en su application.propertiestan una persona que quiere puede ver lo que has hecho.

2) La exclusión que tiene para spring-boot-starter-tomcatbajo spring-boot-starter-webno parece hacer nada - se puede comprobar comparando el resultado de la ejecución mvn dependency:treeantes y después de la eliminación.

3) No estoy seguro de que su spring-webdependencia es necesario tampoco, ya que es traído por defecto bajo el spring-boot-starter.

4) Ahora a su salida. Primavera de arranque está subiendo (nota de la bandera) y sus clases se están encontrando y actuar en consecuencia.

catalina.out.DEBUG También en su Ds.log comenzando ~ 08: 35: 38.162

2018-10-12 09:30:17.322 DEBUG 55745 --- [           main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [/data/apps/tomcat/apache-tomcat-9.0.0.M20/webapps/DataViewer/WEB-INF/classes/com/clarivate/dataviewer/controller/MainController.class]
2018-10-12 09:30:17.328 DEBUG 55745 --- [           main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [/data/apps/tomcat/apache-tomcat-9.0.0.M20/webapps/DataViewer/WEB-INF/classes/com/clarivate/dataviewer/database/ReadFromDb.class]
2018-10-12 09:30:17.356 DEBUG 55745 --- [           main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [/data/apps/tomcat/apache-tomcat-9.0.0.M20/webapps/DataViewer/WEB-INF/classes/com/clarivate/dataviewer/service/FileFuncs.class]
2018-10-12 09:30:17.357 DEBUG 55745 --- [           main] o.s.c.a.ClassPathBeanDefinitionScanner   : Identified candidate component class: file [/data/apps/tomcat/apache-tomcat-9.0.0.M20/webapps/DataViewer/WEB-INF/classes/com/clarivate/dataviewer/service/StringFuncs.class]
...
2018-10-12 09:30:19.417  INFO 55745 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/tspsPatentSearch],methods=[POST]}" onto public java.lang.String com.clarivate.dataviewer.controller.MainController.tspsPatentSearch(com.clarivate.dataviewer.model.TspsPatent,org.springframework.ui.Model,org.springframework.validation.BindingResult)
2018-10-12 09:30:19.417  INFO 55745 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/tspsPatentSearch],methods=[GET]}" onto public java.lang.String com.clarivate.dataviewer.controller.MainController.tspsPatentSearch(org.springframework.ui.Model)
...
2018-10-12 09:30:19.769  INFO 55745 --- [           main] com.clarivate.dataviewer.DvMain          : Started DvMain in 3.125 seconds (JVM running for 5.845)

Y además observo la asignación a /errorque se devuelve a su petición en 9:32:11.

Me parece extraño:

2018-10-12 09:32:11.758 DEBUG 55745 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/DataViewer/DataViewer/error]

Y es diferente en Ds.log:

2018-10-12 08:36:56.136 DEBUG 6992 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name 'dispatcherServlet' processing GET request for [/DataViewer /error]

Específicamente /DataViewer/DataViewer/error- ¿Has probado que solicita http: // localhost: 8081 / DataViewer / DataViewer / tspsPatentSearch

En general, esto parece como si todo está subiendo, pero hay una mala configuración en alguna parte que no está permitiendo una solicitud para asignar al controlador.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=192349&siteId=1
Recomendado
Clasificación