MultipartResolver与ExceptionResolver

MultipartResolver

在 Spring 中, MultipartResolver 主要用来处理文件上传,它支持 Commons FileUploadCOS FileUpload
缺省,Spring是没有multipart处理,因为一些开发者想要自己处理它们。如果你想使用Spring的multipart,需要在web应用的上下文中添加multipart解析器。这样,每个请求就会被检查是否包含multipart。然而,如果请求中包含multipart,你的上下文中定义的MultipartResolver就会解析它。这样,你请求中的multipart属性就会象其它属性一样被处理。

主要配置如下:

1
2
3
4
<bean id="multipartResolver"     class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 该属性用来配置可上传文件的最大 byte 数 -->
<property name="maximumFileSize"><value>100000</value></property>
</bean>

该 Bean 还有其它的属性如 defaultEncoding, maxInMemorySize, servletContext, uploadTempDir 一般默认就可以了。
其它的配置和普通的没有什么区别,当然在上传的表单中必须指定其 enctype 为 mulitpart/form-data ,如:

1
2
3
4
5
 <form method="post" action="upload.html" enctype="multipart/form-data">
<input type="file" name="paper" />
<input type="text" name="name"/>
<input type="submit"/>
</form>

注意:项目中必须有 commons-io.jar , commons-fileupload.jar 包的支持。

ExceptionResolver

在 Spring 中,框架自动集成了异常处理,其主要核心是由 ExceptionResolver Bean 来处理的,在框架启动时,会检测这个 Bean ,如果不存在则不会处理系统中的异常,如果有,则会按照相关上配置来处理自动异常。
如有如下配置:

1
2
3
4
5
6
7
8
9
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.sql.SQLException">showDBError</prop>
<prop key="java.lang.RuntimeException">showError</prop>
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">maxUploadExceeded</prop>
</props>
</property>
</bean>

则会在系统运行过程中监测异常,如果出现 SQLException ,会调用相关的 showDBError 页面来显示异常,类似的出现 RuntimeException , MaxUploadSizeExceededException 也是一样。
该 Bean 的主要属性为 exceptionMappings 用来映射异常对应的处理页面,以 props 的形式出现。