cgb2107-day16 素颜马尾好姑娘i 2022-09-11 09:17 148阅读 0赞 ### 文章目录 ### * * 一,练习前后端整合,包括入库 * * \--1,java代码 * \--2,前端代码 * \--3,测试 * \--4,总结 * 二,SpringMVC框架解析post提交的请求参数 * * \--0,项目结构 * \--1,准备表单 * \--2,准备启动类 * \--3,准备Controller类,解析请求数据 * \--4,创建Student类,用来封装数据 * \--5,测试 * \--6,扩展:入库 * * 修改pom,添加jdbc的jar包 * 创建数据库表 * 创建StudentController类,接受请求,包括入库 * 总结 * \--7,扩展:修改Tomcat端口号 * 三,Spring框架 * * \--1,概述 * \--2,IOC的使用 * * 创建类 * 创建配置文件,配置类的信息 * 创建测试类--预习 !! ## 一,练习前后端整合,包括入库 ## ### –1,java代码 ### package cn.tedu.hello; 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; @RestController @RequestMapping("car") public class CarController2 { //1,解析浏览器发来的请求参数 //http://localhost:8080/car/save3? //id=1&color=red&price=100&pinpai=BMW&type=X7 @RequestMapping("save3") public Object save3(Car c) throws Exception { //TODO 把解析到的请求参数 getXxx()入库--jdbc //1,pom里加jdbc的坐标 //2,在数据库里创建car表(提供id,color,price,pinpai,type字段) /* CREATE TABLE car( id INT PRIMARY KEY AUTO_INCREMENT, color VARCHAR(20), price DOUBLE, pinpai VARCHAR(10), TYPE VARCHAR(10) ) */ //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库连接 String url="jdbc:mysql://localhost:3306/cgb2107?characterencoding=utf8"; Connection con = DriverManager.getConnection(url,"root","root"); //获取传输器 String sql = "insert into car values(null,?,?,?,?)"; PreparedStatement p = con.prepareStatement(sql); //给SQL设置参数---参数的顺序一定要和字段的顺序一致 p.setObject(1,c.getColor()); p.setObject(2,c.getPrice()); p.setObject(3,c.getPinpai()); p.setObject(4,c.getType()); //执行SQL p.executeUpdate(); //释放资源 p.close(); con.close(); //{"id":1,"color":"red","price":100.0,"pinpai":"BMW","type":"X7"} return c; } } ### –2,前端代码 ### <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>前后端整合</title> </head> <body> <a href="http://localhost:8080/user/insert">普通访问</a> <a href="http://localhost:8080/user/insert?id=10&name=rose&age=20">普通的get提交方式</a> <a href="http://localhost:8080/user/insert2/10/rose/20">restful方式</a> <a href="http://localhost:8080/car/save3?id=1&color=red&price=100&pinpai=BMW&type=X7">点我获取汽车数据</a> <a href="http://localhost:8080/car/save3?id=1&color=red&price=100&pinpai=BMW&type=X7">点我保存汽车数据</a> </body> </html> ### –3,测试 ### 启动服务器后 ,打开浏览器测试 ![在这里插入图片描述][6c7672d97fe4497bbdf59a72db8c20a1.png] ![在这里插入图片描述][d8e8f2a5d4974f828bc38d0f68e160d9.png] ### –4,总结 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16] ## 二,SpringMVC框架解析post提交的请求参数 ## ### –0,项目结构 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16 1] ### –1,准备表单 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_17_color_FFFFFF_t_70_g_se_x_16] <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> body{ font-size: 17px; /* 字号 */ background-color: lightpink; /* 背景色 */ } /* 输入框 */ .a{ width: 300px; /* 宽度*/ height: 40px; /* 高度 */ font-size: 20px; /* 字号 */ } /* 保存按钮 */ input[type="submit"]{ /* 背景色 字的颜色 边框颜色 宽度 高度 */ background-color: #0000FF; border-color: #0000FF; color: white; width: 100px; height: 40px; font-size: 20px; /* 字号 */ } /* 取消按钮 */ input[type="button"]{ /* 背景色 字的颜色 边框颜色 宽度 高度 */ background-color: #FF69B4; border-color: #FF69B4; color: white; width: 100px; height: 40px; font-size: 20px; /* 字号 */ } </style> </head> <body> <!-- 表单可以提交数据,默认get方式. method="post"指定提交方式,action=""指定跳转的网址 要求:1,必须是form 2,必须有submit按钮 3,必须配置name属性 --> <form method="post" action="http://localhost:8080/student/save"> <table> <tr> <td> <h2>学生信息管理系统MIS</h2> </td> </tr> <tr> <td>姓名:</td> </tr> <tr> <td> <input class="a" type="text" placeholder="请输入姓名" name="name"> </td> </tr> <tr> <td>年龄:</td> </tr> <tr> <td> <input class="a" type="number" placeholder="请输入年龄" name="age"> </td> </tr> <tr> <td> 性别:(单选框) <input type="radio" name="sex" value="1" checked="checked"/>男 <input type="radio" name="sex" value="0"/>女 </td> </tr> <tr> <td> 爱好:(多选) <input type="checkbox" name="hobby" value="ppq" checked="checked"/>乒乓球 <input type="checkbox" name="hobby" value="ps"/>爬山 <input type="checkbox" name="hobby" value="cg"/>唱歌 </td> </tr> <tr> <td> 学历:(下拉框) <select name="edu"> <option value="1">本科</option> <option value="2">专科</option> <option value="3">博士</option> </select> </td> </tr> <tr> <td> 入学日期: <input type="date" name="intime"/> </td> </tr> <tr> <td> <input type="submit" value="保存"/> <input type="button" value="取消"/> </td> </tr> </table> </form> </body> </html> ### –2,准备启动类 ### package cn.tedu; 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 cn.tedu.pojo.Student; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; //和浏览器交互,接受请求,给出响应 @RestController @RequestMapping("student") public class StudentController { //解析请求参数 @RequestMapping("save") // public String save(String name,Integer age,String sex,String hobby){ public String save(Student s){ //Student{name='jack', age=20, sex=0, hobby=[ppq, ps, cg], edu=2, intime=Wed Sep 15 00:00:00 CST 2021} System.out.println(s); return "保存成功!" ; } } ### –4,创建Student类,用来封装数据 ### package cn.tedu.pojo; import java.util.Arrays; import java.util.Date; //充当了MVC的M层,model层,用来封装数据 //pojo类里只有属性和set() get() public class Student { //规则: 属性的类型 属性的名字 //和HTML页面保持一致:参考页面输入的值 参考页面中name属性的值 private String name;//用来封装用户在浏览器输入的用户名 private Integer age;//用来封装用户在浏览器输入的年龄 private Integer sex;//用来封装用户在浏览器选择的性别 private String[] hobby;//用来封装用户在浏览器选择的爱好--多选的结果存入数组 private Integer edu; //400异常的原因:页面上输入的日期是String类型 //String->Date: @DateTimeFormat,需要指定日期的格式y是年M是月d是天 @DateTimeFormat(pattern="yyyy-MM-dd") private Date intime;//用来封装用户在浏览器选择的日期 //get set tostring public String getName() { return name; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", sex=" + sex + ", hobby=" + Arrays.toString(hobby) + ", edu=" + edu + ", intime=" + intime + '}'; } 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; } } ### –5,测试 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16 2] ### –6,扩展:入库 ### #### 修改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), edu 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; //和浏览器交互,接受请求,给出响应 @RestController @RequestMapping("student") public class StudentController { //解析请求参数 @RequestMapping("save") // public String save(String name,Integer age,String sex,String hobby){ public String save(Student s) throws Exception { //TODO 把解析成功的学生数据 入库 //1,修改pom添加jar包(直接改了project里的pom.xml) //2,建表student /* CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT, sex INT, hobby VARCHAR(100), edu INT, intime DATE ) */ //3,写jdbc //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //获取数据库连接 String url="jdbc:mysql://localhost:3306/cgb2107?characterencoding=utf8"; Connection con = DriverManager.getConnection(url,"root","root"); //获取传输器--插入的值的个数参考字段的个数,顺序也是参考字段的顺序 String sql="insert into student values(null,?,?,?,?,?,?)"; PreparedStatement p = con.prepareStatement(sql); //设置SQL的参数 p.setObject(1,s.getName()); p.setObject(2,s.getAge()); p.setObject(3,s.getSex()); //注意:数据库里根本没有数组的类型,需要String[]->String,否则Data too long for column 'hobby' at row 1 p.setObject(4, Arrays.toString(s.getHobby()) ); p.setObject(5,s.getEdu()); p.setObject(6,s.getIntime()); //执行SQL p.executeUpdate(); //释放资源 p.close(); con.close(); return "保存成功!" ; } } #### 总结 #### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16 3] ### –7,扩展:修改Tomcat端口号 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16 4] ## 三,Spring框架 ## ### –1,概述 ### Spring框架重点提供的: IOC DI AOP IOC : 控制翻转, 是指把创建对象的权利交给spring. DI : 依赖注入, 是指把有依赖关系的对象也同时new出来. AOP : 面向切面编程, 补充了OOP不足 ### –2,IOC的使用 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_17_color_FFFFFF_t_70_g_se_x_16 1] #### 创建类 #### 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> #### 创建测试类–预习 !! #### [6c7672d97fe4497bbdf59a72db8c20a1.png]: /images/20220828/f3c6759afdb0422c915290816ddbc128.png [d8e8f2a5d4974f828bc38d0f68e160d9.png]: /images/20220828/ebaa3fb90a7440ab8a24e3c36baee3e8.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16]: /images/20220828/ace8f2d76cb8467c936a1277433f1fda.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16 1]: /images/20220828/c321e5f3b7f142739885fa2c5222510e.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_17_color_FFFFFF_t_70_g_se_x_16]: /images/20220828/26a2d465674b482f9db00637fdbacc2e.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16 2]: /images/20220828/cef49382aea04d348947b746763642d5.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16 3]: /images/20220828/3ca910b84c8e4f68a4310ea42ba5d06d.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_20_color_FFFFFF_t_70_g_se_x_16 4]: /images/20220828/325775122a4e4c2ea53cc11b933b741d.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2dibHB4_size_17_color_FFFFFF_t_70_g_se_x_16 1]: /images/20220828/2d0f87f3a0e04f519638b71786222f1d.png
相关 cgb2107-day16 文章目录 一,练习前后端整合,包括入库 \--1,java代码 \--2,前端代码 \--3, 素颜马尾好姑娘i/ 2022年09月11日 09:17/ 0 赞/ 149 阅读
相关 cgb2107-day08 文章目录 一,模拟 服务器解析浏览器发来的数据 二,CSS选择器 \--1,概述 \--2,简单选择器 旧城等待,/ 2021年09月11日 03:36/ 0 赞/ 298 阅读
还没有评论,来说两句吧...