zoukankan      html  css  js  c++  java
  • Spring MVC处理模型数据、越过控制层、POJO类型入参、@SessionAttributes、@RequestParam、@PathVariable、REST风格转化

    ①---处理模型数据

    Spring MVC 提供了以下几种途径输出模型数据:
    –ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
    –Map 及 Model、ModelMap: 入参为 org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 时,处理
    方法返回时,Map 中的数据会自动添加到模型中。
    无论我们的返回值是String类型还是ModelAndView类型,SpringMVC框架执行目标Handler方法之后都会将返回值解析为ModelAndView;
    我们放入到Map或者Model、ModelMap中的数据都会放入ModelAndView对象中,作为MOdel使用!

    ②---越过控制层

    可以在spingmvc配置文件中配置 <mvc:view-controller path="/j1sp" view-name="success"/>标签,就可以让我们的请求不经过Controller,直接进入另一个目标页面!
    <!-- 但是此时原来访问正常的@RequestMapping URL现在却不能正常访问了,如果想正常访问,需要加入<mvc:annotation-driven>该标签-->
    <mvc:annotation-driven></mvc:annotation-driven>

    ③---

    SpringMVC确定目标方法POJO类型入参的过程:
    1.确定一个key:
    1).若目标方法的POJO类型的参数木有使用@ModelAttribute作为修饰,则key为POJO类名第一个字母的小写。
    2).若使用@ModelAttribute修饰,则key为@ModelAttribute注解的value属性值.

    2.在implicitModel中查找key对应的对象,若存在,则作为入参传入。
    1).若在@ModelAttribute标记的方法中在Map保存过,且key和1确定的key一致,则会获取到!
    3.在implicitModel中不存在key对应的对象,则检查当前的Handler是否使用@SessionAttribute注解修饰,若使用了该主机,且@SessionAttributes注解的value属性值中包含了key,则会从HttpSession中来获取key所对应的value值,若存在则直接传入到目标方法的入参中,若不存在则将抛出异常。
    4.若Handler没有标识@SessionAttributes注解或者@SessionAttributes注解的value值中不包含key,则会通过反射来创建POJO类型的参数,传入为目标方法的参数。

    5.SpringMVC会把key和POJO对象保存到implicitModel中,进而会保存到request域中!

    注意:1.@ModelAttribute标记的方法,会在每个目标方法执行之前被SpringMVC调用!
    2.@ModelAttribute注解可以来修饰目标方法POJO类型的入参,其value属性值有如下作用:
    1).SpringMVC会使用value属性值在implicitModel中查找对应的对象,若存在则会直接传入到目标方法的入参中
    2)SpringMVC会以value为key,POJO类型的对象为value,存入到request域中。

    先将request域中匹配的key值赋给@ModelAttribute(value="stu") Student student的student。然后根据请求表单中有的参数进行修改

    ④---

    @SessionAttributes、@RequestParam、@PathVariable

    @RequestParam可以接收请求的参数,相当于Servlet的getParameter()方法!

    @SessionAttributes注解只能标记在类上,可以使得多次请求共享某部一部分数据!
    value:指定放入session域中键
    types:指定放入Session域中的对象的字节码!

    REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。

    它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用.

    HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。

    它们分别对应四种基本操作:
    GET 用来获 取资源,
    POST 用来新建资源,
    PUT 用来更新资源,
    DELETE 用来删除资源。

    示例:
    –/order/1 HTTP GET :得到 id = 1 的 order
    –/order/1 HTTP DELETE:删除 id = 1的 order
    –/order/1 HTTP PUT:更新id = 1的 order

    –/order HTTP POST:新增 order

    ?HiddenHttpMethodFilter:浏览器 form 表单只支持 GET 与 POST 请求,而DELETE、PUT 等 method 并不支 持,Spring3.0 添加了一个过滤器,可以将这些请求转换 为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求。

    POST请求如何转化为put请求和delele请求?
    1.在web.xml文件中配置:

    <!-- HiddenHttpMethodFilter过滤器可以将POST请求转化为put请求和delete请求! -->
    <filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    2.在表单域中需要携带一个name值为_method,value值为put或者delete的参数

  • 相关阅读:
    nodejs安装autoprefixer
    nodejs安装Yui Compressor
    js捕捉回车事件
    支付宝服务窗前台页面规范
    html5 input type number 去掉加减号
    [USACO10HOL]赶小猪题解
    [USACO09FEB]改造路题解
    [HNOI2013]游走题解
    洛谷P1649 [USACO07OCT]障碍路线Obstacle Course BFS 最小转弯
    洛谷P1467 循环数 Runaround Numbers
  • 原文地址:https://www.cnblogs.com/java-ssl-xy/p/7420362.html
Copyright © 2011-2022 走看看