Servlet与表单、数据库综合项目实战【学生信息管理】

news2024/11/18 10:58:31

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Servlet与表单数据交互(如文本框、单选按钮、复选框、下拉列表等)
更多内容点击👇
      一文解决IDEA中文乱码问题

【本文目录】

    • ⛳️ 项目需求
    • ⛳️ 覆盖知识
    • ⛳️ 开发思路
    • ⛳️ 开发步骤
      • 【1】项目配置
      • 【2】JDBC+Apache方法操作数据库
      • 【3】HTML+CSS+JS 实现页面编写
        • 1、学生注册页面(新增学生)
        • 2、删除学生信息
        • 3、修改学生信息
        • 4、学生登陆(查询单个学生)
        • 5、查询所有学生信息页面
    • ⛳️ 测试效果
    • ⛳️ 项目源码分享

在这里插入图片描述

⛳️ 项目需求

  • 实现在HTML网页中提交表单数据,通过Servlet方法获取数据插入到数据库中,插入成功或者失败,在网页页面中有相应的相应展示,如成功,以表格的形式显示新增的数据;如失败,可以在页面显示数据添加失败等相关显示信息。
  • 实现从数据库中获取全部数据,通过Servlet方法将从数据库中获取的数据,添加到HTML页面中,以表格的形式展示在网页中。

⛳️ 覆盖知识

  • java部分:程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、实用类、JDBC、三层架构Druid连接池、Apache的DBUtils使用、Servlet等。
  • 数据库部分:创建表、增删改查语句的书写等。
  • 前端部分:HTML、CSS、jQuery、JavaScript等。

⛳️ 开发思路

  • 明确需求
  • 编码顺序
    • 添加项目需要使用的各种jar包
    • HTML 页面表单的编写
    • Apache方法的DBUtils编写
    • 实体类的数据初始化(添加私有变量、有参/无参构造、get/set方法、toString() 方法重写)
    • 完成数据表创建
    • 三层架构的搭建(dao层接口和实现类的编写、service层接口和实现类的编写、view层的Servlet类的编写)
  • 测试

⛳️ 开发步骤

【1】项目配置

1、用IDEA创建项目,File—>New—>Project,选择默认的new project即可,创建一个项目名称,点击Create完成创建。

在这里插入图片描述

2、然后鼠标右击项目Add Framework support,选择Web Application来添加Web框架;

在这里插入图片描述

3、在web目录下的WEB-INF上右单击,新建一个Directory目录,命名为lib;

在这里插入图片描述
然后把项目需要的jar包放在lib中:
在这里插入图片描述
IDEA创建Java web项目的详细步骤可以参考我的一篇博文:IDEA创建Java Web项目

【2】JDBC+Apache方法操作数据库

1、创建database.properties文件,用来配置注册驱动和数据库连接对象的相关数据。

driver=com.mysql.jdbc.Driver

url=jdbc\:mysql\://localhost\:3306/java221804

username=root

password=huanghuang

initialSize=10

maxActive=30

maxIdle=5

maxWait=3000

2、创建数据表:students表

CREATE TABLE `students` (
  `sid` INT(11) NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY,
  `sname` VARCHAR(20) NOT NULL,
  `sage` INT(11) NOT NULL,
  `ssex` VARCHAR(20) NOT NULL,
  `saddress` VARCHAR(40) NOT NULL,
  `sphonenum` VARCHAR(20) NOT NULL
) 

3、创建工具目录,存放工具类

DBUtils.java

package utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DBUtils {

	private static DruidDataSource druidDataSource;

	static {
		Properties properties = new Properties();

		try {
			InputStream is = DBUtils.class
					.getResourceAsStream("/database.properties");
			properties.load(is);
			druidDataSource = (DruidDataSource) DruidDataSourceFactory
					.createDataSource(properties);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static DataSource getDataSource(){
		return druidDataSource;
	}

}

4、创建实体类Student类

package entity;

import java.util.Date;

public class Student {

	private int sid;
	private String sname;
	private int sage;
	private String ssex;
	private String saddress;
	private String sphoneNum;

	public Student() {
		super();
	}

	public Student(int sid, String sname, int sage, String ssex, String saddress, String sphoneNum) {
		this.sid = sid;
		this.sname = sname;
		this.sage = sage;
		this.ssex = ssex;
		this.saddress = saddress;
		this.sphoneNum = sphoneNum;
	}

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public int getSage() {
		return sage;
	}

	public void setSage(int sage) {
		this.sage = sage;
	}

	public String getSsex() {
		return ssex;
	}

	public void setSsex(String ssex) {
		this.ssex = ssex;
	}

	public String getSaddress() {
		return saddress;
	}

	public void setSaddress(String saddress) {
		this.saddress = saddress;
	}

	public String getSphoneNum() {
		return sphoneNum;
	}

	public void setSphoneNum(String sphoneNum) {
		this.sphoneNum = sphoneNum;
	}

	@Override
	public String toString() {
		return "Student{" +
				"sid=" + sid +
				", sname='" + sname + '\'' +
				", sage=" + sage +
				", ssex='" + ssex + '\'' +
				", saddress='" + saddress + '\'' +
				", sphoneNum='" + sphoneNum + '\'' +
				'}';
	}
}

5、创建数据访问层DAO层的接口

package dao;

import java.util.List;
import entity.Student;

public interface StudentDao {
	// 增
	public int insert(Student student);

	// 删
	public int delete(int sid);

	// 改
	public int update(Student student);

	// 查一个
	public Student select(int sid);

	// 查全部
	public List<Student> selectAll();

}

6、创建数据访问层DAO层接口的实现类

package dao.impl;

import java.sql.SQLException;
import java.util.List;

import dao.StudentDao;
import entity.Student;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import utils.DBUtils;


public class StudentDaoImpl implements StudentDao {

    private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());

    // 增加一条数据
    @Override
    public int insert(Student student) {
        String sql = "insert into students (sid,sname,sage,ssex,saddress,sphonenum) values(?,?,?,?,?,?);";
        Object[] args = {
                student.getSid(), student.getSname(), student.getSage(),
                student.getSsex(), student.getSaddress(), student.getSphoneNum()
        };
        try {
            return queryRunner.update(sql, args);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    // 删除一条数据
    @Override
    public int delete(int sid) {
        String sql = "delete from students where sid=?;";
        try {
            return queryRunner.update(sql, sid);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    // 修改一条数据
    @Override
    public int update(Student student) {
        String sql = "update `students` set sname=?,sage=?,ssex=?,saddress=?,sphonenum=? where sid=?;";
        Object[] args = {
                student.getSname(), student.getSage(),
                student.getSsex(), student.getSaddress(),
                student.getSphoneNum(),student.getSid()};
        try {
            return queryRunner.update(sql, args);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    // 查询一条数据
    @Override
    public Student select(int sid) {
        String sql = "select * from students where sid=?;";
        try {
            return queryRunner.query(sql, new BeanHandler<Student>(
                    Student.class), sid);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    // 查询全部数据
    @Override
    public List<Student> selectAll() {
        String sql = "select * from students;";
        try {
//             List<Student> s=
//            System.out.println(s.get(1));
            return queryRunner.query(sql, new BeanListHandler<Student>(
                    Student.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

7、创建服务层Service层的接口

package service;

import java.util.List;

import entity.Student;

public interface StudentService {

	// 增
	public int insertStudent(Student student);

	// 删
	public int deleteStudent(int sid);

	// 改
	public int updateStudent(Student student);

	// 查一个
	public Student selectStudent(int sid);

	// 查多个
	public List<Student> selectAllStudents();
}

8、创建服务层Service层接口的实现类

package service.impl;

import java.util.List;

import dao.StudentDao;
import dao.impl.StudentDaoImpl;
import entity.Student;
import service.StudentService;

public class StudentServiceImpl implements StudentService {

	StudentDao studentDao = new StudentDaoImpl();

	//增
	@Override
	public int insertStudent(Student student) {
		return studentDao.insert(student);
	}

	//删
	@Override
	public int deleteStudent(int sid) {
		return studentDao.delete(sid);
	}

	//改
	@Override
	public int updateStudent(Student student) {
		return studentDao.update(student);
	}

	//查一个
	@Override
	public Student selectStudent(int sid) {
		
		return studentDao.select(sid);
	}

	//查全部
	@Override
	public List<Student> selectAllStudents() {
		
		return studentDao.selectAll();
	}
}

9、创建视图层View层的Servlet测试类(关键一步)

1)新增学生信息的测试类

package cn.lqgx.www;

import entity.Student;
import service.StudentService;
import service.impl.StudentServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//注解方式替换web.xml中的配置
@WebServlet("/student")
public class StudentServlet extends HttpServlet {
    StudentService studentService=new StudentServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        int stuId= Integer.parseInt(req.getParameter("stuId"));
        String stuName = req.getParameter("stuName");
        int stuAge = Integer.parseInt(req.getParameter("stuAge"));
        String stuSex=req.getParameter("stuSex");
        String stuAddress=req.getParameter("stuAddress");
        String stuPhone=req.getParameter("stuPhone");

        PrintWriter printWriter=resp.getWriter();
        Student student=new Student(stuId,stuName,stuAge,stuSex,stuAddress,stuPhone);
        System.out.println(student);
        Student student1=studentService.selectStudent(stuId);
        if(student1==null){
            int num=studentService.insertStudent(student);
            if(num>0){
//                resp.getWriter().println("学生信息添加成功!");
                resp.setContentType("text/html;charset=UTF-8");
                printWriter.write("<html lang=\"en\">");
                printWriter.write("<head>");
                printWriter.write("<meta charset=\"UTF-8\">");
                printWriter.write("<title>Title</title>");
                printWriter.write("<style>");
                printWriter.write("td{width:200px;height:45px;line-height:45px;text-align:center;}");
                printWriter.write("table tr:nth-child(odd){background:green;}");
                printWriter.write("table tr:nth-child(even){background:#FE5F97;}");
                printWriter.write("th{height:40px;line-height:40px;text-align:center;background:white;}");
                printWriter.write("caption{height:45px;line-height:45px;text-align:center;}");
                printWriter.write("</style>");
                printWriter.write("</head>");
                printWriter.write("<body>");
                printWriter.write("<table border=\"1\" width=\"100%\" cellspacing=\"0\">");
                printWriter.write("<caption align=\"top\">新增学生信息</caption>");
                printWriter.write("<thead>");
                printWriter.write("<tr>");
                printWriter.write("<th>学号</th>");
                printWriter.write("<th>姓名</th>");
                printWriter.write("<th>年龄</th>");
                printWriter.write("<th>性别</th>");
                printWriter.write("<th>地址</th>");
                printWriter.write("<th>电话号码</th>");
                printWriter.write("</tr>");
                printWriter.write("</thead>");
                printWriter.write("<tbody>");

                printWriter.write("<tr>");
                printWriter.write("<td>"+student.getSid()+"</td>");
                printWriter.write("<td>"+student.getSname()+"</td>");
                printWriter.write("<td>"+student.getSage()+"</td>");
                printWriter.write("<td>"+student.getSsex()+"</td>");
                printWriter.write("<td>"+student.getSaddress()+"</td>");
                printWriter.write("<td>"+student.getSphoneNum()+"</td>");
                printWriter.write("</tr>");
                printWriter.write("</tbody>");
                printWriter.write("</table>");
                printWriter.write("</body>");
                printWriter.write("</html>");
//                resp.getWriter().println("【学生信息为:】"+student);
            }else {
                resp.getWriter().println("学生信息添加失败!");
            }
        }else{
            resp.getWriter().println("学生信息已经存在,不能添加!");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2)删除学生信息的测试类

package cn.lqgx.www;

import entity.Student;
import service.StudentService;
import service.impl.StudentServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/StudentDel")
public class StudentDel extends HttpServlet {
    StudentService studentService=new StudentServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //通过response输出在控制台
        PrintWriter printWriter  =response.getWriter();
        int stuId= Integer.parseInt(request.getParameter("stuId"));
        int result=studentService.deleteStudent(stuId);
        if(result>0){
            printWriter.println("<h2>删除成功</h2>");
        }else{
            printWriter.println("<h2>学号不存在,无法删除</h2>");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

3)修改学生信息的测试类

package cn.lqgx.www;

import entity.Student;
import service.StudentService;
import service.impl.StudentServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//注解方式替换web.xml中的配置
@WebServlet("/update")
public class StudentUpdate extends HttpServlet {
    StudentService studentService=new StudentServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        int stuId= Integer.parseInt(req.getParameter("stuId"));
        String stuName = req.getParameter("stuName");
        int stuAge = Integer.parseInt(req.getParameter("stuAge"));
        String stuSex=req.getParameter("stuSex");
        String stuAddress=req.getParameter("stuAddress");
        String stuPhone=req.getParameter("stuPhone");

        PrintWriter printWriter=resp.getWriter();
        Student student=new Student(stuId,stuName,stuAge,stuSex,stuAddress,stuPhone);
        System.out.println(student);
        Student student1=studentService.selectStudent(stuId,stuName);
        if(student1!=null){
            int num=studentService.updateStudent(student);
            if(num>0){
//                resp.getWriter().println("学生信息添加成功!");
                resp.setContentType("text/html;charset=UTF-8");
                printWriter.write("<html lang=\"en\">");
                printWriter.write("<head>");
                printWriter.write("<meta charset=\"UTF-8\">");
                printWriter.write("<title>Title</title>");
                printWriter.write("<style>");
                printWriter.write("td{width:200px;height:45px;line-height:45px;text-align:center;}");
                printWriter.write("table tr:nth-child(odd){background:green;}");
                printWriter.write("table tr:nth-child(even){background:#FE5F97;}");
                printWriter.write("th{height:40px;line-height:40px;text-align:center;background:white;}");
                printWriter.write("caption{height:45px;line-height:45px;text-align:center;}");
                printWriter.write("</style>");
                printWriter.write("</head>");
                printWriter.write("<body>");
                printWriter.write("<table border=\"1\" width=\"100%\" cellspacing=\"0\">");
                printWriter.write("<caption align=\"top\">修改后的学生信息</caption>");
                printWriter.write("<thead>");
                printWriter.write("<tr>");
                printWriter.write("<th>学号</th>");
                printWriter.write("<th>姓名</th>");
                printWriter.write("<th>年龄</th>");
                printWriter.write("<th>性别</th>");
                printWriter.write("<th>地址</th>");
                printWriter.write("<th>电话号码</th>");
                printWriter.write("</tr>");
                printWriter.write("</thead>");
                printWriter.write("<tbody>");

                printWriter.write("<tr>");
                printWriter.write("<td>"+student.getSid()+"</td>");
                printWriter.write("<td>"+student.getSname()+"</td>");
                printWriter.write("<td>"+student.getSage()+"</td>");
                printWriter.write("<td>"+student.getSsex()+"</td>");
                printWriter.write("<td>"+student.getSaddress()+"</td>");
                printWriter.write("<td>"+student.getSphoneNum()+"</td>");
                printWriter.write("</tr>");
                printWriter.write("</tbody>");
                printWriter.write("</table>");
                printWriter.write("</body>");
                printWriter.write("</html>");
//                resp.getWriter().println("【学生信息为:】"+student);
            }else {
                resp.getWriter().println("学生信息修改失败!");
            }
        }else{
            resp.getWriter().println("学生信息不存在,不能修改!");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

4)学生登陆的测试类

package cn.lqgx.www;

import entity.Student;
import service.StudentService;
import service.impl.StudentServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/StudentLogin")
public class StudentLogin extends HttpServlet {
    StudentService studentService=new StudentServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //通过response输出在控制台
        PrintWriter printWriter  =response.getWriter();
       int stuId= Integer.parseInt(request.getParameter("stuId"));
       String stuName= request.getParameter("stuName");
       Student student=studentService.selectStudent(stuId,stuName);
        if(student!=null){
            printWriter.println("<h2>登录成功</h2>");
        }else{
            printWriter.println("<h2>姓名或者学号错误,无法登录</h2>");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

5)查询所有学生信息的测试类

package cn.lqgx.www;

import entity.Student;
import service.StudentService;
import service.impl.StudentServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
@WebServlet("/show")
public class StudentShow extends HttpServlet {
    StudentService studentService=new StudentServiceImpl();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Student> studentList = studentService.selectAllStudents();
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        PrintWriter printWriter=resp.getWriter();
        resp.setContentType("text/html;charset=UTF-8");
        printWriter.write("<html lang=\"en\">");
        printWriter.write("<head>");
        printWriter.write("<meta charset=\"UTF-8\">");
        printWriter.write("<title>Title</title>");
        printWriter.write("<style>");
        printWriter.write("td{width:200px;height:45px;line-height:45px;text-align:center;}");
        printWriter.write("table tr:nth-child(odd){background:green;}");
        printWriter.write("table tr:nth-child(even){background:#FE5F97;}");
        printWriter.write("th{height:40px;line-height:40px;text-align:center;background:white;}");
        printWriter.write("caption{height:45px;line-height:45px;text-align:center;}");
        printWriter.write("</style>");
        printWriter.write("</head>");
        printWriter.write("<body>");
        printWriter.write("<table border=\"1\" width=\"100%\" cellspacing=\"0\">");
        printWriter.write("<caption align=\"top\">所有学生信息</caption>");
        printWriter.write("<thead>");
        printWriter.write("<tr>");
        printWriter.write("<th>学号</th>");
        printWriter.write("<th>姓名</th>");
        printWriter.write("<th>年龄</th>");
        printWriter.write("<th>性别</th>");
        printWriter.write("<th>地址</th>");
        printWriter.write("<th>电话号码</th>");
        printWriter.write("</tr>");
        printWriter.write("</thead>");
        printWriter.write("<tbody>");

        for (int i = 0; i < studentList.size(); i++) {
            printWriter.write("<tr>");
            printWriter.write("<td>"+studentList.get(i).getSid()+"</td>");
            printWriter.write("<td>"+studentList.get(i).getSname()+"</td>");
            printWriter.write("<td>"+studentList.get(i).getSage()+"</td>");
            printWriter.write("<td>"+studentList.get(i).getSsex()+"</td>");
            printWriter.write("<td>"+studentList.get(i).getSaddress()+"</td>");
            printWriter.write("<td>"+studentList.get(i).getSphoneNum()+"</td>");
            printWriter.write("</tr>");
        }
        printWriter.write("</tbody>");
        printWriter.write("</table>");
        printWriter.write("</body>");
        printWriter.write("</html>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

【3】HTML+CSS+JS 实现页面编写

  对应java中操作学生信息的各个测试类中,我们在各个类中写了@WebServlet 注解的形式,将Servlet测试类与HTML页面实了现数据的交互。

1、学生注册页面(新增学生)

1)学生信息注册页面HTML编写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
    <link rel ="stylesheet"  href="css/newstu.css"/>
    <script src="js/jQuery-3.6.1.js"></script>
    <script src="js/newstu.js"></script>
    <style>
        h2{
            margin-left: 45%;
        }
        .father{
            /*background: aquamarine;*/
            background-image: url("img/1.gif");
            background-repeat: round;
            color: greenyellow;
        }
        .btnInput{
            margin-left: 42%;
            margin-bottom: -20px;
            padding: 3px;
            width: 100px;
            background-image: url("img/1.gif");
            color: salmon;
        }
        span{
            color: rgba(173,255,47,40%);;
        }
    </style>
</head>
<body>
<div class="father">
<!--    <img src="img/1.gif">-->
    <div>
        <h2>注 册</h2>
    </div>
    <div>
        <form action="student" method="post">
            <p>学号:<input type="text" name="stuId"/><span></span></p>
            <p>姓名:<input type="text" name="stuName"/><span></span></p>
            <p>年龄:<input type="text" name="stuAge"/><span></span></p>
            <p>性别:
                <input type="radio" name="stuSex" value="" checked/><input type="radio" name="stuSex" value=""/></p>
            <p>住址:<input type="text" name="stuAddress"/></p>
            <p>手机号码:<input type="text" name="stuPhone"/><span></span></p>
            <p><input class="btnInput" type="submit" value="提     交"/></p>
        </form>
    </div>
</div>
</body>
</html>

2)新增学生的CSS样式

*{
	margin: 0;
	padding: 0;
}

.father{
	border: 1px solid #F00;
	width: 500px;
	margin: 50px auto;
	padding: 20px;
}

.father>div h2{
	margin-bottom: 10px;
}

p{
	margin-bottom: 10px;
}

span{
	margin-left: 10px;
	color: #ccc;
	font-size: 10px;
}

input{
	border-color: #ccc;
	outline: none;
}

.err{
	color: #f00;
}

.right{
	color: #0f0;
}

3)新增学生的JS文件

  从下图结构中可知,需要添加一个jQuery,我这边网上下载的jQuery-3.6.1.js,添加到js目录中,然后创建一个newstu.js文件。

在这里插入图片描述

  newstu.js文件

$(function() {
	//给学号标签注册获得焦点事件
	$('input').eq(0).focus(function() {
		//给其后面的span标签插入学号的提示信息
		$('span').eq(0).text('学号由数字组成,长度8位')
		$('input').eq(0).css('border-color', '#00f');
		$('span').eq(0).css('color', '#ccc');
	});

	//给学号标签注册失去焦点事件
	$('input').eq(0).blur(function() {
		$('input').eq(0).css('border-color', '#CCC');
		//定义学号内容的正则表达式
		var patter = /[^0-9]/g;

		//获取你在学号框中输入的内容是否为空
		var result1 = $('input').eq(0).val();
		//对学号内容进行非空判断
		if (result1.length == 0) {
			$('span').eq(0).text('学号不能为空');
			$('span').eq(0).css('color', '#f00');
		} else if (result1.length !=8) {
			$('span').eq(0).text('学号长度为8位');
			$('span').eq(0).css('color', '#f00');
		} else if (patter.test(result1)) { //当你输入的学号内容是非法字符的时候,给出内容组成不合法提示
			$('span').eq(0).text('学号只能由数字组成');
			$('span').eq(0).css('color', '#f00');
		} else {
			show(0);
		}

	});

	//姓名框获得焦点,给出提示,中文组成,长度为2-4位
	$('input').eq(1).focus(function() {
		//给其后面的span标签插入账号的提示信息
		$('span').eq(1).text('中文组成,长度为2-4位')
		$('input').eq(1).css('border-color', '#00f');
		$('span').eq(1).css('color', '#ccc');
	});

	//姓名框失去焦点
	$('input').eq(1).blur(function() {
		$('input').eq(1).css('border-color', '#CCC');
		//定义姓名内容的正则表达式
		var patter0 = /[\u4e00-\u9fa5]/g;
		//获取你在姓名框中输入的内容是否为空
		var result2 = $('input').eq(1).val();
		//对内容进行非空判断
		if (result2.length == 0) {
			$('span').eq(1).text('姓名不能为空');
			$('span').eq(1).css('color', '#f00');
		} else if (result2.length < 2 || result2.length > 4) {
			$('span').eq(1).text('姓名长度为2-4位');
			$('span').eq(1).css('color', '#f00');
		} else if (!patter0.test(result2)) { //当你输入的内容是非法字符的时候,给出内容组成不合法提示
			$('span').eq(1).text('姓名只能由中文组成');
			$('span').eq(1).css('color', '#f00');
		} else {
			show(1);
		}

	});

	//年龄框获得焦点,给出提示“由数字组成,数字范围16~28”
	$('input').eq(2).focus(function() {
		//给其后面的span标签插入账号的提示信息
		$('span').eq(2).text('由数字组成,数字范围16~28')
		$('input').eq(2).css('border-color', '#00f');
		$('span').eq(2).css('color', '#ccc');
	});

	//年龄框失去焦点
	$('input').eq(2).blur(function() {
		$('input').eq(2).css('border-color', '#CCC');
		//获取你在年龄框中输入的内容是否为空
		var result3 = $('input').eq(2).val();
		//年龄正则表达式
		var patter1 = /^((1?[6-9])|(2?[0-8]))$/;
		//对年龄内容进行非空判断
		if (result3.length == 0) {
			$('span').eq(2).text('年龄不能为空');
			$('span').eq(2).css('color', '#f00');
		} else if (!patter1.test(result3)) {
			$('span').eq(2).text('年龄只能由数字组成,数字范围16~28');
			$('span').eq(2).css('color', '#f00');
		} else {
			show(2);
		}

	});
	//手机号码输入框获得焦点,给出提示“请输入11位的手机号码”
	$('input').eq(6).focus(function() {
		//给其后面的span标签插入账号的提示信息
		$('span').eq(3).text('请输入11位的手机号码')
		$('input').eq(6).css('border-color', '#00f');
		$('span').eq(3).css('color', '#ccc');
	});

	//手机号码输入框失去焦点,进行非空验证,非空验证通过后进行手机号码格式验证(正则表达式),通过格式验证后,给出手机号码正确
	$('input').eq(6).blur(function() {

		$('input').eq(6).css('border-color', '#CCC');
		//获取你在手机号码中输入的内容是否为空
		var result4 = $('input').eq(6).val();
		//手机号码正则表达式
		var patter2 = /^1[3456789]\d{9}$/;
		//对手机号码内容进行非空判断
		if (result4.length == 0) {
			$('span').eq(3).text('手机号码不能为空');
			$('span').eq(3).css('color', '#f00');
		} else if (!patter2.test(result4)) {
			$('span').eq(3).text('手机号码格式错误');
			$('span').eq(3).css('color', '#f00');
		} else {
			show(3);
		}

	});

	//正确显示样式方法
	function show(num) {
		$('span').eq(num).text('✔');
		$('span').eq(num).css('color', '#5FDDA4');
	};
});

2、删除学生信息

1)删除学生页面HTML编写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>删除学生信息</title>
    <link rel="stylesheet" href="css/delete.css">
</head>
<body>
<div>
    <h2>根据学号删除:</h2>
    <form action="StudentDel" method="post">
        <p>学号:<input type="text" name="stuId"/><input class="btnInput" type="submit" value="删除"/></p>
    </form>
</div>
</body>
</html>

2)删除学生页面CSS编写

div{
    border: 1px solid #F00;
    width: 400px;
    margin: 50px auto;
    padding: 20px;
    background-image: url("../img/1.gif");
    background-repeat: round;
    color: greenyellow;
}
input{
    border-color: #ccc;
    outline: none;
}
.btnInput{
    margin-left: 10px;
    padding: 3px;
    width: 100px;
    background-image: url("../img/1.gif");
    color: salmon;
}

3、修改学生信息

1)修改学生页面HTML编写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改页面</title>
    <link rel ="stylesheet"  href="css/update.css"/>
    <script src="js/jQuery-3.6.1.js"></script>
    <script src="js/newstu.js"></script>
    <style>
        h2{
            margin-left: 45%;
        }
        .father{
            /*background: aquamarine;*/
            background-image: url("img/1.gif");
            background-repeat: round;
            color: greenyellow;
        }
        .btnInput{
            margin-left: 42%;
            margin-bottom: -20px;
            padding: 3px;
            width: 100px;
            background-image: url("img/1.gif");
            color: salmon;
        }
        span{
            color: rgba(173,255,47,40%);;
        }
    </style>
</head>
<body>
<div class="father">
<!--    <img src="img/1.gif">-->
    <div>

        3
        <h2>修改学生信息</h2>
    </div>
    <div>
        <form action="update" method="post">
            <p>学号:<input type="text" name="stuId"/><span></span></p>
            <p>姓名:<input type="text" name="stuName"/><span></span></p>
            <p>年龄:<input type="text" name="stuAge"/><span></span></p>
            <p>性别:
                <input type="radio" name="stuSex" value="" checked/><input type="radio" name="stuSex" value=""/></p>
            <p>住址:<input type="text" name="stuAddress"/></p>
            <p>手机号码:<input type="text" name="stuPhone"/><span></span></p>
            <p><input class="btnInput" type="submit" value="确认修改"/></p>
        </form>
    </div>
</div>
</body>
</html>

2)修改学生页面CSS编写

*{
	margin: 0;
	padding: 0;
}
h2{
	margin-left: 45%;
}
.father{
	border: 1px solid #F00;
	width: 500px;
	margin: 50px auto;
	padding: 20px;
	background-image: url("../img/1.gif");
	background-repeat: round;
	color: greenyellow;
}

.father>div h2{
	margin-bottom: 10px;
}

p{
	margin-bottom: 10px;
}

span{
	margin-left: 10px;
	color: #ccc;
	font-size: 10px;
	color: rgba(173,255,47,40%);
}

input{
	border-color: #ccc;
	outline: none;
}

.err{
	color: #f00;
}

.right{
	color: #0f0;
}

.btnInput{
	margin-left: 42%;
	margin-bottom: -20px;
	padding: 3px;
	width: 100px;
	background-image: url("../img/1.gif");
	color: salmon;
}

4、学生登陆(查询单个学生)

1)学生登陆页面HTML编写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生登陆</title>
    <link rel="stylesheet" href="css/login.css">
</head>
<body>
  <div>
    <h2>欢迎登陆</h2>
    <form action="StudentLogin" method="post">
        <p>学号:<input type="text" name="stuId"/></p>
        <p>姓名:<input type="text" name="stuName"/></p>
        <p><input class="btnInput" type="submit"/></p>
    </form>
  </div>
</body>
</html>

2)学生登陆页面CSS编写

div{
    border: 1px solid #F00;
    width: 400px;
    margin: 50px auto;
    padding: 20px;
    background-image: url("../img/1.gif");
    background-repeat: round;
    color: greenyellow;
}
input{
    border-color: #ccc;
    outline: none;
}
.btnInput{
    margin-left: 42%;
    margin-bottom: -20px;
    padding: 3px;
    width: 100px;
    background-image: url("../img/1.gif");
    color: salmon;
}

5、查询所有学生信息页面

1)查询所有学生页面HTML编写代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询所有学生</title>
    <link rel="stylesheet"href="css/selectAll.css">
</head>
<body>
<form action="show" method="post">

    <h1>学生信息查询系统</h1>
  <input type="submit" value="查询所有学生信息"/>
</form>
</body>
</html>

2)查询所有学生的CSS样式

form{
    /*background: aquamarine;*/
    background-image: url("../img/1.gif");
    background-repeat: round;
    color: greenyellow;
    width: 400px;
    height: 300px;
    margin: 50px auto;
    padding: 10px;
}
h1{
    margin-left: 70px;
    margin-top: 20px;
}
input{
    padding: 3px;
    margin-left: 140px;
    margin-top: 60px;
    background: rgba(255,255,255,50%);
    color: lime;
}

⛳️ 测试效果

1、注册学生信息

在这里插入图片描述
提交表单后显示的界面:
在这里插入图片描述
2、删除学生信息
在这里插入图片描述
提交表单后显示的界面:
在这里插入图片描述
3、修改学生信息
在这里插入图片描述
提交表单后显示的界面:
在这里插入图片描述
4、学生登陆信息
在这里插入图片描述
提交表单后显示的界面:
在这里插入图片描述

5、查询所有学生信息
在这里插入图片描述
点击查询所有学生信息按钮后,在网页中的显示效果如下:
在这里插入图片描述

⛳️ 项目源码分享

链接:https://download.csdn.net/download/hh867308122/87261897


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开关电源环路稳定性分析(07)——电压型补偿网络

大家好&#xff0c;这里是大话硬件。 在前面的文章中&#xff0c;已经分析了控制级和功率级的传递函数&#xff0c;这一节咱们来分析反馈级的传递函数。 在分析反馈网络的传递函数之前&#xff0c;我想&#xff0c;应该有几个问题需要做一下介绍。 1. 功率级和控制级传递函数…

游戏开发41课 unity shader 优化

Shader有专门语言用来编写&#xff0c;常见类型有DirectX的HLSL&#xff0c;OpenGL的GLSL以及NVIDIA的Cg&#xff0c;为了优化shader代码&#xff0c;我们需要知道代码从被编写到被执行的流程&#xff0c;知道什么样的代码是不好的。 注意点&#xff1a; 避免if、switch分支语…

关于前端低代码的一些个人观点

2022&#xff0c;低代码彻底火了&#xff0c;甚至火到没有点相关经验&#xff0c;都不好意思出去面试的程度&#xff0c;堪称lowcode“元年”。在整个互联网大裁员的背景下&#xff0c;无论你是否相信它是降本提效的利器&#xff0c;彷佛都不重要了。因为行业趋势总是这般浩浩荡…

为什么其他地方的智能网联汽车产业都跟着北京模式走?

随着新一轮科技革命和产业变革加速演进&#xff0c;智能网联汽车已成为全球汽车产业发展的战略方向&#xff0c;是全球大国竞争的重要科技和产业领域。在技术路线层面&#xff0c;我国率先提出车路云融合的智能网联汽车“中国方案”&#xff0c;该路线已逐步成为国际共识。在产…

大学生端午节网页作业制作 学生端午节日网页设计模板 传统文化节日端午节静态网页成品代码下载 端午节日网页设计作品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【云原生】二进制k8s集群(下)部署高可用master节点

内容预知 本次部署说明 本次部署的架构组件 1. 新master节点的搭建 1.1 对master02 进行初始化配置 1.2 将master01的配置移植到master02 2.负载均衡的部署 3. k8s的web UI界面的搭建 二进制部署k8s集群部署的步骤总结 &#xff08;1&#xff09;k8s的数据存储中中心的搭建…

Spring项目建立过程

1&#xff0c;导入依赖 导入Spring依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency> 2&#xff0c;实现部分 2.1 自动给我们请求返回一个登录页面&am…

【计算机网络】物理层

物理层考虑的是在各种传输媒体上传输比特流&#xff0c;而不是指具体的传输媒体。物理层作用是尽可能地屏蔽媒体之间的差异。 物理层的主要任务是描述与传输媒体有关的一些特性&#xff1a; 机械特性、电气特性、功能特性、过程特性。 数据通信系统可分为&#xff1a;源系统、…

攻击类型分析

攻击类型分析 2018 年&#xff0c;主要的攻击类型 1 为 SYN Flood&#xff0c;UDP Flood&#xff0c;ACK Flood&#xff0c;HTTP Flood&#xff0c;HTTPS Flood&#xff0c; 这五大类攻击占了总攻击次数的 96&#xff05;&#xff0c;反射类攻击不足 3%。和 2017 年相比&…

Vue系列之组件化

文章の目录一、组件化开发思想1、现实中的组件化思想体现2、编程中的组件化思想体现3、组件化规范: Web Components二、组件注册1、全局组件注册语法2、组件语法3、组件注册注意事项4、局部组件注册写在最后一、组件化开发思想 1、现实中的组件化思想体现 标准分治重用组合 2…

k8s网络策略

网络策略介绍 网络策略官方文档&#xff1a;https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/ 网络策略是控制Pod之间如何进行通信的规则&#xff0c;它使用标签来筛选Pod&#xff0c;并在该组Pod之上定义规则来定义管控其流量&#xff0c;…

何为Spring Batch?怎么玩?

何为批处理&#xff1f; 何为批处理&#xff0c;大白话讲就是将数据分批次进行处理的过程。比如&#xff1a;银行对账&#xff0c;跨系统数据同步等。这些处理逻辑一般来说都不需要人工参与就能够自动高效地进行复杂的数据处理与分析。 典型批处理特点&#xff1a; 自动执行&…

ubuntu下使用vscode开发golang程序,从控制台到简单web程序

最近项目要使用go语言开发一个web程序&#xff0c;由于是第一次使用go开发&#xff0c;就将开发过程中的点滴做个记录吧。 1.安装go 1.1 安装 Ubuntu下安装go语言开发运行环境有如下两种方法 &#xff08;1&#xff09;方法一&#xff1a;使用命令 sudo apt install golan…

天天刷 B站,了解他们的评论系统是如何设计的吗?

今天给大家分享 B站的评论系统的 组件化、平台化建设 通过持续演进架构设计&#xff0c;管理不断上升的系统复杂度&#xff0c;从而更好地满足各类用户的需求。 基础功能模块 评论的基础功能模块是相对稳定的。 1. 发布评论&#xff1a;支持无限盖楼回复。 2. 读取评论&am…

异步编程解决方案 Promise

1. 回调地狱 2. Promise 的使用 3. Promise 的状态 4. Promise 的结果 5. Promise 的 then 方法 6. Promise 的 catch 方法 7. 回调地狱的解决方案 1. 回调地狱 回调地狱: 在回调函数中嵌套回调函数 因为 ajax 请求是异步的&#xff0c;所以想要使用上一次请求的结果作为请求…

ADI Blackfin DSP处理器-BF533的开发详解21:RTC实时时钟的原理及应用(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 ADSP-BF53x 处理器上集成了一个实时时钟&#xff08;RTC&#xff09;模块&#xff0c;板卡上设计了一个专门用于 RTC 时钟源的晶体32.7…

如何修复错误:无法下载 metadata repo appstream

如何修复错误&#xff1a;无法下载 metadata repo appstream 如果您出于某种原因仍在积极使用CentOS 8&#xff0c;您可能在尝试更新系统或只是安装软件包时遇到以下错误。 Error: Failed to download metadata for repo appstream: Cannot prepare internal mirrorlist: No …

Linux内存管理

平时我们说计算机的“计算”两个字&#xff0c;其实说的就是两方面&#xff0c;第一&#xff0c;进程和线程对于CPU的使用&#xff1b;第二&#xff0c;对于内存的管理。——这个是对计算机的理解的两个大方面&#xff0c;面试中问到的场景设计题可以尝试从这两个角度出发。 可…

Gradle学习笔记之项目生命周期及settings文件

文章目录Gradle项目的生命周期settings文件Gradle项目的生命周期 Gradle项目的生命周期分为初始化->配置->执行三步&#xff0c;如下图所示&#xff1a; 初始化阶段主要目的是初始化构建&#xff0c;分为执行初始化脚本和执行设置脚本两步&#xff0c;前者在每个项目构…

多线程的实现

目录 进程和线程 并发和并行 继承实现Runnable接口的Thread类实现的多线程 实现Runnable接口创建线程类 线程常用方法 进程和线程 进程&#xff1a;一个程序的启动就可以抽象化为一个进程 线程&#xff1a;线程是由进程开启的&#xff0c;一个进程可以创建多个线程&#x…