springboot部署在云服务器上遇到的各种问题

本文档详细记录了将SpringBoot应用从IDEA本地部署到云端Tomcat过程中遇到的404错误及其解决方案。主要步骤包括:修改项目打包方式为war,添加servlet-api依赖,移除SpringBoot内置Tomcat,配置启动类,设置项目名,检查端口占用,调整数据库配置以及解决数据库大小写敏感问题。通过这些步骤,最终成功解决了404错误并使应用正常运行。
摘要由CSDN通过智能技术生成

前言

当在idea中成功搭建好ssm框架,本地也成功运行于是准备放到云端进行测试
接着我把war包放入云服务器下的tomcat中,启动tomcat,tomcat的页面能成功显示,但是一输入和idea能成功打开页面同样的项目路径就是报404错误,我以为是云服务器上的tomcat有问题,放到本地tomcat结果也是一样404错误。我就开始一步一步寻找错误。

首先我想springboot内置了tomcat,是否和外部tomcat有冲突,于是百度一番后发现要添加servlet-api依赖,去除自带tomcat,修改启动类

srpingboot项目使用外部tomcat的基本改动

srpingboot版本是2.4.1

添加war包

<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<description>Demo project for Spring Boot</description>

添加servlet-api依赖

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.0.36</version>
    <scope>provided</scope>
</dependency>

修改启动类

@SpringBootApplication
public class PixivApplication extends SpringBootServletInitializer {

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

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

移除springboot自带的tomcat

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除嵌入式tomcat插件 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

其他404问题

上面可能大部分人第一次会遇到这种情况,下面的问题可能粗心会遇到,但是一下子找不到问题所在,大部分能在tomcat的catalina. 日期.log)和catalina.out中找到问题

路径问题

首先发现路径前面都没加项目名,springboot都给设置好了,现在在外部还是要自己加入

在pom.xml中加入

<build>
    <finalName>pixiv</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

配置文件中添加

spring.freemarker.request-context-attribute=request

server.servlet.context-path=/项目名

这样就可以在freemaker模板中用${request.contextPath}获取项目名了

<form action="${request.contextPath}/result" method="post"></form>

端口被占用

然后检查端口问题

netstat -nultp查看端口
查看端口
8080、8009和8005三个端口不能被占用,且8080端口要在防火墙中打开
端口被占用
如果被占用 用kill -9 PID 来结束进程,然后重新启动tomcat

数据库密码错误

接着启动tomcat后发现项目还是404,打开catalina.out一看,发现数据库拒绝访问,才想起本地和服务器的数据库密码不同
数据库无法访问
解决后成功打开search页面
成功进入search

数据库区分大小写

解决密码问题后地址栏一刷新,还是404,好家伙,继续查看catalina.out,找不到Dept,打开数据库命令行,发现也找不到,改为小写就可以,查找一番发现要修改 lower_case_table_names 的值
找不到Dept

通过命令:SHOW VARIABLES LIKE ‘lower%’;查看 lower_case_table_names 的值,0 代表区分大小写,1 代表不区分大小写。
0
用vim /etc/my.cnf 命令在最后添加下面代码:

lower_case_table_names=1

插入1
重新启动数据库

service mysqld restart

最后终于成功搜索到结果
成功进入result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值