目录
在实际应用中进行springMVC开发,一般使用springBoot,这样才能省很多事,之前我在《hualinux spring 4.21:使用SpringBoot进行spring开发》对springBoot配置简单做了说明,springBoot与spring的不同,这里我不再赘述,最多在这个基础上直接说下有什么不同而已。
用SpringBoot进行SpringMVC开发,有两种,一种是内嵌web,Spring Boot 支持的内嵌容器有 Tomcat(默认) 、Jetty 、Undertow 和 Reactor Netty (v2.0+), 借助可插拔 (SPI) 机制的实现,开发者可以轻松进行容器间的切换。
一种是外置的,我这里使用外置的,因为如果内嵌的话,一台机子你跑多个web,就不能使用同一端口号,如果非要使用,那么就得在前面加一个代理,如用nginx做反代。
一、环境说明
软件名 | 版本 | 安装方式 | 备注 |
idea | 2020.1 | exe | 目前最新版本idea为2020.1.2 |
JDK | 14.0.1 | exe | 目前oracle最新版本的jdk |
tomcat | 9.0.36 | 无需要安装 | 下载的是windows-x64.zip,不用安装直接在idea配置即可 |
Maven | 3.6.3 | Idea自带 | 使用idea自带的maven就够了,目前最新稳定版 |
springBoot | 2.3.1 | Idea下载 | 目前最新稳定版本 |
spring boot直接通过idea下载,省去安装的麻烦。
二、建立spring Boot项目
如果你之前有建立过项目的话,先关闭项目“File-->Close Project”
下面这些是什么意思,我在《hualinux spring 4.21:使用SpringBoot进行spring开发》已经进行了讲解了,我这里不讲了,有兴趣可以看一下这篇文章
最终界面为:
这样就完成了,简单吧~~
用springBoot建立后项目之后,是兼职spring和springMVC的注解的,所以一样可以使用
为了方便,还是得像《hualinux spring 4.21:使用SpringBoot进行spring开发》那样,在pom.xml添加一个配置处理器
提高编写配置文件的速度,少记一些配置文件,所以推荐安装配置启动器configuration-processor,这样当你写配置的时候,会弹出配置提示,配置处理器启动器可以去maven官网仓库搜索 configuration-processor,版本与springBoot版本要一致
如:我的是springBoot 2.3.1 ,所以添加pom.xml配置依赖为:
<!-- 文件处理器,以后编写配置就有提示了 -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
三、编写代码
3.1 编写Hello代码
在src/main/java/com.hualinux.myspringbootmvc/下建立一个test.Hello.java类
test.HelloWorld如果前面有.则表示是目录,即在com.hualinux.myspringbootmvc下方建立一个test目录,目录下再建立一个Hello的java类。
代码如下:跟springMVC一样的写法
package com.hualinux.myspringbootmvc.test;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//@Controller表示要使用模板,如果用@RestController则表示直接把数据返回给浏览器
@RestController
public class Hello {
@RequestMapping("/hello")
public String sayHi(){
return "你好,springBootMVC";
}
}
什么都不用配置,直接运行试下
看一下idea最下方
打开浏览器输入,我刚刚配置好的路由映射,因为主页没配置,打开报错属于正常
http://127.0.0.1:8080/hello看一下效果
正确之后,我们按暂停一下
为什么不用添加外部tomcat就能直接运行了呢,因为pom.xml添加了一个tomcat依赖了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3.2 测试
3.2.1 添加tomcat配置
因为我们使用的是war包,所以不会使用spring boot自动带的tomcat,这样我们主需要配置一个tomcat
VM options 项中添加:-Dfile.encoding=UTF-8 防止idea最下方日志控制台输出乱码
在这里需要说一下:选择war还是war exploded的问题,首先看一下他们两个的区别:
war模式:将web工程以war包的形式上传到服务器
war exploed模式:将web工程以当前文件夹的位置关系上传到服务器
- war模式这种可以称之为是发布模式,看名字也知道,这是先打包war包,再发布;
- war exploded模式是直接把文件夹,jsp页面,classes等等移到Tomcat部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。
- 在平时开发的时候,使用热部署的话,应该对Tomcat进行相应的设置,这样的话修改的jsp界面什么的东西才可以及时的显示出来
修改红框的位置就可以实现热部署,但是如果修改了java源码还是得重启tomcat才能生效的
3.2.2 运行tomcat测试一下效果
点工具栏上 运行一下tomcat
会自动弹出一个浏览器窗口,网址变成了
http://localhost:8080/myspringbootmvc_war_exploded/,因为这里我tomcat的URL配置就是这样的,是idea自动生成的
它生成的URL格式为:
http://localhost:8080/<group>_<artifact>,拼成的,这个就变成了tomcat的根目录
为了方便,我把hello的映射变成根目录
@RequestMapping("/")
public String sayHi(){
return "你好,springBootMVC";
}
四、打包成war发送到生产环境的tomcat上
本地测试没有问题了,我们需要打包成war放到生产环境了,为了方便生产环境安装了tomcat,
其它默认
4.1 idea生成war包
这里我们使用idea自带的maven命令,分别双击:clean/package(clean为清除,package为打包),如下图所示:
ps:如果是第一次运行的话,其实可以不用clean,clean主要是清除之前生成的
4.2 配置线上环境tomcat虚拟主机并访问
你安装用centos8安装了一个nginx+mysql8.0+tocmat9.0的环境,见《centOS8安装LNMT》
tomcat的网站目录为:/disk1/www/hualinux.com
tomcat二进制所在目录为:/disk1/app/tomcat/
4.2.1 上传war文件
上传上图中idea的“myspringbootmvc-0.0.1-SNAPSHOT”文件并重命名为demo.war,并把它上到/disk1/www/hualinux.com目录下
4.2.2 配置tomcat虚拟主机
配置线上环境的tomcat虚拟主机,这里为了方便我用IP访问,没有配置域名
我就直接修改上面已经配置好的/disk1/app/tomcat/conf/Catalina/localhost/ROOT.xml
#只是添加红色部分,指定一下war的位置
<Context path="" docBase="/disk1/www/hualinux.com/demo.war" debug="0" reloadable="false" crossContext="true">
</Context>
#重启tomcat
systemctl stop tomcat
systemctl start tomcat
我们知道如果是war包的话会解压到appBase指定的目录中,默认为webapps,我没有进行修改,原来webapps/ROOT是放tomcat目录的,看一下是否变化,如果变化了则成功了
4.2.3 测试
配置好线上tomcat,重启tomcat后,现在访问测试一下效果,打开浏览器输入
http://192.168.3.81:8080/