springMVC

1.当controller 中的参数是一个List时,需要加@RequestParam 数据才会被封装到List中,默认情况下,springmvc会创建对象,但是List是一个接口不能创建对象,所以加上注解让spirngmvc直接给List赋值即可

2.springMVC接收文件上传的数据,文件上传的表单需要一定的要求,如下:

  表单提交的方式必须是POST

  表单的enctype属性必须是 multipart/form-data

  文件上传项需要有name属性

<form action="" enctype="multipart/form-data" methods="post" >
    <input type="file" name="myFile">
</form>
@PostMapping("/param10")
    public String param10(@RequestBody MultipartFile myFile) throws JsonProcessingException {
        System.out.println(myFile);
        return "/index.jsp";
    }

  springMVC默认关闭文件上传功能,需要开启

  服务端,由于映射器适配器需要文件上传解析器,而该解析器默认未被注册,所以手动注册

  

<!--配置文件上传解析器,id为固定写法-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--文件的编码格式,默认是ISO8859-1 -->
        <property name="defaultEncoding" value="UTF-8"/>
        <!--上传 的每个文件限制的大小 单位字节-->
        <property name="maxUploadSizePerFile" value="1048576"/>
        <!--上传文件的总大小-->
        <property name="maxUploadSize" value="3145728"/>
        <!--上传文件的缓存大小-->
        <property name="maxInMemorySize" value="1048576"/>
    </bean>

而 CommonsMultipartResolver 底层使用的Apache 的是Common-fileuplad等工具API进行的文件上传

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

3.springMVC静态资源访问,默认情况下,我们请求静态资源时,路径匹配不到会找到tomcat中defaultServlet,defaultServlet具有解析静态资源的能力,但是springMVC中的DispatcherServlet配置时占用了defaultServlet的匹配路径/,缺省的配置,我们配置的DispatcherServlet会覆盖掉defaultServlet。

三种解决方案:

<!--再次激活DefaultServlet url-pattern配置更加精确一点-->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/img/*</url-pattern>
    </servlet-mapping>
    <!--配置静态资源的映射路径--> 页面访问路径---> 文件夹的路径
    <mvc:resources mapping="/img/*" location="/img/"/>
    <mvc:resources mapping="/css/*" location="/css/"/>
    <mvc:resources mapping="/html/*" location="/html/"/>
<!--向spring容器中注入一个静态资源处理器-->
    <mvc:default-servlet-handler/>

第三种方式,在spring-mvc.xml 中去配置<mvc:default-servlet-handler>,该方式是注册了一个DefaultServletRequestHandler处理器,静态资源的访问都由该处理器去处理,这也是开发中使用最多的,但是默认的 RequestMappingHandlerMapping和 HandlerAdapter 就不会加载,需要我们手动去配置。

    <!--mvc注解驱动 内部会帮我们注册HandlerMapping,HandlerAdapter(默认指定jackson的消息转换器) -->
    <mvc:annotation-driven/>

 

posted @ 2023-07-27 16:18  record-100  阅读(24)  评论(0)    收藏  举报