zoukankan      html  css  js  c++  java
  • spring 容器加载

    Spring MVC 会把ModeAndView 的 model 中数据放入到request域对象中。

    在jsp页面,请求页面获得的值  

    ${requestScope.names}

    目标方法可以添加map类型的数据。

    @SessionAttributes()

    请求域 requestScope

    会话域 sessionScope

    @SessionAttributes除了可以通过属性名指定需要放到会话中的属性外(实际上使用的是value属性值),还可以通过模型属性的对象类型指定那些模型属性需要放到会话中(实际上使用的是types属性值)。

    注意:该注解只能放在类的上面,而不能修饰方法。

    有@ModelAttribute 标记的方法,会在每个目标方法执行之前被Spring MVC 调用。

    (链接例子:关于回显功能的部分显示值,对于未赋值的新建对象属性,其值不是为空的,而是有正确值的,比如回显用户的一些信息,但是密码是不能回显示出来的。)

    执行流程:

    1. 执行@ModelAttribute 注解修饰的方法: 从数据库中取出对象,把对象放入到了Map中,键为:user

    2.SpringMVC 从Map中取出User对象,并把表单的请求参数赋给该User对象的对应属性。

    3.SpringMVC 把上述对象传入目标方法的参数。

    注意:在@ModelAttribute 修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致。

    源码分析流程:

    1. 调用@ModelAttribute 注解修饰的方法。实际上把@ModelAttribute 方法中Map中的数据放在了implicitModel 中。

    2. 解析请求处理器的目标参数,实际上该目标参数来自于WebDataBinder 对象的target 属性

    1).创建WebDataBinder 对象:

    --> 确定objectName 属性: 若传入的attrName 属性值为“”,则objectName 为类名第一个字母小写。

    注意: attrName .若目标方法的POJO属性使用了@ModelAttribute 来修饰,则attrName值即为@ModelAttribute的value属性值

    --> 确定target属性:

       >  在implicitModel中查找attrName 对应的属性值,若存在,ok

       >   ***若不存在:则验证当前Handler是否使用了@SessionAttribute 进行修饰,若使用了,则尝试从session 中获取attrName所对应的属性值,若session中没有对应的属性值,则抛出了异常。

       >   若Handler 没有使用@SessionAttributes 进行修饰,或@SessionAttributes中没有使用value值指定的key 和attrName 相匹配,则通过反射创建了POJO对象。

    2) . SpringMVC 把表单的请求参数赋给了WebDataBinder 的target 对应的属性值。

    3) .  ** SpringMVC 会把WebDataBinder 的attrName 和 target给到implicitModel 。进而传到request域对象中。

    4 ).  把WebDataBinder 的target 作为参数传递给目标方法的入参。

    2.@ModelAttribute 注解也可以来修饰目标POJO类型入参,其value属性值有如下作用:

    1) .SpringMVC 会使用value属性值在implicitModel中查找对应的对象,若存在则会直接传入到目标方法的入参中。

    2) . SpringMVC 会一value为key,POJO类型的对象为value,存入到request中。

    key值默认为类名的首字母小写。也可以用@ModelAttribute 类指定key值。

    视图     视图解析器

    --> 程序员可以选用一种视图解析器或混用多种视图解析器。

    --> 每个视图解析器都实现了Ordered接口并开放出一个order属性,可以通过order属性指定解析器的优先顺序,order越小优先级越高。

    -->  SpringMVC会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出ServletException异常。

    InternalResourceView

    把JSTL标签放到当前类路径下,这时解析的view就会变成JstlView。

    配置直接转发的页面 ,可以直接响应转发页面,而无需使用Handler方法。

    在实际开发中通常都需要配置mvc: annotation-driven 

    配置视图 BeanNameViewResolver 解析器:使用视图的名字来解析视图。

    通过order属性来定义视图解析器的优先级,order值越小,优先级越高。

    --> 一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理。

    --> 如果返回的字符串中带有forward: 或 redirect: 前缀时,SpringMVC会对他们进行特殊处理:将forward: 和redirect:当成指示符,其后的字符串作为URL来处理

    重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。

    ​转   发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。​

    -- redirect:success.jsp :会完成一个到success.jsp的重定向的操作。

    -- forward:success.jsp  :会完成一个到success.jsp的转发操作

  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/kelan/p/5284607.html
Copyright © 2011-2022 走看看