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的参数

 

posted @ 2017-08-23 21:40  super_xueyi  阅读(472)  评论(0编辑  收藏  举报