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/>