zoukankan      html  css  js  c++  java
  • spring in action 7.2 小结

    1 对于二进制文件上传功能的实现。在spring中使用multipart来处理,处理方式有两种。

    • CommonsMultipartResolver:使用Jakarta Commons FileUpload解析Multipart请求
    • StandardServletMultipartResolver:依赖于Servlet 3.0对multipart请求的支持(始于Spring 3.1)。

    如果在Servlet 3.0容器中部署,推荐使用StandardServletMultipartResolver。配置类中如下方式

    @Bean
        public MultipartResolver multipartResolver() {
            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
            multipartResolver.setDefaultEncoding("utf-8");return multipartResolver;
        }

    如果需要设置其他参数,并且配置的 DispatcherServlet 的初始化类继承了 AbstractAnnotationConfigDispatcherServletInitializer 或者 AbstractDispatcherServletInitializer 的话,我们可以重载customizeRegistration

    @Override
        protected void customizeRegistration(ServletRegistration.Dynamic registration) {
            registration.setMultipartConfig(
                    new MultipartConfigElement("/tmp/blog/uploads")
            );
        }

    这个参数指定文件系统的绝对路径,上传文件会临时写入到该目录中。

    2 编写页面以处理文件上传

    <h1>Multipart上传测试</h1>
    <form id="form" enctype="multipart/form-data" action="/upload.do" method="post">
        <input id="file" name="file" type="file">
        <input type="submit" value="开始上传">
    </form>

    3 controller的编写也很简单,如下:

    @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
        public String upLoadFiles(MultipartFile file) {
    
            File tempFile = new File("d://multipart.jpg");
            try {
                file.transferTo(tempFile);
                return "success";
            } catch (IOException e) {
                e.printStackTrace();
                return "error";
            }
        }

    二、处理异常

    2.1 添加异常类

    @ResponseStatus(value = HttpStatus.NOT_FOUND,
                    reason = " Spittle not found")
    public class SpittleNotFoundException extends RuntimeException {
    }

    使用@ResponseStatus 将这一异常映射为状态吗404,

    2.2 编写异常处理方法,在Controller的请求处理方法,只处理正常情况的视图,如果有异常就抛出。

    如果想要处理抛出的异常,需要在 Controller 中添加处理异常的方法。

    @ExceptionHandler(SpittleNotFoundException.class)
        public String handleSpittleNotFound() {
            return  "error/notFound";
        }

    @ExceptionHandler(SpittleNotFoundException.class) 表明抛出 SpittleNotFoundException 异常类时,将会委托该方法进行处理。它能够处理同一个控制器所有方法抛出的SpittleNotFoundException 

    异常。

    2.3 控制器添加通知

    spring 3.2为解决多个控制器处理相同异常,需要重复写@ExceptionHandler的问题。控制器通知是带有@ControllerAdvice 注解的类,这个类可以包含如下类型方法

    @ExceptionHandler()
    @InitBinder
    @ModelAttribute

    在带有@ControllerAdvice 注解的类中,以上所述的方法会运用到整个应用所有控制器中带有@RequestMapping注解的方法上。

    @ControllerAdvice注解本身已经使用了@Component,因此@ControllerAdvice注解的类会自动被组件扫描获取到。

    @ControllerAdvice
    public class MyControllerAdvice {
    
        @ExceptionHandler(SpittleNotFoundException.class)
        public String fun1() {
            return "/error/notFound";
        }
    }

    三、跨重定向传递数据

    一般的,在处理完POST请求后,通常最好执行一下重定向。这样可以防止用户点击浏览器刷新按钮或后退按钮时,客户端重新执行POST请求。在spring中返回视图String变量是以redirect:开头,

    3中方法

    1)将数据放到url后面,不过不可以传递对象

    2)将对象数据直接放到回话中,然后再删除

    3)使用flash 属性,flash 属性会一直携带这些数据直到下次请求,然后才会消失。

    第三种方法是spring 3.1中提供了 RedirectAttributes 的 addFlashAttribute()方法来设置flash属性。

    spring处理过程是首先将flash 属性复制到回话中,重定向后,取出falsh属性,并从会话中转移到model 中。处理重定向的方法就可以从model 中访问对象了。

    @RequestMapping(value = "/register")
        public String register(RedirectAttributes model) {
            model.addAttribute("username", "nice");
            model.addFlashAttribute("user", new Person());
            return "redirect:/spitter/{username}";
    
        }
  • 相关阅读:
    npm常用命令
    React进阶
    ant按需加载、配置configoverrides.js文件、项目中引入less、解决TypeError: this.getOptions is not a function错误
    数组常用api
    react项目实战简单登录注册
    Hoot新特性
    win10全局安装插件却不能全局用,https:/go.microsoft.com/ fwlink/?LinkID=135170禁止运行脚本
    Ant Design编辑表格(类组件)
    反射解决类的复制
    基于Jquery和Ajax的多选框
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/7059193.html
Copyright © 2011-2022 走看看