zoukankan      html  css  js  c++  java
  • Spring框架深入(五)--文件上传和异常处理

    一、文件上传

      在我们的日常生活中,经常会遇到与文件上传相关的。比如,注册账号时头像的上传;而SpringMVC也提供了支持文件上传的方法;我们就来简单的看一个案例;

      1、引入支持文件上传的jar包(当然也需要SpringMVC的必需包);

      

      

      2、写一个上传页面

    <body>
        <form action="upload.action" method="post" enctype="multipart/form-data">
            <input type="text" name="username"/><br>
            <input type="file" name="pic"/><br>
            <input type="submit"/>
        </form>
    </body>

      这儿需要注意的是:传递的方法应为:post;还需要设置一个enctype="multipart/form-data";否则无法完成上传;

      enctype:HTML表单如何打包数据文件是由enctype这个属性决定的。enctype有以下几种取值:

        application/x-www-form-urlencoded在发送前编码所有字符(默认)(空格被编码为’+’,特殊字符被编码为ASCII十六进制字符)

        multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。

        text/plain 空格转换为 “+” 加号,但不对特殊字符编码。

      3、书写controller层代码:

    @Controller
    public class UploadController {
        @RequestMapping("upload.action")
        public String upload(String username,MultipartFile pic) throws IllegalStateException, IOException {
            System.out.println(username);
            
            //得到原始路径
            String originFileName = pic.getOriginalFilename();
            if(pic!=null && originFileName!=null && originFileName.length()>0) {
                //图片上传的物理路径
                String pic_path="d:\temp\";
                File file=new File(pic_path+originFileName);
                //上传动作
                pic.transferTo(file);
            }
            return "result";
        }
    }

       在这里,图片的原始路径使用MultipartFile类型的参数来接收;

       需要注意的是:图片上传的物理路径需要提前创建好;

      4、在SpringMVC配置文件中配置支持文件上传的类为Spring中的一个bean;这里SpringMVC为我们提供了一个支持文件上传的类;

    <!-- 配置支持文件上传的类作为Spring中的一个bean -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    </bean>

       到这里,一个简单的文件上传案例就完成了;

    二、异常处理

      1、异常处理机制:

      

      从图上我们可以看出,当异常被抛到SpringMVC这个巨大的Servlet时,它就会被交给HandlerExceptionResolver,然后这个方法会从异常列表中找到对应的视图,如果找到了,就会返回给客户端,如果没有,就会返回一个异常堆栈;

       常见的异常代码对应关系:

      

      2、除了使用程序已经从定义好的异常类之外,我们还可以自定义异常类,返回我们想要的视图;

       (1)、自定义一个异常类,继承Exception类;

    /*
     * 全局异常类:其他所有的异常都变成该类的异常
     * 从而实现其他所有异常都能定位在一个错误页面
     * */
    public class MyDefineGlobalException extends Exception {
        private String message;
        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
        public MyDefineGlobalException(String message) {
            super();
            this.message=message;
        }
    }

       (2)、定义一个异常处理类,实现HandlerExceptionResolver接口;

    public class GlobalExceptionHandler implements HandlerExceptionResolver {
        /*
         * ModelAndView:异常要返回的页面
         * arg3:到底抛出了哪种异常--MyDefineGlobalException
         * 异常--页面
         * */
        @Override
        public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
                Exception arg3) {
            MyDefineGlobalException myExp = null;
            if(arg3 instanceof MyDefineGlobalException) {
                myExp = (MyDefineGlobalException) arg3;
            }else {
                myExp = new MyDefineGlobalException("未知异常");
            }
            //将异常信息返回到页面
            ModelAndView mv=new ModelAndView();
            mv.addObject("msg",myExp.getMessage());
            mv.setViewName("error");
            return mv;
        }
    }

       

       (3)、自定义一个错误页面;我们这儿就简单的写一个;

    <body>
        error:${msg }
    </body>

        显示它的异常信息;

       (4)、在SpringMVC中配置异常处理的bean;

    <!-- 配置异常处理器 -->
    <bean class="exception.GlobalExceptionHandler"></bean>

       (5)、测试结果:

        

        

        到这儿,一个简单的自定义异常处理也就完成了;

    PS:因作者能力有限,如有误还请谅解;

  • 相关阅读:
    hive表链接
    hive聚合函数和表生成函数
    hive条件函数
    hive日期函数
    hive之size函数和cast转换函数
    hive数学函数
    hive排序
    5G基站概述
    MEC边缘云平台
    ELK日志系统的架构
  • 原文地址:https://www.cnblogs.com/WHL5/p/9104001.html
Copyright © 2011-2022 走看看