springmvcController详解
简介
在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把⽤户请求的数据经过业务处理层处理之后封装成⼀个Model ,然后再把该Model 返回给对应的View 进⾏展⽰。
⽰例
不适⽤注解修饰
返回ModelAndView
controller⽅法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。
ller;
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;
b.ssm.po.Item;
b.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转发向页⾯,如下:
2、也可以通过response页⾯重定向:
response.sendRedirect("url")
3、也可以通过response指定响应结果,例如:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
返回字符串
public String queryItem(HttpServletRequest request,Model model) {
//查询数据库,⽤静态数据模拟
List<Item> itemList = Service.queryItemList();
//⽅式⼀,使⽤Request的API
// request.setAttribute("itemList", itemList);
//⽅式⼆,使⽤Model接⼝的API
model.addAttribute("itemList", itemList);
return "item/item-list";
}
逻辑视图名
return "item/item-list";
redirect重定向
return "redirect:testRedirect";
redirect:
相当于“response.sendRedirect()”
游览器URL发⽣改变
Request域不能共享
forward转发
return "forward:testForward";
forward:
相当于“RequestDispatcher().forward(request,response)”
浏览器URL不发送改变
Request域可以共享
@RequestMapping("queryItem")
public String queryItem(HttpServletRequest request,Model model) {
//查询数据库,⽤静态数据模拟
List<Item> itemList = Service.queryItemList();
//⽅式⼀,使⽤Request的API
// request.setAttribute("itemList", itemList);
//⽅式⼆,使⽤Model接⼝的API
model.addAttribute("itemList", itemList);
// return "item/item-list";
//转发和重定向使⽤的代码
request.setAttribute("id", 1);
// return "redirect:testRedirect";
return "forward:testForward";
}
//请求重定向测试
@RequestMapping("testRedirect")
public String testRedirect(HttpServletRequest request){
String id = (String) Attribute("id");
System.out.println("request域的id:"+id);
return "";
}
//请求转发测试
@RequestMapping("testForward")
public String testForward(HttpServletRequest request){
Integer id = (Integer) Attribute("id");
System.out.println("request域的id:"+id);
return "";
}
使⽤注解修饰
返回带ResponseBody注解的值
@ResponseBody注解和@RequestBody注解介绍
@ResponseBody的作⽤:
ResponseBody注解可以通过内置9种HttpMessageConverter,匹配不同的Controller返回值类型,然后进⾏不同的消息转换处理 将转换之后的数据放到HttpServletResponse对象的响应体返回到页⾯,
不同的HttpMessageConverter处理的数据,指定的ContentType值也不同。
@RequestBody注解的作⽤和@ResponseBody注解正好相反,它是处理请求参数的Http消息转换的。
@RequestMapping("queryItemById")
public @ResponseBody Item queryItemById() {
Item item=Service.queryItemById(1);
return item;
}
// @RequestMapping("queryItemById")
// @ResponseBody
// public Item queryItemById2() {
// Item item=Service.queryItemById(1);
// return item;
/
/ }
//@RestController相当于@Controller和@ResponseBody的组合
//该类所有⽅法的返回值都将被@ResponseBody注解给修饰
@RestController
public class RestItemController {
@Autowired
private ItemService Service;
springmvc考试选择题@RequestMapping("queryItemByIdWithRest")
public Item queryItemById() {
Item item = Service.queryItemById(1);
return item;
}
}
常⽤的 HttpMessageConverter
MappingJacksonHttpMessageConverter处理POJO类型返回值
MappingJacksonHttpMessageConverter是专门处理POJO类型的。
默认使⽤MappingJackson的JSON处理能⼒,将后台返回的Java对象(POJO类型),转为JSON格式输出到页⾯。
将响应体的Content-Type设置为application/json;charset=utf-8
StringHttpMessageConverter处理String类型返回值
StringHttpMessageConverter是专门处理String类型的。
调⽤Writer()⽅法将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})
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论