创建Springboot应用:
Spring Initializr->
maven核心配置管理文件:pom.xml
<dependencies>下记录了一些第三方库
helloworld :
1.在com.example.demo(自己写的包一般都放在这里) 下创建一个controller软件包
2.在包下面建一个HelloController类
网址构成:http://域名/path
这里是本地8080接口所以就是http://localhost:8080/hello
@RestController:标记当前类是接受web请求的类 @RequestMapping:标记当前方法是用来处理哪个路径发来的请求
开发环境热部署:
能够无需重启SpringBoot即可重新编译
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=srg/main/java
spring.devtools.restart.exclude=static/**
spring.devtools.restart.enabled=true: 启用热部署
spring.devtools.restart.additional-paths=srg/main/java:哪个文件夹下文件有变动需要进行热部署
spring.devtools.restart.exclude=static/**:哪个文件下的文件内容变动不使用热部署
这里是static静态文件夹下的所有文件
@Controller :请求页面和数据
@RestController:只是请求数据,会将返回的对象数据转换为JSON格式
HTTP请求Method有GET POST PUT DELETE等方式
不加method默认GET POST 请求都可以接受
网页只能实现get请求实现post请求使用调试工具APIpost7
调试:新建HTTP接口,输入网址,选择method发送
如果指定了method请求:只能接受指定的请求
@GetMapping(name = '/hello' )等价于
@RequestMapping(value = "/new",method = RequestMethod.GET)
查询字符串方式:在网址后加?
例如:localhost:8080/hello?name = zhangsan&****(多个参数)
(使用Query String接收参数)保证前后端参数相同
@RequestParam(value = "nickname") String name
用来映射使得前端必须传nickname这个参数否则报错
post请求
from-data可以传文件
urlendoded只可以传参数(数据)
传json文件:raw-json-写json格式文件(字典)
指数据是来自请求体的并且使用json方式传递的不能使用QueryString传递
静态资源访问
默认静态资源存放位置:static
spring.mvc.static-path-pattern=/file/**
设置用什么路径进行访问静态资源
spring.web.resources.static-locations=classpath:/static
设置静态资源都在哪里
前端访问静态资源:
上传文件:
一般通过Form表单向后端传输文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="demo-form.php",method = "post",enctype = "mulipart/form-data">
First name: <input type="text" name="FirstName" value="Mickey"><br>
Last name: <input type="text" name="LastName" value="Mouse"><br>
file:<input type="file" name = "filename"><br>
<input type="submit" value="提交">
</form>
<p>点击"提交"按钮,表单数据将被发送到服务器上的“demo-form.php”。</p>
</body>
</html>
提交-右键检查-网络
SpringBoot的tomcat限制了请求的文件大小,每个文件的配置最大为10Mb,单次请求的文件的总数不能大于10Mb
spring.servlet.multipart.max-request-size=10MB
表单可以传递多个文件,单次请求时最多可以上传文件大小的数量
spring.servlet.multipart.max-file-size=10MB
传的每一个文件单个文件的大小
可以更改两个默认值
上传文件代码
需要传两个参数这段代码
注意参数前后端的对应
package com.example.file.controller;
import org.apache.tomcat.util.http.parser.MediaType;
import org.springframework.http.MediaTypeFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
@RestController
public class fileController
{
private final ServletConfig servletConfig;
//依赖注入
public fileController(ServletConfig servletConfig)
{
this.servletConfig=servletConfig;
}
@PatchMapping("/upload")
public String upload(String nickname, MultipartFile photo) throws IOException {
System.out.println(nickname);
//获取图片原始名称
System.out.println(photo.getOriginalFilename());
//取文件类型
System.out.println(photo.getContentType());
//servletConfig获得到运行的根目录下的某个地址
String path=servletConfig.getServletContext().getRealPath("/upload/");
System.out.println(path);
saveFile(photo,path);
return "上传成功";
}
private void saveFile(MultipartFile photo, String path) throws IOException{
//判断存储目录是否存在,不存在则创建
File dir=new File(path);
if(!dir.exists()){
dir.mkdir();
}
File file=new File(path+photo.getOriginalFilename());
photo.transferTo(file);
}
}
访问上传的文件
不加classpath表示网站运行的根目录 (与上面的相对应)
可以配置多个项
每次上传都会产生新的地址
访问:
SpringBoot实现文件下载功能
通过HttpServletResponse对象,设置响应头,并把文件流写响应的输出流
isInLine=true在浏览器中打开
isInLine=False在本地下载打开
@GetMapping("/download")
public void download( MultipartFile file, boolean isInLine, HttpServletResponse response) throws IOException
{
String filename = file.getOriginalFilename();
System.out.println("filename="+filename);
System.out.println("isInLine"+isInLine);
String path = servletConfig.getServletContext().getRealPath(("/upload/"));
InputStream inputStream = new FileInputStream(path+filename);
System.out.println(path+filename);
MediaType mediaType = MediaTypeFactory.getMediaType(filename).get();
response.reset();
response.setContentType(mediaType.toString());
if(isInLine)
{
//在线打开方式
//响应头需要使用URL encoder
response.setHeader("Content-Disposition","inline;filename="+ URLEncoder.encode(filename,"UTF-8"));
}else {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
byte[] buffer = new byte[1024];
int len = 0;
OutputStream outputStream = response.getOutputStream();
while((len = inputStream.read(buffer))>0)
{
outputStream.write(buffer,0,len);
}
inputStream.close();
}
认证:
Session认证