【问题标题】:Getting issue while deploying spring boot war on tomcat 7在 tomcat 7 上部署 Spring Boot War 时出现问题
【发布时间】:2019-05-05 21:55:29
【问题描述】:

我在 tomcat 服务器上部署我的代码时遇到问题 我写了下面的代码。

我的主要课程:

package com.indiamart.search;
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 SuggestMcatApplication  extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(SuggestMcatApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // TODO Auto-generated method stub
        return builder.sources(SuggestMcatApplication.class);
    }}

我的控制器类:-

package com.abc.search;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;

import org.json.JSONObject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class serviceController {

    @RequestMapping("/suggestMcat/related_info")

    public String getSearchString(HttpServletRequest request){
        JSONObject json;
        json =  new JSONObject(request);
        return json.toString();
    }
    }

我的 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.abc</groupId>
<artifactId>suggestMcat</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>suggestMcat</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.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>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20171018</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.sf.jazzy/jazzy -->
<dependency>
<groupId>net.sf.jazzy</groupId>
<artifactId>jazzy</artifactId>
<version>0.5.2-rtext-1.4.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
    <source>1.8</source>
    <target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
    <outputDirectory>../../tomcat/webapps/</outputDirectory>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <warName>${project.artifactId}</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
    <execution>
        <id>install-javaml-jar</id>
        <phase>clean</phase>
        <configuration>
            <file>${project.basedir}/src/main/resources/javaml-0.1.6.jar</file>
            <repositoryLayout>default</repositoryLayout>
            <groupId>com.indiamart</groupId>
            <artifactId>javaml</artifactId>
            <version>0.1.6</version>
            <packaging>jar</packaging>
            <generatePom>true</generatePom>
        </configuration>
        <goals>
            <goal>install-file</goal>
        </goals>
    </execution>
    <execution>
        <id>install-ajt-jar</id>
        <phase>clean</phase>
        <configuration>
            <file>${project.basedir}/src/main/resources/ajt-2.11.jar</file>
            <repositoryLayout>default</repositoryLayout>
            <groupId>com.indiamart</groupId>
            <artifactId>ajt</artifactId>
            <version>2.11</version>
            <packaging>jar</packaging>
            <generatePom>true</generatePom>
        </configuration>
        <goals>
            <goal>install-file</goal>
        </goals>
    </execution>
</executions>
</plugin>   
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>

我在构建战争并在 tomcat 服务器上部署时遇到以下错误:

Caused by: java.lang.NoClassDefFoundError: org/springframework/web/filter/FormContentFilter
            at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
            at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1009)
2018-12-04 17:59:39.859  WARN 14727 --- [io-8080-exec-29] o.s.boot.SpringApplication               : Unable to close
     ApplicationContext

         java.lang.IllegalStateException: Failed to introspect Class [org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration]
     from ClassLoader [WebappClassLoader
           context: /suggestMcat
           delegate: false
           repositories:
             /WEB-INF/classes/
         ---------- Parent Classloader:
         java.net.URLClassLoader@3dd4520b

请提出建议。

在回答 2 之后,我的部署问题已解决,但问题出在控制器上 白标错误页面 此应用程序没有 /error 的显式映射,因此您将其视为后备。

2018 年 12 月 4 日星期二 21:36:49 IST 出现意外错误(类型=未找到,状态=404)。 没有可用的消息

【问题讨论】:

  • 请注意:Spring Boot 2 支持的 Tomcat 最低版本为 8.5。

标签: java spring maven spring-boot tomcat


【解决方案1】:

您似乎为自己构建了一个战争文件。你应该使用弹簧来做到这一点。

我在这里有完整的例子https://www.surasint.com/spring-boot-create-war-for-tomcat/

pom.xml 应该是这样的

<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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
    </parent>

    <groupId>com.surasint.example</groupId>
    <artifactId>spring-boot-12</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- JSP -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- to deploy as a war in tomcat -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- jstl for jsp -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

重点是:

<packaging>war</packaging>

和:

<!-- to deploy as a war in tomcat -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

【讨论】:

  • 但是现在路由请求出现问题:我使用以下参数 localhost:8080/suggestMcat/… 并且问题出现在 Whitelabel 错误页面 此应用程序没有明确的 /error 映射,因此您将其视为倒退。 Tue Dec 04 21:36:49 IST 2018 出现意外错误(类型=未找到,状态=404)。没有可用的消息
  • 我在发布的问题中添加了控制器文件。请检查一次。
  • 另外.. 我收到以下错误 org.springframework.beans.factory.BeanCreationException: 在类路径资源 [org/springframework/boot/autoconfigure/validation /ValidationAutoConfiguration.class]:通过工厂方法进行 Bean 实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.validation.beanvalidation.LocalValidatorFactoryBean]:工厂方法'defaultValidator'抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: javax/el/ELManager
  • @radhikagarg 我建议您查看我网站上的示例。一一开始。正如有人评论的那样,您应该使用tomcat 8.5。这会很有帮助。
【解决方案2】:

您的项目引用了自 5.1 版以来驻留在 spring-web 工件中的类 org.springframework.web.filter.FormContentFilter

因此,您要么需要删除对该类的引用,要么添加缺少的 spring-web 工件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2015-03-10
    • 2018-12-05
    • 2019-03-14
    相关资源
    最近更新 更多