SpringMVC静态资源映射+文件上传+全局异常+拦截器

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 {}
注意:这个注解也是一个组件注解

拦截器(自定义)

  1. 实现HandlerInterceptor接口
    在这里插入图片描述
  2. 将自定义的拦截器添加到拦截器链中
    //添加自定义拦截器
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        // 把我们自定义的AuthIntercept 放入到整个拦截器链中执行
        registry.addInterceptor(new AuthInterceptor()) ;
        super.addInterceptors(registry);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值