天天看点

SpringMVC实现文件上传、拦截器1.实现文件上传2. 拦截器

1.实现文件上传

和Servlet方式的本质一样,都是通过commons-fileupload.jar 和 commons-io.jar

SpringMVC可以简化文件上传的代码,但是必须满足要求:实现MultipartResolver接口,而该接口的实现类SpringMVC已经提供 CommonsMultipartResolver

具体步骤:(直接使用CommonsMultipartResolver实现上传)

  1. jar包

    commons-fileupload.jar

    commons-io.jar

  2. 配置CommonsMultipartResolver

    将其加入SpringIoC容器中

    SpringMVC实现文件上传、拦截器1.实现文件上传2. 拦截器
    该类的bean的 id 必须是 multipartResolver ,因为spring容器在初始化时会自动寻找 id= multipartResolver 的bean,并将其将入容器

前端:

<form action="hh/testUpLoad" method="post" enctype="multipart/form-data">
	<input type="file" name="file" />
	描述:<input name="desc" type="text" />
	<input type="submit" value="上传" />		
</form>
           

controller:

@RequestMapping("testUpLoad")
public String testUpLoad(@RequestParam("desc") String desc,
@RequestParam("file") MultipartFile file) throws IOException{
	
	System.out.println(desc);
	InputStream inputStream = file.getInputStream();
	String str = file.getOriginalFilename();
	OutputStream outputStream=new FileOutputStream("G:\\"+str);
	
	byte[] bs=new byte[1024];
	int len=0;
	while((len=inputStream.read(bs))!=-1) {
		outputStream.write(bs, 0, len);
	}
	outputStream.flush();
	outputStream.close();
	inputStream.close();
	
	return "success";
}
           

2. 拦截器

拦截器的原理和过滤器相同

SpringMVC:要想实现拦截器,必须实现一个接口HandlerInterceptor

SpringMVC实现文件上传、拦截器1.实现文件上传2. 拦截器

渲染就是:将jsp中的<% String name…%>、css、js等组装完毕,最终显示出来。

a.编写拦截器:类 implements HandlerInterceptor

public class MyInterceptor implements HandlerInterceptor {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("拦截请求");
		return true;//true:拦截操作之后,放行   false:拦截之后不放行,请求终止
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("拦截响应");
		
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("视图(jsp)被渲染完毕");
	}
           

b.配置: 将自己写的拦截器 配置到springmvc中(spring)

<!-- 将自己写的拦截器  配置到springmvc中(spring);不配置下面默认拦截所有请求 -->
<mvc:interceptors>
	<!-- 配置具体的拦截路径(请求) -->
	<mvc:interceptor>
		<!-- 指定拦截的路径(基于ant风格),与下面那个配置取交集 -->
		<mvc:mapping path="/**"/>
		<!-- 指定不拦截的路径 -->
		<mvc:exclude-mapping path="/hh/testUpLoad"/>
		<bean class="com.ph.interceptor.MyInterceptor"></bean>
	</mvc:interceptor>
	<!-- 在这里配置多个拦截器 -->
</mvc:interceptors>