KKB:Spring 拦截器、拦截器和过滤器的联系、spring-MVC文件的上传和下载

先看看 源码,分析一下拦截器,下面的源码是doDispatcher()方法

 

 

 

配置拦截器:

1、创建拦截器的类,实现HandlerInterceptor,重写三个方法:开始执行(return 需修改为true)、结束执行、最终执行

2、spring-mvc中配置拦截器

下面写法表示的是拦截所有的请求,所有的请求都需要走这个拦截器

启动服务器,测试

 

 

我们修改拦截器,对需要拦截的请求进行拦截

 

 

拦截器的问题深入

当有多个拦截器的时候,执行顺序是怎么样的呢?

 

项目测试

 


拦截器的使用场景

1、日志记录:记录请求信息的日志

2、权限检查,如登录检查

3、性能检测:检测方法的执行时间


springMVC的拦截器(Interceptor)和 过滤器(Filter)的区别和联系

拦截器属于面向切面编程的一种运用,将两个不关联的类通过配置文件关联起来,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

 

过滤器:修改字符编码,过滤低俗文字、危险字符

 

用户发送的请求 首先经过的是过滤器,然后才是拦截器。出的时候,最先出的是拦截器,然后才是过滤器

 


spring-MVC文件的上传和下载

 

1、添加jar包

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

 

2、配置spring.xml文件(使用了P标签)

 

3、编写前端代码,指定上传的文件

4、编写代码接收前端传过来的上传文件

package com.atshiyou.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

@Controller
public class UploadController {
    @RequestMapping("upload")
    public String upload(MultipartFile myfile, HttpServletRequest request){
        //处理上传的文件内容
        //将上传的文件夹转化成服务器上的路径
        String realPath = request.getRealPath("/uploadImage");
        System.out.println("realPath="+realPath);
        //得到上传的文件名
        String originalFilename = myfile.getOriginalFilename();
        System.out.println("文件的名称:"+originalFilename);
        //准备上传
        try {
            myfile.transferTo(new File(realPath+"/"+originalFilename));
        } catch (IOException e) {
            e.printStackTrace();
        }
        request.getSession().setAttribute("filename",originalFilename);
        return "uploadsuccess";
    }
}

 

注意,这里很容易会报服务器错误

当上传的目录文件夹uploadimage为空的时候,不会编译进入target文件夹,这时候,我们需要随便加一个文件

 


 

springMVC中实现文件的下载

 

1、添加 jar包,上传的jar包的其中一个

 

2、编写前端的代码,使用的是 ? 拼接文件名

3、编写controller

package com.atshiyou.controller;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.net.URLEncoder;

@Controller
public class DownloadController {
    @RequestMapping("/download")
    public ResponseEntity<byte[]> download(String filename, HttpServletRequest request)throws Exception{
        //下载结果以流的方式返回给前台
        //1、转换服务器地址
        String realPath = request.getRealPath("/uploadImage");
        //2.得到要下载的文件路径
        String filePath = realPath + "/" + filename;
        //3、设置响应的头信息
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //给用户弹窗的方式进行下载
        //attachment:用来表示以附件的形式响应给客户端
        httpHeaders.setContentDispositionFormData("attachment", URLEncoder.encode(filename,"utf-8"));
        //创建文件
        File file = new File(filePath);
        //将文件进行返回
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),httpHeaders, HttpStatus.CREATED);
        return responseEntity;
    }
}

测试可用

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值