springMVC学习笔记(三)

springMVC学习笔记(三)

  • springmvc
    • multipart形式数据
    • spring mvc 异常处理机制
      • springmvc 异常处理器
    • 重定向参数传递flash属性

springmvc

multipart形式数据

首先引入jar包


 commons-fileupload
 commons-fileupload
 1.3.1

前端:
1、需要form表单
2、需要method为post
3、enctype=multipart
4、file组件

 

后端:
1、进行文件重命名
2、存储到磁盘(考虑同一目录文件过多,可以按照日期创建新的文件夹)
3、把文件存储路径更新到数据库

@RequestMapping(value = "/upload")
    @ResponseBody
    public ModelAndView upload(MultipartFile uploadFile, HttpSession session) throws IOException {
        //处理上传文件
        String originalFilename = uploadFile.getOriginalFilename();
        //获取后缀
        String ext = originalFilename.substring(originalFilename.lastIndexOf(".") + 1, originalFilename.length());
        //新名称
        String newName= UUID.randomUUID().toString()+"."+ext;
        //存储,存储到指定的文件夹,/upload/yyyy-MM-dd,考虑到文件过多的情况,按照日期生成子文件夹
        String realPath = session.getServletContext().getRealPath("/uploads");
        String datePath=new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        File folder=new File(realPath+"/"+datePath);
        if (!folder.exists()){
            folder.mkdirs();
        }
        uploadFile.transferTo(new File(folder,newName));

        // TODO 更新到数据库字段
        }

在springmvc中,我们需要在xml中配置文件上传解析器。


    

        
    

spring mvc 异常处理机制

springmvc 异常处理器

public class DemoController {
    //springmvc 的异常处理机制(异常处理器)
    //注意:写在controller中 只会对当前controller生效
    @ExceptionHandler(ArithmeticException.class)
    public void handlerException(ArithmeticException exception, HttpServletResponse response){
        //处理逻辑
        try {
            response.getWriter().write(exception.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    }

全局controller生效

//controller增强,可以让我们捕获所有controller对象handler方法抛出的异常
@ControllerAdvice
public class GlobalExceptionResolver {
    //springmvc 的异常处理机制(异常处理器)
    //注意:卸载controller 只会对当前controller生效
    @ExceptionHandler(ArithmeticException.class)
    public ModelAndView handlerException(ArithmeticException exception, HttpServletResponse response){
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("msg", exception.getMessage());
        modelAndView.setViewName("error");
        return modelAndView;
    }
}

重定向参数传递flash属性

1、拼接方式

 @RequestMapping("handleRedirect")
    public String handleRedirect(String name, RedirectAttributes redirectAttributes){

        return "redirect:handle01?name="+name;//拼接参数安全性、长度都有局限
        }

2、使用flash属性

 //可以使用flash属性
        //addFlashAttribute方法设置了一个flash属性,该属性会被暂存到session中,在跳转到页面之后,该属性值销毁。
        redirectAttributes.addFlashAttribute("name",name);
        return "redirect:handle01";

你可能感兴趣的:(upload,exception)