SpringMVC

一.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已经抛出异常了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值