springMVC学习
一、什么是springMVC
Spring MVC(模型-视图-控制器)是基于Servlet API构建的Web原始框架。采用MVC设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。主要通过分离模型、视图、控制器在应用程序中的角色,将业务逻辑从界面中解耦。
模型(Model):表示应用程序的数据和业务逻辑,负责对数据库进行操作;
视图(View):负责进行展示数据
控制器(Controller):接收用户的请求,并调用模型来处理业务逻辑
二、springMVC的工作流程
1.用户通过向浏览器发起HttpRequest请求到前端控制器DispatcherServlet
2.DispatcherServlet将收到的请求发送给处理器映射器HandlerMapping。
3.处理器映射器 (HandlerMapping)会根据请求,找到负责处理该请求的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4.DispatcherServlet调用处理器适配器HandlerAdapter。
5.HandlerAdapter根据经过适配调用具体的Handler处理器(Controller,后端控制器),Controller执行完成返回ModelAndView。
6.Controller 将处理结果及要跳转的视图封装到一个对象 ModelAndView 中并将其返回给处理器适配器 (HandlerAdaptor)。
7.HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
8.DispatcherServlet将ModelAndView传给视图解析器ViewReslover。(DisptcherServlet 调用 ViewResolver,将 ModelAndView 中的视图名称封装为视图对象)
9.ViewReslover解析后返回具体View视图。
10.DispatcherServlet根据View进行渲染视图。
11.DispatcherServlet响应用户。
三、SpringMVC的数据响应方式
//springMVC的数据响应方式
//1.页面跳转(返回字符串(字符串与视图解析器)、通过modelandview对象返回)
@Controller
@RequestMapping("/test")
public class TestController {
// @RequestMapping("/hello")
// public String hello(){
// System.out.println("hello word!--YY");
// return "hello.jsp";
// }
//1).返回字符串
@RequestMapping("/ToHello")
public String helloa(){
System.out.println("hello word!--toto");
return "hello1";
}
@RequestMapping("/hello2")
public String hello2(){
// 转发
return "forward://WEB-INF/jsp/hello1.jsp";
// 重定向
// return "redirect:/index.jsp";
}
@RequestMapping("/hello3")
public ModelAndView hello3(){
// 2).返回一个ModelAndView对象
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("username","bbc");
modelAndView.setViewName("hello1");
return modelAndView;
}
//2.回写数据(直接返回字符串、返回json对象或集合)
// 两种方式
// 1).直接返回字符串
@RequestMapping("/data")
public void data(HttpServletResponse response) throws IOException {
response.setContentType("txt/html;charset=utf-8");
response.getWriter().print("重庆工程学院");
}
// 上面方法的简写
@RequestMapping("/data1")
@ResponseBody
public String data1() {
return "重庆工程学院";
}
// 2).返回json对象
@RequestMapping("/data2")
@ResponseBody
public Phone data2(){
Phone phone=new Phone();
phone.setPhoneId(22L);
phone.setModelNumber("mate60");
return phone;
}
}
四、SpringMVC获取不同类型的请求参数
// 请求参数
// 1.获取基本数据类型
@RequestMapping("/parm1")
@ResponseBody
// 使用注解@RequestParam取了一个别名,在前端传参时可直接用别名,value对应别名,required对应是否必填,defaultValue对应默认值(即不传参时对应的值)
public void psrm1(int phoneId,@RequestParam(value = "mNum",required = false,defaultValue ="mate60") String modelNumber){
System.out.println(phoneId);
System.out.println(modelNumber);
}
// 2.获取pojo数据
@RequestMapping("/parm4")
@ResponseBody
public void parm4(Phone phone){
System.out.println(phone.getPhoneId());
System.out.println(phone.getModelNumber());
} @RequestMapping("/parm44")
@ResponseBody
public String parm44(String i){
return i;
}
// 3.获取数组类型数据
@RequestMapping("/parm2")
@ResponseBody
public void parm2(String[] nets) {
System.out.println(Arrays.asList(nets));
}
// 4.获取集合类型数据 vo
@RequestMapping(value = "/parm3",method = RequestMethod.POST)
@ResponseBody
public void parm3(PhoneStoreDTO phoneStoreDTO){
System.out.println(phoneStoreDTO.toString());
}
T)
@ResponseBody
public void parm3(PhoneStoreDTO phoneStoreDTO){
System.out.println(phoneStoreDTO.toString());
}