上一章
SpringBoot自学第7天——thymeleaf+拦截器写好网页登陆功能
文章目录
前言
看过这么多源码,我已经学会自动跳过并寻找有用信息了。
P162 | P164 | P166-170 | P172建议跳过(跟我一样肝的人建议不接受建议,可以感受一下绝望)
一、文件上传
1. 表单编写注意要点
- 表单提交方式为post,并且要设置上传数据类型为
multipart/form-data
例如:<form th:action="@{/load_1}" method="post" enctype="multipart/form-data">
- 表单内文件上传组件
input
设置为type=“file”
,多文件上传需要加上multiple
属性
2.后台Controller接收
多文件接收用MultipartFile[]
类型,单文件用MultipartFile
类型
示例代码如下:
@ResponseBody
@PostMapping("/load_2")
public String upload_2(@RequestParam("email") String email,
@RequestParam("pass") String pass,
@RequestPart("photos") MultipartFile[] photos){
StringBuffer stringBuffer = new StringBuffer();
for(MultipartFile m:photos){
stringBuffer.append( m.getOriginalFilename()+"; " );
}
log.info("email:{},pass:{},PhotoNames:{}",email,pass,stringBuffer);
return "ok";
}
3. 文件上传模块配置
#properties文件
#文件上传使能:默认为true
spring.servlet.multipart.enabled=true
#单个文件上传最大大小:默认为1MB
spring.servlet.multipart.max-file-size=20MB
#整个请求最大请求大小:默认为10MB
spring.servlet.multipart.max-request-size=100MB
4. MultipartFile
类常用函数
getOriginalFilename()
函数 获取文件名(包括后缀)transferTo()
将文件转存到某个路径中multipartFile.transferTo(new File("D:\\"+headImg.getOriginalFilename()));
二、异常处理
1. 自定义函数,捕捉已存在的异常进行处理
代码如下(示例):
@ControllerAdvice
public class GlobalException {
/**
* @ExceptionHandler 注解,默认value参数为一个数组,写可以处理的异常类
* @return 视图地址,也可以返回ModelAndView(数据+视图)
*/
@ExceptionHandler({ArithmeticException.class,NullPointerException.class,})
public String handleArithException(Exception e){
log.info("捕捉到异常:{}", e);
return "index";
}
}
2. 自定义运行时异常,在逻辑代码中主动抛出
代码如下(示例):
/*
* 自定义异常需要逻辑代码中主动抛出(运行时异常)
*/
@ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "上传文件超过指定大小")
public class MyException extends RuntimeException{
public MyException(){
super();
}
public MyException(String message){
super(message);
}
}
3. 自定义异常解析
代码如下(示例):
/**
* 自定义异常解析器 一般用不上,不用看
* @Order value:优先级 数字越小,该异常解析优先级越高(Integer)
*/
@Order(value = Ordered.HIGHEST_PRECEDENCE)
@Component
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
try {
httpServletResponse.sendError(520,"程序员敲代码不认真自动产生错误");
modelAndView.addObject("code",520);
modelAndView.addObject("msg","因为想她,大脑产生异常");
} catch (IOException ioException) {
ioException.printStackTrace();
}
modelAndView.setViewName("error/520");
return modelAndView;
}
}
三、 整合Druid以及开启相关配置
代码如下(示例):
1. 添加相关依赖,并刷新Maven
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
```
2. 创建application.yml文件,添加druid的配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/eb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
#登陆到管理页
stat-view-servlet:
enabled: true
login-username: 123
login-password: 123
#配置监控统计拦截的filters,去掉后监控界面sql无法统计,wall用于防火墙
aop-patterns: com.mrzs.*
filters: stat,wall
#web页面请求监控
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,/druid'
# maxPoolPreparedStatementPerConnectionSize: 20
# useGlobalDataSourceStat: true
# connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#
#
# initialSize: 5
# minIdle: 5
# maxActive: 20
# maxWait: 60000
# timeBetweenEvictionRunsMillis: 60000
# minEvictableIdleTimeMillis: 300000
# validationQuery: SELECT 1 FROM DUAL
# testWhileIdle: true
# testOnBorrow: false
# testOnReturn: false
# poolPreparedStatements: true
jdbc:
template:
query-timeout: 3
3. 运行程序,访问/druid
目录,帐号:123 密码:123登录页面进入监控台
配置成功
总结
gitee项目:SpringBoot自学第8天——文件上传、异常处理、Druid数据源