目录
一、SpringMVC参数接收
常见的前端传参形式
前端key:无论是get时的key=value中的key,还是post表单中name属性表示的key,都是前端key。
-
通过地址传参:一定是GET请求,参数部分语法为
?key=value&key=value
,比如?name=zhang3&age=28
(zhang3和28均为字符串) -
通过表单传参(没有文件上传):可能为GET或POST
-
GET时依然是地址传参
?key=value&key=value
-
POST时,默认情况下叫做表单形式数据,格式为
key=value&key=value
-
-
通过表单传参(有文件上传):只可能为POST,格式为
multipart
-
通过ajax传递数据,常见的有表单形式(
key=value&key=value
)和JSON形式({"key":value, "key":value}
)
使用零散形式收参
前端传参
-
GET 方式
http://127.0.0.1:8080/param/test?name=zhang3&age=19&bir=2012-12-12
-
POST方式
控制器中
补充知识:日期转换
-
SimpleDateFormat:自己写代码做转换,可以用在任何位置,既可以把日期对象转成字符串,也可以把转成日期对象。
-
<fmt:formatDate/>
:在jsp中把日期对象变成字符串。 -
@DateTimeFormat
:接收的前端key=value
形式或multipart
形式的日期字符串转成日期对象。
使用对象形式收参
前端传参(和零散形式一样,不要和Struts2的对象.属性
形式混淆)
-
GET 方式
http://127.0.0.1:8080/param/test?name=zhang3&age=19&bir=2012-12-12
-
POST方式
实体类
控制器中
使用数组形式收参(了解)
当前端使用多选框(checkbox)传递数据或进行多文件上传(multiple)时,需要数组形式收参。
数组形式收参和零散形式、对象形式不是并列关系: 数组既可以直接写到形参列表(零散形式),也可以写到对象中(对象形式)。
前端传参
-
GET 方式
http://127.0.0.1:8080/param/test?hobby=read&hobby=play
-
POST方式
控制器中
二、SpringMVC数据传递
SpringMVC中仍然可以使用servlet的作用域来实现数据传递,在页面上使用EL表达式配合JSTL标签来完成数据的获取和显示。
也可以通过ModelAndView来传递数据(以下代码和上面的效果一致)
三、SpringMVC文件上传下载
-
文件上传:文件从客户端传送给服务器。例如:用户在注册时或者在个人中心等页面上传头像;短视频网站或者动态性质的网站中需要用户上传一些视频,图片;一些专门的下载站也需要管理员或用户上传一些文件。
-
只要在服务器上得到用户上传的文件就已经完成了文件上传的重要一步(SpringMVC主要针对这一步进行了封装)
-
文件上传的常见业务操作把这个文件复制到指定的位置(不同场景下,文件上传的业务操作不尽相同)
-
-
文件下载:文件从服务器传送给客户端。
文件上传
引入依赖
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency>
配置文件
如果需要限制上传的文件大小(默认没有限制),可以进行如下配置
JSP页面
开发控制器
文件下载(了解)
SpringMVC本身没有对文件下载进行封装,仍然需要使用比较底层的代码完成文件下载。
为了简化文件下载的底层代码书写,如果项目中没有org.apache.commons.io.IOUtils
这个类,则引入依赖(这个依赖会在很多其他依赖中内置,因此如果可以在代码中正常导入org.apache.commons.io.IOUtils
就无需引入)。
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
开发控制器
JSP页面
封装工具类
使用工具类
四、SpringMVC拦截器
可以将多个Controller中执行的共同代码放入拦截器中执行。
特点
-
拦截器只能拦截Controller的请求,不能拦截jsp(可以把需要拦截的jsp放入WEB-INF来屏蔽外部访问,然后通过被拦截的Controller使用forward跳转进去)。
-
拦截器可改变用户的请求轨迹。
-
请求先经过拦截器,之后可能还会经过拦截器。
第一个特点和filter
不一样,重点记;后两个和filter
一样。
开发过滤器:①写一个过滤器类,实现Filter接口,提取servlet中的公共代码,根据业务逻辑决定放行或拦截。②通过配置把这个过滤器类和某些路径关联起来。
开发SpringMVC拦截器:①写一个拦截器类,实现HandlerInterceptor接口,提取Controller中的公共代码,根据业务逻辑决定放行或拦截。②通过配置把这个拦截器类和某些路径关联起来。(SpringMVC拦截器还可以实现比过滤器类更高级的功能,但简单业务中不常用)
开发拦截器