ssm框架重定向_【框架】128:springMVC最后一天

df66c545fc1a25c7f566c669b18a439d.png

今天是刘小爱自学Java的第128天。

感谢你的观看,谢谢你。

106d05fe43e9df3c17776e4f7ebdd5fe.png

学习内容安排如下:

  • Jstl标签的使用,既然又提到了,还是学一学好了,反正也不要太多时间。
  • 写了一个文件上传的案例。
  • 最后关于转发和重定向在springMVC中的使用,以及这两者之间的区别。
  • 拦截器的使用。

自此SSM框架也就告一段落了。

一、Jstl标签的使用

这个Jstl是当初学jsp时的知识点,因为动不动就有人说Jsp技术被淘汰了,所以就没学。

但既然在框架中再次用到了Jstl,那还是学下吧,知道怎么用它肯定是没坏处的。

1Controller方法

a3cc3c6c19a60ac1bbd25368f4a671f5.png

对应的访问路径为show15。

其中利用for循环创建了10个User对象,再放入集合中作为返回值。

本来这里正确的流程是要去数据库查询数据的,不过比较麻烦,我们只是学Jstl标签这个知识点,用for循环做做假数据就好了。

2user.jsp中标签的使用

8d73d28aa5f1e88889f791c0f0558331.png

①引入核心标签库

②c:foreach标签

该标签和Java中的增强for循环非常类似,就好比:for(User user : userList){};

items中利${userList}取的值就是我们前面创建的那个User对象集合。

${user.id}就是去除user对象中的id属性,其它的属性取值都是类似。

③代码测试

输入访问路径,可以发现数据完成了渲染。

JSON数据格式

Json是最为常见的一种数据格式,所以springMVC提供了一种更为简便的方式传递数据。

112e3421319e881f86b29c0c0a887383.png

当@ResponseBody放在处理请求的方法上时,表示方法返回值会自动转换成JSON。

此外还有两个注解,一起做一个小结:

  • @ResponseBody是把Controller方法返回值转化为JSON,称为序列化。
  • @RequestBody是把接收到的JSON数据转化为实体类对象,称为反序列化。
  • @RestController将当前处理器中所有方法的返回值都转换成json数据。

三、文件上传

SpringMVC的文件上传,底层也是使用的Apache的Commons-fileupload。

我们写一个文件上传的例子:

3d773ecbef6c55aecdefa362e70c7015.png

①引入依赖

在pom文件中引入依赖,很多时候这个步骤我都没有说明,但依赖一般来说都是首要步骤。

②定义文件上传解析器

  • defaultEncoding:设定编码表为utf-8。
  • maxUploadSize:设定文件上传的最大值,例子中也就是5M。

③Controller中的方法

请求中上传的文件可以作为一个参数被获取,参数类型为MultipartFile,通过注解@RequestParam即可完成。

  • 通过transferTo()方法可以将上传的文件存到对应的文件路径中。
  • 通过getOriginalFilename()方法可以获取上传的文件名称。

例子中是放在D盘,用系统时间戳+文件名称的格式给上传的文件命名。

其中@ResponseStatus可以自行设定响应状态,这里为了测试直接设成响应成功。

代码写完,做一个测试

52d3cc9b8caf14fed433627a07272021.png

这里使用的一个插件,完成上传文件的请求,关于这个插件,后续会做一个插件合集说明。

①请求路径

也就相当于以前在浏览器地址栏上输入路径,与@RequestMapping中的参数保持一致。

②上传文件

在Files选项栏中可以选择文件上传,其中名称要与@RequestParam中的参数名称一致。

③代码测试

点击发送请求,处理器将上传的文件获取,再利用transferTo方法保存到对应的路径中。

例子中就是D盘,所以D盘中出现了一个以系统时间戳+文件名称命名的新文件。

三、转发及重定向

返回值为字符串时,默认为视图名称,比如“hello”即对应hello.jsp这个文件。

当返回值字符串是以”forward:”或者”redirect:”开头,则表示是转发或者重定向。

3347afd6621fbf6c7f5c524c02fafa17.png

①转发

forward:show21.do?type=forword

使用“forward:”开头说明是转发,后面跟转发跳转的请求路径。

②重定向

redirect:show21.do?type=redirect

使用“redirect:”开头说明是重定向,后面跟重定向的路径。

测试,同时回顾下转发与重定向的区别

54dc1653e6d321b4a38596a23dbf66e7.png

①转发:forword

show19.do即为转发,跳转到show21.do对应页面,同时浏览器路径没有变化。

②重定向:redirect

show20.do即为重定向,也跳转到show21.do对应页面,但是注意浏览器路径变化了。

转发和重定向的区别在于:

  • 转发是服务器内部完成跳转,是同一个请求,正因为如此,所以数据能共享。
  • 重定向是浏览器完成跳转,是产生了一个新的请求了,数据不能共享了

四、拦截器

前天我们学习过springMVC的流程:

当请求到达控制器时,控制器根据请求路径到映射器中查询具体用什么处理器。

映射器会将查询结果返回给控制器,返回结果就包含了一个拦截器集合。

1自定义一个拦截器

ca4c560515def82fb6d3811cfb7d9ddb.png

实现HandlerInterceptor接口,Interceptor,本身也就是拦截器的意思。

①preHandle方法

preHandle调用Handler之前执行,称为前置方法,关于其返回值:

  • true表示放行,后续业务逻辑继续执行。
  • false表示被拦截,后续业务逻辑不再执行,但之前返回true的拦截器的完成方法会倒叙执行。

②postHandle方法

postHandle调用Handler之后执行,称为后置方法。

③afterCompletion方法

afterCompletion在视图渲染完成之后执行,也称之为完成方法。

2拦截器配置

0a9f3e5a7c2ec522307bf51dceb928d4.png

interceptors标签里面放interceptor标签,说明拦截器是可以配置多个的。

例子中只配置了一个。

mapping path:表示拦截的请求,两个*号代表0个或者多个路径,这个昨天也详讲过。

再将拦截器类配置成一个springBean。

3测试

我们设置的是所有路径都拦截,那么随便找一个我们以前写的例子就好了。

26412107a8549807323f219af3721f97.png

浏览器中输入的是show1,在其对应的处理器中我们输入一条语句作为测试。

根据结果我们能发现,如果请求被拦截了:

  • 先执行拦截器前置方法。
  • 然后才执行该路径本身对应的处理器。
  • 再执行拦截器后置方法。
  • 最后执行拦截器完成方法。

其中如果有多个拦截器,时间有限,就不测试了,直接说结论:

  • 拦截器的前置方法依次执行。
  • 后置方法和完成方法倒序执行。
  • 当前置方法返回false时,请求被拦截,后续的拦截器以及处理器方法不再执行,但它前面请求没被拦截的拦截器的完成方法会倒续执行。
  • 完成方法在视图渲染之后才去执行。

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值