一.SpringMVC框架解析post提交的请求参数
1.项目结构:
2.准备表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>student类的视图</title>
</head>
<!-- 表单可以提交数据,默认get方式.
method="post"指定提交方式,action=""指定跳转的网址
要求:1,必须是form 2,必须有submit按钮 3,必须配置name属性
-->
<body>
<form action="http://localhost:8080/student/save" method="POST">
<table>
<tr>
<td>学生管理系统</td>
</tr>
<tr>
<td>姓名:</td>
</tr>
<tr>
<td>
<input
type="text"
name="name"
id="name"
placeholder="请输入你的名字!"
/>
</td>
</tr>
<tr>
<td>年龄:</td>
</tr>
<tr>
<td>
<input type="number" name="age" placeholder="请输入你的年龄!" />
</td>
</tr>
<tr>
<td>
性别:
<input type="radio" name="sex" checked="checked" value="0" /> 男
<input type="radio" name="sex" value="1" /> 女
</td>
</tr>
<tr>
<td>
学历:
<select name="degree">
<option value="1">本科</option>
<option value="2">硕士</option>
<option value="3">博士</option>
</select>
</td>
</tr>
<tr>
<td>
爱好: <input type="checkbox" value="吃" name="hobby" />吃
<input type="checkbox" value="喝" name="hobby" />喝
<input type="checkbox" value="嫖" name="hobby" />嫖
<input type="checkbox" value="赌" name="hobby" />赌
</td>
</tr>
<tr>
<td>
入学日期:
<input type="date" name="intime" />
</td>
</tr>
<tr>
<td>
<input type="submit" value="保存" />
<input type="reset" value="取消" />
</td>
</tr>
</table>
</form>
</body>
</html>
3.准备启动类
package cn.tedu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @作者: 朱学长
* @时间: 2021/9/15 0015 星期三 18:51
*/
@SpringBootApplication
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class);
}
}
4.准备Controller类,解析请求数据
package cn.tedu.controller;
import cn.tedu.pojo.Student;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @作者: 朱学长
* @时间: 2021/9/15 0015 星期三 18:53
*/
@RestController
@RequestMapping("/student")
public class StudentController {
@RequestMapping("/save")
public Student save(Student student) {
System.out.println(student);
return student;
}
}
五. 创建Student类,用来封装数据
package cn.tedu.pojo;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Arrays;
import java.util.Date;
/**
* @作者: 朱学长
* @时间: 2021/9/15 0015 星期三 19:14
*/
//充当了MVC的M层,model层,用来封装数据
//pojo类里只有属性和set() get()
//规则: 属性的类型 属性的名字
//和HTML页面保持一致:参考页面输入的值 参考页面中name属性的值
//400异常的原因:页面上输入的日期是String类型
//String->Date: @DateTimeFormat,需要指定日期的格式y是年M是月d是天
public class Student {
private String name;
private Integer age;
private Integer sex;
private Integer degree;
private String[] hobby;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date intime;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", degree=" + degree +
", hobby=" + Arrays.toString(hobby) +
", 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 Integer getDegree() {
return degree;
}
public void setDegree(Integer degree) {
this.degree = degree;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public Date getIntime() {
return intime;
}
public void setIntime(Date intime) {
this.intime = intime;
}
}
六.测试
7.拓展: 入库
修改pom,添加jdbc的jar包
直接在最外面的pom里加就行了,里面的每个module都可以用
<!--添加了jdbc的jar包 右键-generate-dependency-搜 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
创建数据库表
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT,
sex INT,
hobby VARCHAR(100),
degree INT,
intime DATE
)
创建StudentController类,接受请求,包括入库
package cn.tedu.controller;
import cn.tedu.pojo.Student;
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.util.Arrays;
/**
* @作者: 朱学长
* @时间: 2021/9/15 0015 星期三 18:53
*/
@RestController
@RequestMapping("/student")
public class StudentController {
@RequestMapping("/save")
public Student save(Student student) {
System.out.println(student);
jdbctosql(student);
return student;
}
public void jdbctosql(Student student) {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/sb";
Connection conn = DriverManager.getConnection(url, "root", "123456");
String sql = "insert into student2 values (null,?,?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setObject(1,student.getName());
ps.setObject(2,student.getAge());
ps.setObject(3,student.getSex());
ps.setObject(4,student.getDegree());
ps.setObject(5,Arrays.toString(student.getHobby()));
ps.setObject(6,student.getIntime());
ps.executeUpdate();
ps.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
总结:
8.拓展: 修改Tomcat端口号
二.Spring框架
-1.概述
Spring框架重点提供的: IOC DI AOP
IOC: 控制翻转, 是指把创建对象的权利交给spring
DI: 依赖注入,是指把有依赖关系的对象也同时new出来
AOP: 面向切面编程,补充了oop不足
-2IOC的使用
创建类
package cn.tedu.spring;
public class Hello {
public void hi(){
System.out.println("hello springioc~");
}
}
创建配置文件,配置类的信息
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- spring认为万物皆是bean,配置bean的位置,spring自动完成ioc
class属性用来描述类的全路径, id属性用来作为bean的唯一标识
-->
<bean class="cn.tedu.spring.Hello" id="hello"></bean>
</beans>