SpringMVC

一.概述

        SSM框架里,第一个S就是指SpringMVC,是一个框架

        是Spring框架的一个后续产品,遵循了MVC的设计模式,保证了程序间的松耦合

      1.  SpringMVC的主要作用:

                (1)接受请求(解析请求参数)

                (2)做出响应

      2.  MVC的设计模式:

                (1)M是model模型,用来封装数据

                (2)V是view视图,用来展示数据

                (3)C是controller控制层,用于控制浏览器

                        能提升代码的复用性,可读性,实现程序的松耦合

      3.  重要注释

                @RestController

                @RequestMapping()

                @PathVariable

二.工作原理

        1.前端控制器DispatcherServlet

                当浏览器发送请求成功后,充当着调度者的作用,负责调度每个组件;

        2.处理器映射器HandlerMapping

                根据请求的url路径,找到能处理请求的类名和方法名;

                如:url:http://localhost:8080/hello,找到HelloController类中的hello

        3.处理器适配器HanlderAdapter

                正式开始处理业务,并将返回结果交给DispatcherServlet;

        4.视图解析器ViewResolver

                找到正确的,能展示数据的视图,准备展示数据;

        5.视图渲染View

                展示数据。

三.SpringMVC的响应测试

        1.概述

                SpringMVC可以接受请求,做出响应数据,类型可以非常丰富

        2.测试

                创建启动类RinApp,用来启动服务器

package com.yu;

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,args);
    }
}

                创建一个类,补充方法,用来接收请求和给出响应

package com.yu.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//完成springmvc的角色,接收请求和给出响应
//是MVC设计模式里的C控制器
@RestController
//标记着这个类是一个controller控制器+接收请求
@RequestMapping("run")
public class HelloController {
    @RequestMapping("get")//规定了url怎么访问这个方法
    public String get(){
        return "Hello Springmvc";
    }
}

                成功启动RunApp类,在浏览器中访问http://localhost:8080/run/get

                 创建student类,进行属性封装并提供全参构造,重写toString方法

package com.yu.pojo;

public class Student {
    private Integer id;//使用引用类型变量来封装数据,可以避免一些异常
    private String name;
    private Integer age;
    private String sex;
    private String address;

    public Student(Integer id, String name, Integer age, String sex, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.address = address;
    }

    public Student() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

                 创建studentController

package com.yu.controller;

import com.yu.pojo.Student;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("student")
public class StudentController {

    //访问http://http://localhost:8080/student/get1
    @RequestMapping("get1")
    public Student getStu1(){
        Student student = new Student();
        student.setId(1);
        student.setName("张三");
        student.setAge(18);
        student.setSex("男");
        student.setAddress("北京");
        return student;
    }

    @RequestMapping("get2")
    public Student getStu2(){
        return new Student(2,"李四",20,"女","上海");
    }

    @RequestMapping("get3")
    public void getStu3(Integer id){
        System.out.println("数据添加成功,id="+id);
    }
    
    //访问http://localhost:8080/student/get4?id=13&name=王五
    @RequestMapping("get4")
    public void getStu4(Integer id,String name){
        System.out.println("数据添加成功,id="+id+",name="+name);
    }

    @RequestMapping("get5")
    public void getStu5(Student stu){
        System.out.println(stu);
    }
}

四.springMVC的请求

        请求方式有八种,常见的就是get、post、restful

        1、GET

                向特定的资源发出请求,并返回实体,有固定的写法,而且数据有最大长度,超出就不行。 如:http:/localhost:880/get/student?id=1&name=张三&age=18 

        2、POST

                向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立/已有资源的修改。

        3、RESTFul

                为了简化GET请求的写法,可以使用RESTFul方式。

                用法:需要使用注解@PathVariable来获取请求路径中的参数值,@PathVariable用来绑定值。通过{}来获取路径中传递来的值。

                如:http://localhost:8080/student/get6/11/李四

//http://localhost:8080/student/get6/11/李四
@RequestMapping("get6/{id}/{name}")
public void getStu6(@PathVariable Integer id ,
                    @PathVariable String name){
    System.out.println("数据添加成功,id="+id+",name="+name);
}

五.利用jdbc把接受到的参数入库 

        1.准备form表单

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>学生信息管理系统MIS</title>
		<link href="css/stuform.css" rel="stylesheet"/>
	</head>
	<body>
		<!-- 利用表单,向服务器发送数据
			默认是get提交,通过method属性修改提交方式
			action属性,指定提交位置
		 -->
		<form method="post" action="http://localhost:8080/student/add"> 
		
		<div id="box">
			<center><h2>学生信息管理系统MIS</h2></center>
			<div id="name">姓名:</div>
			<div id="namet">
				<input type="text" placeholder="请输入姓名" name="name"/>
			</div>			
			<div id="age">年龄:</div>
			<div id="aget">
				<input type="number" placeholder="请输入年龄" name="age" />
			</div>
			<div id="sex">
				性别:(单选框)
				<input type="radio" name="sex" value="1"/>男
				<input type="radio" name="sex" value="0" checked="checked"/>女
			</div>
			<div id="hobby">
				爱好:(多选)
				<input type="checkbox" name = "hobby" value="ppq" checked="checked"/>乒乓球
				<input type="checkbox" name = "hobby" value="ps"/>爬山
				<input type="checkbox" name = "hobby" value="cg"/>唱歌
			</div>
			<div id="education">
				学历(下拉框)
				<select name="edu">
					<option value="1">本科</option>
					<option value="2">研究生</option>
					<option value="3">博士后</option>
				</select>
			</div>
			<div id="date">
				入学日期:
				<input type="date" name="intime" value="intime" />
			</div>
			<div id="but">
				<input type="submit" name="submit" value="保存" id="sub"/>
				<input type="button" name="cancel" value="取消" id="can"/>			
			</div>
		</div>
		</form>
	</body>
</html>

        2.准备Student2类

package com.yu.pojo;

import org.springframework.format.annotation.DateTimeFormat;

import java.util.Arrays;
import java.util.Date;

//是Model层,用来封装数据,就是一个pojo(封装的属性+get/set)
public class Student2 {
    //属性(成员变量):变量类型 变量名
    //提交数据的类型 页面上name属性的值
    //能用引用类型就不用基本数据类型,避免了一些异常
    private String name;
    private Integer age;
    private Integer sex;
    private String[] hobby;
    private Integer edu;

    //浏览器中提交的数据默认为字符串
    //日期为2021/8/12,报错404,
    // 需要将string类型的日期转为date类型
    //pattern属性规定了日期的格式y表示年M表示月d表示日
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date intime;

    //get set toString
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", hobby=" + Arrays.toString(hobby) +
                ", edu=" + edu +
                ", intime=" + intime +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    public Integer getEdu() {
        return edu;
    }

    public void setEdu(Integer edu) {
        this.edu = edu;
    }

    public Date getIntime() {
        return intime;
    }

    public void setIntime(Date intime) {
        this.intime = intime;
    }
}

        4.添加JDBC的jar包依赖

<!--添加jdbc的jar包依赖
    generate—>dependency—>输入mysql-connector
    也可以是alt+insert,出现弹窗,输入mysql-connector-->
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.48</version>
    </dependency>
</dependencies>

        5.利用JDBC把接收的参数入库

package com.yu.controller;

import com.yu.pojo.Student2;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;

@RestController
@RequestMapping("student2")
public class Student2Controller {
    @RequestMapping("add")
    public Object add(Student2 stu){
        Connection c = null;
        PreparedStatement p = null;
        try {
            String url = "jdbc:mysql:localhost:3306/student?characterEncoding=utf-8";
            c = DriverManager.getConnection(url,"root","root");
            String sql = "insert into tb_student values(null,?,?,?,?,?,?)";
            p = c.prepareStatement(sql);
            p.setObject(1,stu.getName());
            p.setObject(2,stu.getAge());
            p.setObject(3,stu.getSex());
            /*getHobby()得到的是一个数组,不能直接存入数据库,需要变成串*/
            p.setObject(4, Arrays.toString(stu.getHobby()));
            p.setObject(5,stu.getEdu());
            p.setObject(6,stu.getIntime());
            int n = p.executeUpdate();
            if (n != 0){
                System.out.println("添加成功!");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            try {
                p.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                c.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return stu;
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值