前言
当在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页面
数据库区分大小写
解决密码问题后地址栏一刷新,还是404,好家伙,继续查看catalina.out,找不到Dept,打开数据库命令行,发现也找不到,改为小写就可以,查找一番发现要修改 lower_case_table_names 的值
通过命令:SHOW VARIABLES LIKE ‘lower%’;查看 lower_case_table_names 的值,0 代表区分大小写,1 代表不区分大小写。
用vim /etc/my.cnf 命令在最后添加下面代码:
lower_case_table_names=1
重新启动数据库
service mysqld restart
最后终于成功搜索到结果