springmvc中的响应处理

springMvc中的响应处理

使用默认内置视图解析器(ViewResolver)
在这里插入图片描述
使用视图控制器
在这里插入图片描述
使用Model,Map,ModelMap以及原生servlet传输数据到页面
在这里插入图片描述
在这里插入图片描述
当使用此方式进行设置之后,会发现所有的参数值都设置到了request作用域
中,那么这三个对象是什么关系呢?
在这里插入图片描述
使用ModelAndView对象传输数据到页面
在这里插入图片描述
注意:发现当使用modelAndView对象的时候,返回值的类型也是此对象,
可以将要跳转的页面设置成view的名称,来完成跳转的功能,同时数据也是放到request作用域中。
使用session传输数据到页面
怎么往session设置属性?
1.通过servlet api的方式去读写session

  1. 通过参数绑定的方式去获取servlet api
    2.通过自动注入的方式去获取servlet api(推荐使用这种方式)
    在这里插入图片描述
    通过springmvc提供的注解方式去读写session
  2. @SessionAttributes
    用在类上面的,写入session的。
    在这里插入图片描述
    @SessionAttribute
    用在参数上面的,负责读取session
    默认指定的属性是必须要存在的,如果不存在则会报错,可以设
    置required =false 不需要必须存在,不存在默认绑定null
    在这里插入图片描述
    使用@ModelAttribute来获取请求中的数据
    在这里插入图片描述
    update方法的使用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

总结:通过刚刚的给参数赋值,大家应该能够发现,当给方法中的参数设置值的时候,如果添加了@ModelAttribute注解,那么在查找值的时候,是遵循以下方式:
1、方法的参数使用参数的类型首字母小写,或者使用@ModelAttribute(“”)的值。
2、先看之前是否在model中设置过该属性值,如果设置过就直接获取
3、看@SessionAttributes注解标注类中的方法是否给session中赋值,如果有的话,也是直接获取,没有报异常
注意:
3种方式的获取servlet­­api的线程安全问题:

  1. 通过参数绑定的方式
    是线程安全的,因为参数绑定变量时方法级别,所以每次请求方法都会创建一个新的私有变量。
    2.通过自动注入的方式@AutoWired是线程安全的,spring底层通过自动注入 将 servlet api 封装到ThreadLocal(是绑定在线程上面的)里面.
    3.通过@ModelAttribute的方式
    不是线程安全的,控制器是单例的,并且变量声明在类的级别中(共享变量)。

在这里插入图片描述
使用forward实现页面转发
在发送请求的时候,可以通过forward:来实现转发的功能:
在这里插入图片描述
使用redirect来实现重定向
在这里插入图片描述
请求转发的特点:
1、地址栏的请求不会发生变化,显示的还是第一次请求的地址
2、请求的次数,有且仅有一次请求
3、请求域中的数据不会丢失
4、根目录:localhost:8080/项目地址/,包含了项目的访问地址
请求重定向的特点:
1、地址栏的地址发生变化,显示最新发送请求的地址
2、请求次数:2次
3、请求域中的数据会丢失,因为是不同的请求
4、根目录:localhost:8080/ 不包含项目的名称
请求转发和请求重定向的对比
在这里插入图片描述
springmvc 控制器是不是单例的?如果是单例的会出现什么问题?怎么解决?
是单例模式,所以在多线程访问的时候有线程安全问题。将参数放在方法上就不会出现线程安全问题,或者使用@Autowired注解来解决线程安全问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值