?利用idea创建服务器,并使网页中的数据可以存入MySQL中,欢迎留言指导
使用Spring MVC建立服务器,在网页中向该服务器发射注册相关数据,
(日期功能还没有实现,欢迎大佬指导)
目标:
1.在服务器中整理数据,并使用JDBC协议将数据储存在mysql中。
? ? ? ? 1)注册要求重复验证密码,并需保证两次输入一致
? ? ? ? 2)具有用户名查重提示
2.在网页中输入正确的账号密码,并在idea中输出该用户其他的信息
//目标类:Studens
package cn.tedu.pojo;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Arrays;
import java.util.Date;
public class Students { //创建Students类
private String name; //用户名
private String password; //密码
private int age; //年纪
private int sex; //性别
private String[] hobby; //喜好
private String edu; //学历
@DateTimeFormat(pattern="yyyy-MM-dd")//日期功能还没有实现,欢迎大佬指导
private java.util.Date intime;
//为私密对象创建获取调用方法。私密对象更利于数据的保护
public Date getIntime()
{
return intime;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public String getEdu() {
return edu;
}
public void setEdu(String edu) {
this.edu = edu;
}
public void setIntime(Date intime) {
this.intime = intime;
}
@Override
public String toString() { //重写toString方法,方便调用输出检查
return "Students{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
", age=" + age +
", sex=" + sex +
", hobby=" + Arrays.toString(hobby) +
", edu='" + edu + '\'' +
", intime=" + intime +
'}';
}
}
?
package cn.tedu.controller;
import cn.tedu.pojo.Students;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.*;
import java.util.Arrays;
//http://localhost:8080/stu/reg?name=sayhi&password=lin123&repass=lin123&age=23&sex=0&hobby=1&hobby=3&%E5%AD%A6%E5%8E%86=2&data=2021-08-01 网页发送来的注册信息
@RestController //标注表明了这个类是一个控制器类。但想要让这个类成为一个处理请求的处理器
@RequestMapping("stu") //@RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,表明接受网页数据的指向位置
public class StuController { //创建StuConller控制器
//连接数据库
static String url="jdbc:mysql://localhost:3306/cgb2106";
//设置Connection
/*static {
try {
Connection c = DriverManager.getConnection(url, "root", "root");
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}*/
//想把Conneion作为一个公用的静态变量使用,但是不知道该如何在使用后及时关闭,所以还是写在了模块里
//name password repass age sex hobby edu;//注册会输入的变量,做一个标志防止漏写
private java.util.Date intime; //未实现的日期变量
public String hint;
public Boolean flag;
@RequestMapping("reg") //reg regist 注册
public String stuReg(Students stu, String repass){//获取stu和repass
flag=false;
System.out.println(repass); //检查是否获取repass
System.out.println(stu.getPassword());//检查同上
System.out.println(stu);
if(!repass.equals(stu.getPassword())){ //密码查重
hint = "注册失败,两次密码输入不一致";
System.out.println(hint);}
else if (isrenam(stu.getName())){ //用户名查重
hint = "注册失败,用户名重复";
System.out.println(hint);}
else{ //写入sql
witter(stu,repass);
return stu.toString()+hint;} //输出结果
return stu+" hint"; //网页上输出结果
}
private Boolean witter(Students stu,String repass) { //使用jdbc协议向数据库中写入数据
String sql = "insert into students(name,password,age,sex,hobby,edu,intime) values (?,?,?,?,?,?,?)"; //sql语句
try {
Connection c = DriverManager.getConnection(url, "root", "root"); //2.创建链接数据库
PreparedStatement ps = c.prepareStatement(sql); //建立sql命令
ps.setString(1, stu.getName()); //填充sql命令
ps.setString(2, stu.getName());
ps.setInt(3, stu.getAge());
ps.setInt(4, stu.getSex());
ps.setString(5, Arrays.toString(stu.getHobby()));
ps.setString(6, stu.getEdu());
ps.setDate(7, (Date) stu.getIntime());
ps.executeUpdate(); //运行sql语句
ps.close(); //关闭PreparedStatement资源
hint = "注册成功";
return true; //注册成功没有触发异常直接返回true
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return false; //发生异常注册失败返回false
}
private boolean isrenam(String name) { //查重模块
flag =false;
String sql="select name from students where name=?";//只查name标签,节省资源
try {
Connection c = DriverManager.getConnection(url, "root", "root"); //2.创建链接数据库
PreparedStatement ps = c.prepareStatement(sql);
ps.setString(1,name);
System.out.println(name);
System.out.println(sql);
ResultSet r = ps.executeQuery();
flag = r.next(); //查到数据了,说明有重复
System.out.println(flag);
r.close();
ps.close();
} catch (Exception throwables) {
throwables.printStackTrace();
}
return flag;
}
@RequestMapping("log")
private void isrenam(String name, String password) {
flag = false;
String sql = "select * from students where name=? and password=?"; //sql语句
try {
Connection c = DriverManager.getConnection(url, "root", "root");
PreparedStatement ps = c.prepareStatement(sql);
ps.setString(1, name);
ps.setString(2, password);
System.out.println(sql);
ResultSet r = ps.executeQuery();
flag = r.next(); //检查是否查到数据
//r.next已经被获取了,再获取就数据丢失了!,所以使用do while循环
//按道理来说已经去重了,用户不存在重复,这个do while....可以不写..吧..
do{
for (int i=1;r.getObject(i)!=null;i++) {
//使用for循环来获取数据直到获取不到数据为止,
//我这里是不是应当重新设计避免数据库出现空值导致获取不到空值后面的数据?
String o = r.getString(i);
System.out.println(o+" ");
//打印数据因为从表中获取的数据都会是String类型,所以这里倒是不用做区分了
}
}while(r.next());
System.out.println(flag);
r.close();
ps.close();
} catch (Exception throwables) {
throwables.printStackTrace();
}
if(flag){
System.out.println("登录成功");
}
}
}
<!--目标网页-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>stuform</title>
<style> //css语句
input{width: 300px;height: 30px;}
td{font-size: 20px;}
input[type="radio"],[type="checkbox"]{width:15px;height:15px;}
select{width:50px;height:20px;}
input[type="date"]{width: 120px;height: 20px;}
input[type="submit"],[type="reset"]{width:60px;height:40px;
border: 0px; color:white;}
</style>
</head>
<body >
<h1>学生信息管理系统MIS</h1>
<form method="post" action="http://localhost:8080/stu/reg">
<table>
<tr><td>姓名:</td></tr>
<tr><td><input type="text" placeholder="请输入姓名" name="name"/></td></tr>
<tr><td>密码:</td></tr>
<tr><td><input type="password" placeholder="请输入密码" name="password"/></td></tr>
<tr><td>第二次输入密码:</td></tr>
<tr><td><input type="password" placeholder="请重复输入密码" name="repass"/></td></tr>
<tr><td>年龄:</td></tr>
<tr><td><input type="number" placeholder="请输入年龄" name="age"/></td></tr>
<tr><td>性别:(单选框)
<input type="radio" value="0" name="sex"/>男
<input type="radio" value="1"name="sex"/>女</td></tr>
<tr><td>爱好:(多选框)
<input type="checkbox" value="1" name="hobby"/>乒乓球
<input type="checkbox" value="2" name="hobby"/>爬山
<input type="checkbox" value="3" name="hobby"/>唱歌</td></tr>
<tr><td>学历:(下拉框)
<select name=edu>
<option value ="1">本科</option>
<option value ="2">专科</option>
</select></td></tr>
<tr><td>入学日期:</td></tr>
<tr><td><input type="date" name="data"/></td></tr>
<tr><td><input type="submit" value="保存" style="background-color: blue;"/>
<input type="reset" value="重置" style="background-color: fuchsia;"/></td></tr>
</table>
</form>
</body>
</html>
?
|