springMVC中对静态资源放行,避免服务器负荷过大,在后面的学习中(多服务),静态资源会放入在Nginx中,不走参与路由转发
静态资源映射
在webMVC配置支持中 配置请求放行路径 并 指明放行资源文件路径
普通文件上传
依赖:
<!--文件上传-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
配置类:
文件的编码格式,文件的上传大小
SpringMvcConfig文件中配置多媒体文件解析器,用于文件上传:
@Configuration
@ComponentScan("com.itheima")
public class SpringMvcConfig extends WebMvcConfigurationSupport {
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
//设置上传最大文件大小,单位为字节,例如:这里设置的100M
multipartResolver.setMaxUploadSize(104857600L);
//设置上传文件的编码为“UTF-8”
multipartResolver.setDefaultEncoding("utf-8");
return multipartResolver;
}
}
controller层代码:
@Controller
public class RequestBodyController{
/**
* 上传文件
*
* @param file
* @return
* @throws IOException
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String file(MultipartFile file) throws IOException {
//1.获取上传文件的后缀名 itheima.jpg--->.jpg,重新构造文件名 a1b1ec31.jpg
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String fileName = UUID.randomUUID().toString() + suffix;
//2.判断指定的文件夹是否存在D:/upload/ 是否存在,如果不存在就创建该文件夹
File file1 = new File("D:/upload/");
if (!file1.exists()) {
file1.mkdirs();
}
//3.将上传的文件itheima.jpg上传到指定的文件夹下变成a1b1ec31.jpg
file.transferTo(new File("D:/upload/" + fileName));
return "success";
}
}
全局异常 响应
主要是对编码中的可预测出现异常进行统一处理
方案一:
写一个组件类放入到容器中
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 异常处理返回页面
*
* @param e
* @param model
* @return
*/
@ExceptionHandler
//@ResponseBody
public String exceptionHandler(RuntimeException e, Model model) {
model.addAttribute("message", e.getMessage());
return "login";
}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface ControllerAdvice {}
注意:这个注解也是一个组件注解
拦截器(自定义)
- 实现HandlerInterceptor接口
- 将自定义的拦截器添加到拦截器链中
//添加自定义拦截器
@Override
protected void addInterceptors(InterceptorRegistry registry) {
// 把我们自定义的AuthIntercept 放入到整个拦截器链中执行
registry.addInterceptor(new AuthInterceptor()) ;
super.addInterceptors(registry);
}