springMVC文件上传和拦截器-04

本文介绍如何使用SpringMVC实现文件上传功能,并详细解释了所需配置及步骤。同时,文章还介绍了如何实现自定义拦截器及其配置方法。

文件上传

和servlet实现文件上传一样,需要满足的条件如下:

  • 都是通过commons-io.jar和common-fileupload.jar
  • 实现MultipartResolver接口,该接口SpringMVC已经提供了CommonsMultipartResolver实现类

实现步骤

  1. 加入jar包

  2. 配置CommonsMultipartResolver

    <!-- 这里的id值必须是这个,不能乱写,springIOc容器在初始化时会自动寻找id为multipartResolver的bean并加入ioc容器 -->
    	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    		<property name="defaultEncoding" value="UTF-8"></property>
    		<!--上传单个文件的最大值,单位是byte,如果值为-1,表示没有限制  -->
    		<property name="maxUploadSize" value="102400"></property>
    	</bean>
    

    上面的配置只是部分配置,在eclipse中可以使用alt+/来查看提示看有哪些配置是我们可以配置的。

  3. 配置完成后自己就需要完成上传文件的代码

    @RequestMapping(value="testUpload")
    	public String testUpload(@RequestParam("text") String text, @RequestParam("file") MultipartFile file) throws IOException {
    		// 输出文件描述信息
    		System.out.println(text);
    		// 将拿到的文件转换为一个输入流
    		InputStream inputStream = file.getInputStream();
    		// 获取上传的文件名
    		String fileName = file.getOriginalFilename();
    		// 获取输出流
    		OutputStream outputStream = new FileOutputStream("d:\\" + fileName);
    		// 所谓的上传文件就是将输入流转换为输出流
    		byte[] bs = new byte[1024]; // 缓冲区
    		int len = -1;
    		while((len = inputStream.read(bs)) != -1) {
    			outputStream.write(bs, 0, len);
    		}
    		outputStream.close();
    		inputStream.close();
    		return "success"; // 这里返回的是一个视图(配置了前缀和后缀)
    	}
    

拦截器

SpringMVC要想实现拦截器需要实现一个接口:HandlerInterceptor

自己编写的拦截器

package top.twolovelypig.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyInterceptor implements HandlerInterceptor{
	@Override
	public void afterCompletion(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse,
			Object obj, Exception exception) throws Exception {
		System.out.println("视图渲染之后执行");
		
	}
	@Override
	public void postHandle(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj,
			ModelAndView modelandview) throws Exception {
			System.out.println("拦截响应");
	}

	@Override
	public boolean preHandle(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj)
			throws Exception {
		System.out.println("拦截请求");
		return true; // 返回true表示拦截操作之后依然放行,返回false拦截之后不放行,也就是请求终止
	}
}

配置拦截器(SpringMVC.xml)

<!-- 配置拦截器:将自己写的拦截器配置到SpringMVC中,默认是拦截所有请求 -->
	<mvc:interceptors>
		<!-- 配置具体的拦截路径 -->
		<mvc:interceptor>
			<!-- 指定拦截的路径,这里/**表示拦截所有的请求 -->
			<mvc:mapping path="/**"/>
			<!-- 指定不拦截的路径,这里表示不拦截testUpload请求 -->
			<mvc:exclude-mapping path="/testUpload"/>
			<!-- 最终拦截的结果是取其交集,在第一步中配置的是拦截的所有请求,第二步中配置的是不拦截testUpload请求,综合起来就是拦截除了testUpload之外的所有请求 -->
			<bean class="top.twolovelypig.interceptor.MyInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

如果想要配置多个拦截器,只需要在<mvc:interceptors>标签里面再写一个<mvc:interceptor>标签进行配置即可。

拦截器原理图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值