通过Springboot登陆demo实战记录,我们做了一个Springboot的登陆demo。下一步我们想要实现的是将该项目发布到服务器上。 Springboot项目有两种发布方式,一种是Springboot默认的jar包方式发布,一种是传统的war包的方式。下面是将Springboot项目部署在服务器上的具体步骤。
1. 服务器环境部署
1.1 安装JDK
很明显,Springboot项目是使用java作为开发语言,所以你的服务器上一定要有JDK,才能够正常运行你的项目。
在oracal官网下载对应版本的JDK,这里使用的是JDK15。我们选择这种tar.gz格式的。
下载之后打开控制台,进入你的下载路径,使用$tar -zxvf jdk-15.0.2_linux-x64_bin.tar.gz 对其进行解压,解压后,你的下载路径中会多一个jdk-15.0.2的文件,说明解压成功。
1.2 配置环境变量
和Windows一样,JDK安装后,需要去配置环境变量。
使用命令$vim /etc/profile进行环境变量配置模块,光标滑到最后一行,输入I进入插入模式,另起一行输入:
export JAVA_HOME=/home/dell/下载/jdk-15.0.2 (根据自己的完整路径修改)
export PATH=JAVA_HOME/bin:PATH
export CLASSPATH=.:JAVA_HOME/jre/lib
复制粘贴后按ESC退出,另起一行输入wq!,回车退出
1.3激活环境
$source /etc/profile
$java -version
如果出现java版本信息,则环境变量配置成功。
2. 项目部署
2.1 jar包方式部署
这种方式是Springboot推荐且默认的,部署起来十分方便。
2.1.1 打包
在已经安装了maven且配置了环境变量的基础上,在IDEA的terminal中输入mvn clean package。即可对项目进行打jar包。(terminal的路径必须是你项目的根路径,其实最简单的办法就是关掉terminal,再打开,路径就是项目根路径。)
2.1.2 运行jar包
Springboot以Jar包方式部署十分简单,我们打好包之后,将jar包移动到linux机器上(我是通过QQ邮箱发送文件,再下载的方式),打开控制台,使用cd 命令进入你jar包存放位置,输入java -jar xxx.jar即可运行。
这种启动jar包的方式,启动之后,控制台便被锁定不能输入其他指令。并且控制台关闭,则服务也被关闭了。
如果想让该服务不受控制台关闭影响,可以使用下面的命令:
$nohup java -jar XXXXXX.jar &
表明忽略一切关闭信号。
2.2 war包方式部署
war包部署的方式就比较麻烦了,首先要更改pom.xml文件、还要下载和配置tomcat、更改启动类。
2.2.1 更改pom.xml文件
1)更改打包方式。Springboot默认是jar,在pom.xml中添加:
2) 移除Springboot自带的tomcat
在spring-boot-stater-web依赖中添加以下内容:
<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>
还有一种方法也可以。这里使用的是这种方法。
3) 导入java servlet 容器依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
4)更改打包名字(随意)
这里默认是项目名,也可以更改。在build中添加final name标签。
<build>
<finalName>denglu</finalName> #更改打包后的名字。默认为项目名字
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.2.2 修改启动类
让原来的启动类继承SpringBootServletInitializer,并且重写其中的configure方法。
@SpringBootApplication
@MapperScan(basePackages = "com.hky.springboot_login_register.mapper")
public class SpringbootLoginRegisterApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(SpringbootLoginRegisterApplication.class);
}
public static void main(String[] args) { #原来启动类的Main函数,不用更改
SpringApplication.run(SpringbootLoginRegisterApplication.class, args);
}
}
2.2.3 打成war包
和上述打成jar包方式一样,不再赘述。
2.2.4 安装tomcat
因为Springboot项目内嵌的有tomcat,所以我们之前的程序可以直接运行,现在我们打war包之前,移除了tomcat依赖,所以我们需要在服务器上安装一个tomcat服务器来运行我们的项目。
下载tomcat
首先,去官网下载页面下载tar.gz格式的tomcat。
解压tomcat
控制台cd 进入tomcat压缩包下载位置,输入命令对其解压。
tar -zxvf 安装包全名
解压后,该目录下会有一个不带tar.gz后缀的tomcat文件,即表示解压成功。
运行tomcat
进入解压后的tomcat文件夹的bin目录下,通过终端输入 ./startup.sh 运行tomcat。
出现上面的界面表示运行成功,然后打开浏览器,输入localhost:8080进行测试,如果出现tomcat页面则表示启动成功。如果没有进入tomcat页面,那基本上是防火墙的问题,去关闭一下防火墙,或者让防火墙开放8080端口。
2.2.5 将war包移动到tomcat的webapps下
tomcat默认在webapps下存放项目,因此通过终端命令
sudo cp war包名 tomcat的webapps路径将其移动到webapps目录下。
2.2.6 配置server.xml
上述流程走完之后,我的程序还是无法运行,具体表现为可以访问tomcat页面,可以访问项目主页面,但是当项目进行跳转的时候,出现404错误。
这个问题困扰了我一天,我尝试了网上的各种方法,包括tomcat版本问题、防火墙问题、甚至是代码问题。
最后我发现 当我启动项目,进入主页面的时候,我的浏览器地址为
localhost:8080/项目名/主页面
当我进行跳转的时候,浏览器地址本应该变成
localhost:8080/项目名/某页面
但是却变成了localhost:8080/某页面
少了项目名,所以访问不到页面。
所以我更改了server.xml中的信息。具体操作如下:
1 .终端进入tomcat下的conf目录
2. 使用vim server.xml 命令对其进行编辑。
3. 输入I 进入编辑模式。
4. 找到Host标签,在其中插入子标签Context。
5.ESC退出编辑模式,输入 :wq ,回车退出。
path表示localhost:8080/后面加什么可以启动你的项目。
docBase表示你要启动的项目的路径。可以是绝对路径也可以是相对路径。
这样就不会报404了,总结一下,感觉报404的基本上就是项目路径,或者跳转路径的问题- - 。