简介
在 SpringMVC 中, 控制器 Controller 负责处理由 DispatcherServlet 分发的请求, 它把用户请求的数据经过业务处理层处理之后封装成一个 Model , 然后再把该 Model 返回给对应的 View 进行展示.
示例
不适用注解修饰
返回 ModelAndView
controller 方法中定义 ModelAndView 对象并返回, 对象中可添加 model 数据, 指定 view.
- 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;
- }
- }
返回 void
在 controller 方法形参上可以定义 request 和 response, 使用 request 或 response 指定响应结果:
void service(HttpServletRequest request,HttpServletResponse response){}
1, 使用 request 转发向页面, 如下:
request.getRequestDispatcher("页面路径").forward(request, response);
2, 也可以通过 response 页面重定向:
response.sendRedirect("url")
3, 也可以通过 response 指定响应结果, 例如:
- response.setCharacterEncoding("utf-8");
- response.setContentType("application/json;charset=utf-8");
- response.getWriter().write("json 串");
返回字符串
逻辑视图名
return "item/item-list";
redirect 重定向
- return "redirect:testRedirect";
- redirect:
相当于 "response.sendRedirect()"
游览器 URL 发生改变
Request 域不能共享
forward 转发
- return "forward:testForward";
- forward:
相当于 "request.getRequestDispatcher().forward(request,response)"
浏览器 URL 不发送改变
Request 域可以共享
使用注解修饰
返回带 ResponseBody 注解的值
@ResponseBody 注解和 @RequestBody 注解介绍
@ResponseBody 的作用:
ResponseBody 注解可以通过内置 9 种 HttpMessageConverter, 匹配不同的 Controller 返回值类型, 然后进行不同的消息转换处理
将转换之后的数据放到 HttpServletResponse 对象的响应体返回到页面,
不同的 HttpMessageConverter 处理的数据, 指定的 ContentType 值也不同.
@RequestBody 注解的作用和 @ResponseBody 注解正好相反, 它是处理请求参数的 Http 消息转换的.
常用的 HttpMessageConverter
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 注解可以定义不同的处理器映射规则
URL 路径映射
@RequestMapping(value="/item") 或 @RequestMapping("/item")
value 的值是数组, 可以将多个 url 映射到同一个方法
@RequestMapping(value={"/item","/queryItem"})
窄化请求映射
在 class 上添加 @RequestMapping(url) 指定通用请求前缀, 限制此类下的所有方法的访问请求 url 必须以请求前缀开头, 通过此方法对 url 进行模块化分类管理.
example
商品模块
- /item/add
- /item/update
- /item/delete
用户模块
- /user/add
- /user/update
- /user/delete
请求方法限定
限定 GET 方法
@RequestMapping(method=RequestMethod.GET)
如果通过 Post 访问则报错:
HTTP Status 405 - Request method 'POST' not supported
例如:
@RequestMapping(value="/editItem",mtthod=RequestMethod.GET)
限定 POST 方法
@RequestMapping(method=RequestMethod.POST)
如何通过 Post 访问则报错:
HTTP Status 405 - Request method 'GET' not supported
GET 和 POST 都可以
@RequestMapping(mthod={RequestMethod.GET,RequestMethod.POST})
来源: https://www.cnblogs.com/chenyanbin/p/11961019.html