spring boot内置web服务器默认是tomcat,但是并不是一定要用它,spring boot不止整合了这一个
我们在启动的时候可以看到,日志输出是使用的tomcat
这是由于导入的web包会自动默认加载tamcat
如果不用tomcat,此时需要将pom依赖修改,将web服务器改成undertow
<!--加入web依赖 web包括spring-boot-stater -->
<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>
<!--加入undertow依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
在启动项目即可
除了内置web的修改,spring boot同样可以修改mvc的配置,前面我们配置了myatisplus,mvc和它一样也是通过类来修改配置
package com.wy.scjg.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
}
不同的是mvc的配置实现了一个接口,通过这个接口我们可以设置前端相关的一些配置,这里我们以自定义静态资源配置为例
idea快捷键ctrl+o,打开父类方法界面,我们可以看到很多方法
我们重写其中的自定义静态资源方法
package com.wy.scjg.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
/**
* 自定义静态资源方法
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//自定义静态资源存放地址
registry.addResourceHandler("/imgs/**")
.addResourceLocations("file:D://imgs//");
}
}
这个配置本质上,就和SSM时配置本地映射是一样,而且它不影响框架默认的四个静态资源路径,不过不同的是默认的路径不需要出现在前端调用路径中,但是这里配置的如/imgs
就是一个需要出现的虚拟路径
到此,我们就可以完成知识点11的遗憾,去将前端的头像展示出来
第一步:首先修改添加的控制器,因为知识点11时,我们保存的路径直接是一个本地的路径,我们现在有了自定义静态资源的配置,那么我们只需要保存文件名就行
/**
* 正式添加方法
* @param user
* @return
*/
@RequestMapping("/add")
@ResponseBody
public boolean add(User user,MultipartFile file,MultipartFile[] files){
try {
//证件照的处理
if (file != null) {
//判断文件不为空
if (!file.isEmpty()) {
//获取文件名称
String originalFilename = file.getOriginalFilename();
//新文件名称
String fileName = UUID.randomUUID() + "_" + originalFilename;
//创建新文件对象
File destFile = new File("D://imgs", fileName);
//判断目标文件存在否
if (!destFile.getParentFile().exists()) {
//创建目录
destFile.mkdirs();
}
//执行拷贝过程
file.transferTo(destFile);
//保存文件的文件名
user.setZp("http://localhost:91/imgs/"+fileName);
}
}
//任意张个人照的处理
if(files!=null ){
//准备一个字符串缓冲区,保存任意张个人照路径
StringBuffer grzPaths = new StringBuffer();
for(MultipartFile t:files){
if(!t.isEmpty()){
//获取文件名称
String originalFilename = t.getOriginalFilename();
//新文件名称
String fileName = UUID.randomUUID() + "_" + originalFilename;
//创建新文件对象
File destFile = new File("D://imgs", fileName);
//判断目标文件存在否
if (!destFile.getParentFile().exists()) {
//创建目录
destFile.mkdirs();
}
//执行拷贝过程
t.transferTo(destFile);
//拼接文件的文件名,用逗号隔开
grzPaths.append("http://localhost:91/imgs/"+fileName+",");
}
}
//保存所有个人照路径
user.setGrz(grzPaths.delete(grzPaths.length()-1,grzPaths.length()).toString());
grzPaths.delete(0,grzPaths.length());
}
}catch (IOException io){
io.getMessage();
}
return userService.save(user);
}
前端列表页面添加图片的展示,这里注意只展示工作照,多张的个人照留给大家扩展自己写
<td><img src="${user.zp!""}" width="100px" height="100px"></td>
此外将添加页面的ajax成功回调函数改一下,添加成功后去列表页面
// ajax请求
$.ajax({
type: "POST",
url: "/user/add",
data: formData,
processData: false,
contentType: false,
success: function (data) {
alert("文件接收成功")
window.location.href="/user/list";
},
error: function (e) {
alert("文件接收失败");
}
});
运行程序,添加用户查看效果
这个时候我要解释一点,有人觉得数据库可以减少存储的父路径,将父路径写到前端,大家怎么方便怎么来
如果细心的朋友会发现,在邮箱地址传递上,发生了意外,@变成了%40,传向后台发生转义,这个事网上很多办法都是时灵时不灵的,我这里试了几个方法没有能够生效的,最后在后台用字符串转换了一下
user.setEmail(user.getEmail().replaceAll("%40","@"));
到此本篇知识点讲解结束,此外 本次整体讲解的spring boot项目已上传github