springMVC学习笔记(三)

springmvc

multipart形式数据

首先引入jar包

<dependency>
 <groupId>commons-fileupload</groupId>
 <artifactId>commons-fileupload</artifactId>
 <version>1.3.1</version>
</dependency>

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

 <h2>
        <fieldset>
            <form action="/demo/upload" method="post" enctype="multipart/form-data">
                <input type="file" name="uploadFile">
                <input type="submit" value="上传">
            </form>
        </fieldset>
    </h2>

后端:
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中配置文件上传解析器。

<!--    多元素解析器
        id固定为multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--        设置上传文件大小上限,单位是字节,-1代表没有上限,也是默认的-->
        <property name="maxUploadSize" value="5000000"></property>
    </bean>

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";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值