一、Jstl标签的使用
这个Jstl是当初学jsp时的知识点,因为动不动就有人说Jsp技术被淘汰了,所以就没学。
但既然在框架中再次用到了Jstl,那还是学下吧,知道怎么用它肯定是没坏处的。
1Controller方法
对应的访问路径为show15。
其中利用for循环创建了10个User对象,再放入集合中作为返回值。
本来这里正确的流程是要去数据库查询数据的,不过比较麻烦,我们只是学Jstl标签这个知识点,用for循环做做假数据就好了。
2user.jsp中标签的使用
①引入核心标签库
②c:foreach标签
该标签和Java中的增强for循环非常类似,就好比:for(User user : userList){};
items中利${userList}取的值就是我们前面创建的那个User对象集合。
${user.id}就是去除user对象中的id属性,其它的属性取值都是类似。
③代码测试
输入访问路径,可以发现数据完成了渲染。
JSON数据格式
Json是最为常见的一种数据格式,所以springMVC提供了一种更为简便的方式传递数据。
当@ResponseBody放在处理请求的方法上时,表示方法返回值会自动转换成JSON。
此外还有两个注解,一起做一个小结:
SpringMVC的文件上传,底层也是使用的Apache的Commons-fileupload。
我们写一个文件上传的例子:
①引入依赖
在pom文件中引入依赖,很多时候这个步骤我都没有说明,但依赖一般来说都是首要步骤。
②定义文件上传解析器
③Controller中的方法
请求中上传的文件可以作为一个参数被获取,参数类型为MultipartFile,通过注解@RequestParam即可完成。
例子中是放在D盘,用系统时间戳+文件名称的格式给上传的文件命名。
其中@ResponseStatus可以自行设定响应状态,这里为了测试直接设成响应成功。
代码写完,做一个测试:
这里使用的一个插件,完成上传文件的请求。
关于这个插件,后续会做一个插件合集说明。
①请求路径
也就相当于以前在浏览器地址栏上输入路径,与@RequestMapping中的参数保持一致。
②上传文件
在Files选项栏中可以选择文件上传,其中名称要与@RequestParam中的参数名称一致。
③代码测试
点击发送请求,处理器将上传的文件获取,再利用transferTo方法保存到对应的路径中。
例子中就是D盘,所以D盘中出现了一个以系统时间戳+文件名称命名的新文件。
返回值为字符串时,默认为视图名称,比如“hello”即对应hello.jsp这个文件。
当返回值字符串是以”forward:”或者”redirect:”开头,则表示是转发或者重定向。
①转发
forward:show21.do?type=forword
使用“forward:”开头说明是转发,后面跟转发跳转的请求路径。
②重定向
redirect:show21.do?type=redirect
使用“redirect:”开头说明是重定向,后面跟重定向的路径。
测试,同时回顾下转发与重定向的区别
①转发:forword
show19.do即为转发,跳转到show21.do对应页面,同时浏览器路径没有变化。
②重定向:redirect
show20.do即为重定向,也跳转到show21.do对应页面,但是注意浏览器路径变化了。
转发和重定向的区别在于:
前天我们学习过springMVC的流程:
当请求到达控制器时,控制器根据请求路径到映射器中查询具体用什么处理器。
映射器会将查询结果返回给控制器,返回结果就包含了一个拦截器集合。
1自定义一个拦截器
实现HandlerInterceptor接口,Interceptor,本身也就是拦截器的意思。
①preHandle方法
preHandle调用Handler之前执行,称为前置方法,关于其返回值:
②postHandle方法
postHandle调用Handler之后执行,称为后置方法。
③afterCompletion方法
afterCompletion在视图渲染完成之后执行,也称之为完成方法。
2拦截器配置
interceptors标签里面放interceptor标签,说明拦截器是可以配置多个的。
例子中只配置了一个。
mapping path:表示拦截的请求,两个*号代表0个或者多个路径,这个昨天也详讲过。
再将拦截器类配置成一个springBean。
3测试
我们设置的是所有路径都拦截,那么随便找一个我们以前写的例子就好了。
浏览器中输入的是show1,在其对应的处理器中我们输入一条语句作为测试。
根据结果我们能发现,如果请求被拦截了:
其中如果有多个拦截器,时间有限,就不测试了,直接说结论: