MVC的学习与实战

随着前端,后端,数据库学习的完成,紧接着就是框架了,最近学习了SpringMVC,可以很好的把前后端数据库联系起来,用分层的思想来完成工作。

SpringMVC简介

SpringMVC分别对应着的是M:Model数据模型、V:View视图、C:Controller控制层。

将软件分层达到松耦合的效果,这样进行分层的结构,使得代码分离结构清晰,各层代码,各司其职,易于开发大型项目,这样的设计思想在任何软件的开发过程中都因该适用,各个部分相互独立,互不干扰,都做自己最擅长的的部分,提高代码的复用性!

工作原理图(摘自csdn:"cgblpx")

 工作原理简短描述

1,前端控制器DispatcherServlet:
当浏览器发送请求成功后,充当这调度者的角色,负责调度每个组件.
2,处理器映射器HandlerMapping:
根据请求的URL路径,找到能处理请求的类名和方法名
url: http://localhost:8080/hi , 找到Hello类里的hi()
3,处理器适配器HandlerAdapter:
正式开始处理业务,并把返回结果的结果交给DispatcherServlet
4,视图解析器ViewResolver:
找到正确的,能展示数据的视图,准备展示数据
5,视图渲染View:
展示数据

配置名词简介

在JAVA下创建两个包

  •         Controller:控制层包,用于接收请求和给出相应
  •         pojo:Model数据层包,用于封装对象,保存数据

还有一个启动类RunApp,用于启动服务,充当服务器。这里需要用到注解@SpringBootApplication在类上添加

而Controller类里需要在类上添加@RestController注解;在类上或者方法上添加@RequestMapping注解,负责控制网页的访问方式,一般在类上加一个为主访问方式,在方法上加一个为副访问方式。

孩子也是刚学啊,只会使用,底层原理都不了解~~~

实战Demo

直接开始实战把,碰到什么知识点讲什么。

一、前端页面的搭建

个人习惯从前端页面开始做起!

使用HBuilder加CSS修饰做一个表单负责给后台提交数据,后台使用JDBC吧数据传输进数据库中保存。

效果图

实现代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>学生信息管理系统</title>
		<style type="text/css">
			.b{
				background-color: blue;
				border: blue;
				color: white;
			}
			.c{
				background-color: red;
				border: red;
				color: white;
			}
			.a{
				padding: 0.325rem;
				width: 250px;
				height: 30px;
			}
		</style>
	</head>
	<body>
		<h1>学生信息管理系统</h1>
		<form action="http://127.0.0.1:8080/stu/add" method="post">
			<table border="0" cellspacing="0" cellpadding="">
				<tr><td>姓名</td></tr>
				<tr><td><input class="a" type="text" placeholder="请输入姓名" name="name" id="" value="" /></td></tr>
				<tr><td>年龄</td></tr>
				<tr><td><input class="a" type="text" placeholder="请输入姓名" name="age" id="" value="" /></td></tr>
				<tr><td>性别:
						<input type="radio" class="" name="sex" id="" value="1" checked="checked" />
						男
						<input type="radio" class="" name="sex" id="" value="0" />
						女
						</td></tr>
				<tr><td>爱好:
						<input type="checkbox" name="hobby" id="" value="ppq" checked="checked"/>
						乒乓球
						<input type="checkbox" name="hobby" id="" value="ps" />
						爬山
						<input type="checkbox" name="hobby" id="" 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>入学日期</td></tr>
				<tr><td><input name="intime" type="date" name="" id="" value="" /></td></tr>
				<tr align="center"><td >
					<input class="b" type="submit" name="" id="" value="保存" />
					<input class="c" type="button" name="" id="" value="取消" />
				</td></tr>
			</table>
		</form>
	</body>
</html>

 知识点:

  1. 表单头method属性的参数为post,交给程序器处理,而配合使用的就是action属性,它的参数是指包表单提交的数据给到哪里去处理。
  2. 下面的input语句要注意它们的类型和返回的值,关系到后面对象的创建与数据库的设计
  3. 返回值如果是汉字需要占用三个空间,而字母或者数字只占用一个空间,所以有些返回值可以用数字或者汉字的英文缩写来替代,节约空间。
  4. 单选框的name值要一样,否则产生不了单选的效果

二、后端的编写

  1. 创建一个Maven项目,结构先搭建好
  2. 创建Controller包存放控制层代码
  3. 创建一个pojo包存放封装数据的代码
  4. 在大包下创建一个启动类RunApp负责服务器启动
  5. 考虑到要用JDBC进行数据传输,所以在pom.xml里添加JDBC的jar包依赖

结构已经搭建完成,接下来进行代码的编写

启动类RunApp

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

封装数据类Student

package cn.tedu.pojo;

import org.springframework.format.annotation.DateTimeFormat;

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

public class Student {
    private String name;
    private Integer age;
    private Integer sex;
    private String[] hobby;
    private Integer edu;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date 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;
    }

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

控制类StudentController

package cn.tedu.Controller;

import cn.tedu.pojo.Student;
import org.springframework.format.annotation.DateTimeFormat;
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("stu")
public class StudentController {
    @RequestMapping("add")
    public Object add(Student s) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/cgb2106?characterEncoding=utf8", "root","root");
        PreparedStatement p = c.prepareStatement("insert into tb_student value(null ,?,?,?,?,?,?)");
        p.setObject(1, s.getName());
        p.setObject(2, s.getAge());
        p.setObject(3, s.getSex());
        p.setObject(4, Arrays.toString(s.getHobby()));
        p.setObject(5, s.getEdu());
        p.setObject(6, s.getIntime());
        int i = p.executeUpdate();
        p.close();
        c.close();
        return "数据插入成功";
    }
}

知识点:

  1. pojo类里的成员变量必须和前端的name值写的一样,否则报错
  2. 定义类型一般都是包装类,就算用户写错或者不写也有默认值,不会报错
  3. 浏览器提交的日期默认是String类型,需要用@DateTimeFormati进行格式的转换参数列表里写格式,如下:
  4. @DateTimeFormat(pattern = "yyyy-MM-dd")
  5. 注意@RequstMapping后面括号里写的访问方式一定要和前端页面相呼应
  6. 在方法里写JDBC用安全传输器,避免SQL注入的风险,代码如下:
  7. PreparedStatement p = c.prepareStatement("insert into tb_student value(null ,?,?,?,?,?,?)");
            p.setObject(1, s.getName());
            p.setObject(2, s.getAge());
            p.setObject(3, s.getSex());
            p.setObject(4, Arrays.toString(s.getHobby()));
            p.setObject(5, s.getEdu());
            p.setObject(6, s.getIntime());
            int i = p.executeUpdate();
  8. 设置值用Object类型,多态的体现,什么类型都可以,但是不能乱给,要符合数据库的设计
  9. 数组返回的是地址值,需要用Arrays.toString
  10. 最后注意资源的释放,节省空间

三、数据库的设计

设计图

知识点:

  1. 名字必须与前后端一致
  2. 类型合理设置,注意char和varchar的使用区别
  3. 给表设置主键的增加以及自增以及非空选项

四、结果展示

 

 

到此结束了,还有许多需要改进的地方以及对SpringMVC框架理解后面慢慢拓深自己的技术栈!

后面学习Spring和Mybatis。

fighting! 

fighting!!

fighting!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值