SpringMVC案例

目录

案例一:文件上传

实现方式一:传统文件上传

实现方式二:使用springmvc的方式

案例二:异常处理

案例三:拦截器

​拦截器与过滤器的区别

示例代码


案例一:文件上传

需要导入的坐标

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

编写页面

<form action="/download" method="post" enctype="multipart/form-data">
    <input type="file" name="download"><br/>
    <input type="submit" value="提交">
</form>

enctupe属性必须设置为multipart/form-data,将信息进行分段处理

method属性必须设置为post,因为post没有大小设置

实现方式一:传统文件上传

控制器:

  @RequestMapping("/download")
    public String download_1(HttpServletRequest request) throws Exception {
        String path="D://Download";//上传目录
        File file = new File(path);//一会向该目录 上传文件
//        创建创建磁盘文件项工厂
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
//        解析request对象
        List<FileItem> fileItems = servletFileUpload.parseRequest(request);
        for (FileItem fileItem : fileItems) {
            if(!fileItem.isFormField()){
                //当是上传文件项时
                String name = fileItem.getName();
                String s = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
                name=s+'-'+name;
//                上传文件
                fileItem.write(new File(path,name));
//                删除临时文件
                fileItem.delete();
            }
        }
        return "succes";
    }

succes.jsp为返回页面

实现方式二:使用springmvc的方式

使用前提:变量名称与表单的file标签的name属性名称相同

因为框架提供了文件解析器,控制器就省去了解析request对象,直接获取上传文件项即可

控制器:

  @RequestMapping("/download")
    public String download_2(MultipartFile download) throws IOException {
        String path="D://Download";//上传目录
        File file = new File(path);
        //获取文件名,并且做唯一处理
        String Filename = download.getOriginalFilename();
        String s = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
        Filename=s+Filename;
        //上传
        download.transferTo(new File(file,Filename));
        return "succes";
    }

配置文件解析器:

<!--    文件解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--        文件最大设置为10M-->
        <property name="maxUploadSize" value="5242880"/>
    </bean>

案例二:异常处理

当页面出现异常,调用异常处理器跳转至指定页面

原理

自定义异常类

@Setter @Getter @AllArgsConstructor
public class MyException extends Exception{
    private String message;
}

编写异常处理器 实现HandlerExceptionResolver接口

public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        MyException myException=null;
//        获取异常对象
        //如果是MyException异常 则直接赋值;如果不是,则创建一个新对象 传入新的信息
        if(ex instanceof MyException){
            myException=(MyException)ex;
        }else {
            myException=new MyException("新创建一个对象");
        }
        //创建ModelAndView对象,根据刚刚获取的message 跳转页面
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message",myException.getMessage());
        modelAndView.setViewName("error");
        return modelAndView;
    }
}

配置异常处理器    将异常处理器放入ioc容器中即可

<!--    配置异常处理器-->
    <bean class="com.eoor.MyExceptionResolver"/>

在控制器中捕获异常

 @RequestMapping("/her")
    public String t_8() throws MyException {
//        制造异常
        try {
            int i=1/0;
        } catch (Exception e) {
            e.printStackTrace();
            throw new MyException("您先休息一下");
        }
        return "succes";
    }

案例三:拦截器

原理

拦截器与过滤器的区别

过滤器是servlet的一部分,任何框架都可以使用;拦截器是springmvc框架独有的

过滤器可以拦截任何资源,拦截器只会拦截控制器中的方法

示例代码

自定义拦截器  实现HandlerInterceptor接口

public class myinterceptor1 implements HandlerInterceptor {
    @Override
    //预处理
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器1 预处理");
        return true;
    }
    @Override
    //后处理
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器1 后处理");
    }
    @Override
    //最终处理
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器1 最终处理");
    }
}

public class myinterceptor2 implements HandlerInterceptor {
    @Override
    //预处理
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器2 预处理");
        return true;
    }
    @Override
    //后处理
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器2 后处理");
    }
    @Override
    //最终处理
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器2 最终处理");
    }
}

配置拦截器  

<!--    配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/user/**"/>
            <bean class="com.intlterceptor.myinterceptor1"/>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/user/**"/>
            <bean class="com.intlterceptor.myinterceptor2"/>
        </mvc:interceptor>
    </mvc:interceptors>

 要访问的控制器的一级目录是/user/

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值