美文网首页
java基础-day56-SpringMVC-02

java基础-day56-SpringMVC-02

作者: 触手不可及 | 来源:发表于2021-07-15 08:38 被阅读0次

    springmvc

    1.SpringMVC方式文件上传

    SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同。
    1.在pom.xml文件中导入依赖

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

    2.在springmvc.xml中配置文件解析器,id 名称必须为:multipartResolver

    
    <!--配置文件解析器对象-->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="50000000" />
        </bean>
    

    3.创建jsp页面

    <form action="user/fileupload" method="post" enctype="multipart/form-data">
            选择文件:<input type="file" name="upload" /><br/>
            <input type="submit" value="上传" />
    </form>
    

    4.编写测试方法

        @RequestMapping("/fileupload")
        public String fileupload(MultipartFile upload) throws Exception {
            System.out.println("springmvc文件上传...");
    
            // 使用fileupload组件完成文件上传
            // 上传的位置
            String path = "G:/upload";
            // 判断,该路径是否存在
            File file = new File(path);
            if(!file.exists()){
                // 创建该文件夹
                file.mkdirs();
            }
    
            // 说明上传文件项
            // 获取上传文件的名称
            String filename = upload.getOriginalFilename();
            // 把文件的名称设置唯一值,uuid
            String uuid = UUID.randomUUID().toString().replace("-", "");
            filename = uuid+"_"+filename;
            // 完成文件上传
            upload.transferTo(new File(path,filename));
    
            return "success";
        }
    

    2.SpringMVC的异常处理

    Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。

    1.创建自定义异常类

    public class MyException extends Exception {
    
        public MyException(String message) {
            super(message);
        }
    }
    

    2.创建异常处理器类

    public class MyExceptionResolver implements HandlerExceptionResolver {
    
        @Override
        public ModelAndView resolveException(HttpServletRequest request,
               HttpServletResponse response, Object object, Exception exception) {
    
            ModelAndView mv = new ModelAndView();
    
            // 判断异常类型
            if (exception instanceof MyException) {
                // 如果是自定义异常,读取异常信息
                mv.addObject("msg", exception.getMessage());
            } else {
                // 如果是运行时异常,则取错误堆栈,从堆栈中获取异常信息
                mv.addObject("msg", "未知异常");
            }
            // 返回错误页面,给用户友好页面显示错误信息
            mv.setViewName("/error.jsp");
    
            return mv;
        }
    }
    

    3.在springmvc.xml中配置

    <!--配置异常处理器-->
    <bean id="myExceptionResolver" class="com.qf.exception.MyExceptionResolver"/>
    

    4.测试

    //测试异常方法
    @RequestMapping(value="/testException")
    public void testException() throws MyException{
    
        //System.out.println(1/0);
        throw new MyException("自定义异常");
    }
    

    3.SpringMVC框架中的拦截器

    拦截器的概述
    SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。
    可以定义拦截器链,连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。

    拦截器和过滤器的功能比较类似,有以下区别:

    过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。
    拦截器是SpringMVC框架独有的。

    过滤器配置了,可以拦截任何资源。
    拦截器只会对控制器中的方法进行拦截。

    拦截器也是AOP思想的一种实现方式
    想要自定义拦截器,需要实现HandlerInterceptor接口。

    1.创建自定义拦截器

    public class MyInterceptor implements HandlerInterceptor {
    
        /**
         * 预处理,controller方法执行前
         * return true 放行,执行下一个拦截器,如果没有,执行controller中的方法
         * return false 不放行
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle");
            return true;
        }
    
    
        //后处理方法,controller方法执行后,success.jsp执行之前
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle");
        }
    
        //success.jsp页面执行后,该方法会执行
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion");
        }
    }
    

    2.在springmvc.xml中配置拦截器

       <!--配置拦截器-->
        <mvc:interceptors>
            <!--配置拦截器-->
            <mvc:interceptor>
                <!--要拦截的具体的方法-->
                <mvc:mapping path="/user/*"/>
                <!--不要拦截的方法
                <mvc:exclude-mapping path=""/>
                -->
                <!--配置拦截器对象-->
                <bean class="com.qf.interceptor.MyInterceptor" />
            </mvc:interceptor>
        </mvc:interceptors>
    

    3.测试

    @RequestMapping("/testInterceptor")
    public String testInterceptor(){
        System.out.println("testInterceptor执行了...");
        return "success";
    }
    

    相关文章

      网友评论

          本文标题:java基础-day56-SpringMVC-02

          本文链接:https://www.haomeiwen.com/subject/vulppltx.html