目录
一、概述
SpringMVC框架的核心作用:接收浏览器发来的请求 + 给浏览器做出反应
二、MVC设计模式
优点:实现分层的思想,达到松耦合的目的。提高代码的复用性,扩展性,容错性。
M:Model模型,用来封装数据
V:View视图,用来展示数据
C:Controller控制器,用来接收请求和处理响应
三、工作原理
1、用户发送请求至前端控制器DispatcherServlet。
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter处理器适配器。
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView。
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户
-1,、前端控制器:DispatcherServlet,用来接收请求分发请求
-2、处理器映射器:HandlerMapping,用来根据url找具体的类里的具体方法
-3、处理器适配器:HandlerAdaptor,用来执行方法里的代码
-4、视图解析器:ViewResolver,定位页面的路径
-5、视图:View,有从来展示数据
四、入门案例
-1,创建Module
访问链接: http://localhost:8080/car/get
-2,创建启动类(RunApp类)
package cn.tedu.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//这是一个启动类
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class);//运行指定文件
}
}
-3,创建资源(Controller类)
package cn.tedu.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //接受请求 @Controller + @ResponseBody
@RequestMapping("car")//规定了浏览器访问这个类的方式 pojo中的car类(封装了car数据)
public class CarController {
@RequestMapping("get")//规定了浏览器访问这个方法的方式
public void get(){
System.out.println(1000);
}
}
五、SpringMVC解析get请求的参数
–1,浏览器提交请求数据的方式
1,get:参数拼接 http://localhost:8080/car/insert?id=1&name=张三&age=18
2,post:安全,参数不显示在地址栏上
六、解析restful风格的请求参数
-1,项目结构
controller,pojo,RunApp
-2,修改网页
<body>
<a href="http://localhost:8080/car/add/10/BMW/9.9">提交restful数据</a>
</body>
-3,修改pojo类(@Data)
-4,修改Controller
package cn.tedu.controller;
import cn.tedu.pojo.Car;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("car")
@CrossOrigin //解决跨域问题
public class CarController {
//优化get提交数据的方式restful:http://localhost:8080/car/add2/10/BMW/9.9 (前端发来的)
@RequestMapping("add2/{id}/{y}/{x}")//{id}是占位符,表示这个参数的位置 (用占位符接收)
public void add2(@PathVariable Integer id, //@PathVariabl用来获取{}中间的值
@PathVariable String y,
@PathVariable Double x){
System.out.println(id+y+x);
}
}
-5,改成ajax
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="old/jquery-1.8.3.min.js"></script>
<script>
function a(){
$.ajax({
type: "get" ,//要使用的请求方式
url:"http://localhost:8080/car/get" , //要使用的请求路径
data: {//要拼接的数据---必须是JSON串
"id":"10",
"name":"BMW",
"price":"9.9"
},
success: function(data){ //成功时的方案
console.log(data);
console.log(data.id);
alert(100);
}
})
}
</script>
</head>
<body>
<a onclick="a();" href="#">点我获取汽车数据</a>
</body>
</html>