在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据通过业务处理层处理以后封装成一个Model ,而后再把该Model 返回给对应的View 进行展现。java
controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。web
package com.cyb.ssm.controller; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.cyb.ssm.po.Item; import com.cyb.ssm.service.ItemService; @Controller public class ItemController { @Autowired private ItemService Service; @RequestMapping("queryItem") public ModelAndView queryItem() { List<Item> itemList = Service.queryItemList(); ModelAndView mvAndView = new ModelAndView(); mvAndView.addObject("itemList", itemList); mvAndView.setViewName("item/item-list"); return mvAndView; } }
在controller方法形参上能够定义request和response,使用request或response指定响应结果:spring
void service(HttpServletRequest request,HttpServletResponse response){}
一、使用request转发向页面,以下:json
request.getRequestDispatcher("页面路径").forward(request, response);
二、也能够经过response页面重定向:数组
response.sendRedirect("url")
三、也能够经过response指定响应结果,例如:浏览器
response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("json串");
return "item/item-list";
return "redirect:testRedirect";
redirect:app
至关于“response.sendRedirect()”模块化
游览器URL发生改变url
Request域不能共享spa
return "forward:testForward";
forward:
至关于“request.getRequestDispatcher().forward(request,response)”
浏览器URL不发送改变
Request域能够共享
@ResponseBody的做用:
ResponseBody注解能够经过内置9种HttpMessageConverter,匹配不一样的Controller返回值类型,而后进行不一样的消息转换处理
将转换以后的数据放到HttpServletResponse对象的响应体返回到页面,
不一样的HttpMessageConverter处理的数据,指定的ContentType值也不一样。
@RequestBody注解的做用和@ResponseBody注解正好相反,它是处理请求参数的Http消息转换的。
MappingJacksonHttpMessageConverter处理POJO类型返回值
MappingJacksonHttpMessageConverter是专门处理POJO类型的。
默认使用MappingJackson的JSON处理能力,将后台返回的Java对象(POJO类型),转为JSON格式输出到页面。
将响应体的Content-Type设置为application/json;charset=utf-8
StringHttpMessageConverter处理String类型返回值
StringHttpMessageConverter是专门处理String类型的。
调用response.getWriter()方法将String类型的字符串写回给调用者。
将响应体的Content-Type设置为text/plain;charset=utf-8
经过RequestMapping注解能够定义不一样的处理器映射规则
@RequestMapping(value="/item")或@RequestMapping("/item")
value的值是数组,能够将多个url映射到同一个方法
@RequestMapping(value={"/item","/queryItem"})
在class上添加@RequestMapping(url)指定通用请求前缀,限制此类下的全部方法的访问请求url必须以请求前缀开头,经过此方法对url进行模块化分类管理。
商品模块
/item/add
/item/update
/item/delete
用户模块
/user/add
/user/update
/user/delete
@RequestMapping(method=RequestMethod.GET)
若是经过Post访问则报错:
HTTP Status 405 - Request method 'POST' not supported
例如:
@RequestMapping(value="/editItem",mtthod=RequestMethod.GET)
@RequestMapping(method=RequestMethod.POST)
如何经过Post访问则报错:
HTTP Status 405 - Request method 'GET' not supported
@RequestMapping(mthod={RequestMethod.GET,RequestMethod.POST})