form表单提交

2017-10-18  本文已影响0人  ImushroomT

form表单提交主要是两种类型,分别是application/x-www-form-urlencoded 与 multipart/form-data。前者用于普通参数提交,后者用于包含文件的提交。对于后者spring mvc需要使用CommonsMultipartResolver进行解析。xml配置如下:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- one of the properties available; the maximum file size in bytes -->
        <property name="defaultEncoding" value="utf-8" />
        <property name="maxUploadSize" value="10485760000" />
        <property name="maxInMemorySize" value="40960" />
    </bean>

CommonsMultipartResolver会分别取出文件和普通参数进行参数匹配。解析方法代码如下:

public MultipartHttpServletRequest resolveMultipart(final HttpServletRequest request) throws MultipartException {
        Assert.notNull(request, "Request must not be null");
        if (this.resolveLazily) {
            return new DefaultMultipartHttpServletRequest(request) {
                @Override
                protected void initializeMultipart() {
                    MultipartParsingResult parsingResult = parseRequest(request);
                    setMultipartFiles(parsingResult.getMultipartFiles());
                    setMultipartParameters(parsingResult.getMultipartParameters());
                    setMultipartParameterContentTypes(parsingResult.getMultipartParameterContentTypes());
                }
            };
        }
        else {
            MultipartParsingResult parsingResult = parseRequest(request);
            return new DefaultMultipartHttpServletRequest(request, parsingResult.getMultipartFiles(),
                    parsingResult.getMultipartParameters(), parsingResult.getMultipartParameterContentTypes());
        }
    }

DispatcherServlet中会调用如下代码来调用CommonsMultipartResolver的resolveMultipart

processedRequest = checkMultipart(request);
上一篇 下一篇

猜你喜欢

热点阅读