一.SpringMVC
1.概述
框架:是一个结构,框架提供了很多的类,由框架控制每个类调用的过程流程
SSM框架里,第一个S就是指SpringMVC,是一个框架
是Spring框架的一个后续产品,遵循了MVC的设计模式,保证了程序间的松耦合
SpringMVC主要作用:1,接受请求(解析请求参数)2,做出响应
MVC的设计模式:
M是Model模型,用来封装数据
V是View视图,用来展示数据
C是Controller控制器,用来控制浏览器如何请求,做出数据响应
好处:提高代码的复用性,松耦合
2.原理
1.前端控制器DispatcherServlet:
当浏览器发送请求成功后,充当这调度者的角色,负责调度每个组件.
2.处理映射器HandlerMapping:
根据请求URL路径,找到能处理请求的类名和方法名
url:http://localhost:8080/hi,找到Hello类里的hi()
3.处理器适配器HandlerAdapyer:
正式开始处理业务,并把返回结果的结果交给DispatcherServlet
4.视图解析器ViewResolver:
找到正确的,能展示数据的视图,准备展示数据
5.视图渲染View:
展示数据
3.创建Module
选中Project-右键-New-Module-选择Maven-next-输入Module的名字-next-finish
4.入门案例
1.导入jar包(被Spring Boot整合好了)
2.准备一个启动类RunApp.用来启动服务器
package cn.tedu.mvc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//标记着这是springboot的启动类
@SpringBootApplication
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class);//运行当前类
}
}
3.准备一个类,补充方法
访问链接:http://localhost:8080/car/get
得到数据:123
package cn.tedu.mvc;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//完成springmvc的角色,接受请求和给出响应
//是MVC设计模式里的C控制器,接受请求和给出响应
@RestController
//标记着这个类是Controller是一个控制器+接受请求
@RequestMapping("car")//规定了url怎么访问这个类
public class HelloController {
//测试: http://localhost:8080/car/get
@RequestMapping("get")//规定了url怎么访问这个方法
public String show(){
return "123";
}
}
4.测试
启动服务器,打开浏览器,访问正确的URL地址
二.SpringMVC的响应
1.概述
SpringMVC可以接受请求,和做出响应数据,类型可以非常丰富
2.测试
package cn.tedu.mvc;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//完成springmvc的角色,接受请求和给出响应
//是MVC设计模式里的C控制器,接受请求和给出响应
@RestController
//标记着这个类是Controller是一个控制器+接受请求+响应JSON串
@RequestMapping("car")//规定了url怎么访问这个类
public class HelloController {
//测试: http://localhost:8080/car/get
@RequestMapping("get")//规定了url怎么访问这个方法
public String show(){
return "123";
}
//测试: http://localhost:8080/car/abc
@RequestMapping("abc")
public int show2(){
return 100;
}
// SpringMVC框架除了能返回字符串,整数以外,还能返回对象信息
//测试: http://localhost:8080/car/get2
@RequestMapping("get2")
public Car get(){
Car c = new Car();
//给客户端准备数据
c.setId(718);
c.setName("保时捷");
c.setType("Cayman T");
c.setColor("红色");
c.setPrice(641000);
return c; //把对象信息 变成JSON字符串在浏览器展示
}
}
三.SpringMVC解析get请求的参数
1.概述
请求方式8种,常见的就是get post
restful风格的数据,用来简化了get的写法
http://localhost:8080/car/insert?id=1name=张三&age=18
http://localhost:8080/car/insert/1/张三/18
2.测试
package cn.tedu.mvc;
import org.junit.Test;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//Springmvc解析get的请求参数
// http://localhost:8080/car/insert?id=1&name=张三&age=18
@RestController//接受请求做出响应
@RequestMapping("get")//规定了浏览器的访问方式
public class GetController{
//测试 http://localhost:8080/get/param4?id=100&name=BMW&type=X6&color=red&price=9.9
@RequestMapping("param4")
//public String param4(int id,String name,String type,String color,double price){
public Car param4(Car c){//直接用对象接受参数,框架会自动封装属性的值
return c;
}
//测试 http://localhost:8080/get/param3?id=100&name=张三&price=9.9
@RequestMapping("param3")
public String param3(int id,String name,double price){
return id+name+price;
}
//测试 http://localhost:8080/get/param2?id=100&name=张三
@RequestMapping("param2")
public void param2(int id,String name){
System.out.println(id);
System.out.println(name);
}
//测试 http://localhost:8080/get/param?id=100
@RequestMapping("param")
public String param(int id){
return "您的请求参数里id="+id ;
}
@Test //单元测试方法
public void get1(){
String url ="http://localhost:8080/car/insert?id=1&name=张三&age=18";
String[] a = url.split("\\?")[1].split("&");
for(String s : a){
String data = s.split("=")[1];
System.out.println(data);
}
}
}
3,常见问题
404: Not Found,没找到你想访问的资源
400: 参数类型不匹配
Controller类里的方法: public void add(int a){ }
URL的方法: http://localhost:8080/add?a=jack
500: 服务器内部出错,IDEA已经抛出异常了