前后端+数据库的项目实战--学生信息管理系统-易
一、创建前端 student.html
二、js文件 student.js
三、后端 servlet【主要是post/get函数里的代码】
searchstudent.java
AddStudent.java
DeleteStudent.java
SearchById.java
UpdateStudent.java
四、数据库
五、实现效果
如何把数据库中的信息经过后端显示到前端页面呢?
一、创建前端 student.html
注意外引js文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生信息管理系统</title>
<script src="js/jQUery.min.js"></script>
<script src="js/student.js" defer></script>
<style>
/* 全局样式 */
body {
font-family: 'Arial', sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
}
/* 按钮样式 */
.button {
padding: 10px 20px;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s, transform 0.3s;
}
.button:hover {
transform: scale(1.05);
}
.addBtn {
background-color: #28a745;
color: #fff;
margin-bottom: 20px;
}
.addBtn:hover {
background-color: #218838;
}
/* 表格样式 */
table {
width: 100%;
max-width: 800px;
border-collapse: collapse;
background-color: #fff;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
margin-bottom: 20px;
}
thead {
background-color: #007bff;
color: #fff;
}
th, td {
padding: 12px;
text-align: center;
border-bottom: 1px solid #ddd;
}
tbody tr:nth-child(even) {
background-color: #f9f9f9;
}
tbody tr:hover {
background-color: #e9ecef;
}
td button {
padding: 5px 10px;
border: none;
border-radius: 5px;
font-size: 14px;
cursor: pointer;
margin: 0 5px;
}
td button:nth-child(1) {
background-color: #ffc107;
color: #333;
}
td button:nth-child(1):hover {
background-color: #e0a800;
}
td button:nth-child(2) {
background-color: #dc3545;
color: #fff;
}
td button:nth-child(2):hover {
background-color: #a71d2a;
}
/* 弹窗样式 */
.modal {
width: 300px;
padding: 20px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
display: none;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 1000;
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.modal input[type='text'] {
width: 100%;
padding: 10px;
margin-bottom: 10px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
}
.modal .button {
margin-right: 10px;
}
.modal .button:last-child {
margin-right: 0;
}
/* 背景遮罩 */
.overlay {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 700;
}
</style>
</head>
<body>
<input type='button' value='添加' class='addBtn button'>
<div class="overlay"></div>
<table>
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<!-- 数据行 -->
</tbody>
</table>
<div class='addModel modal'>
<h3>添加学生信息</h3>
<div>
姓名:<input type='text' class='name'>
</div>
<div>
年龄:<input type='text' class='age'>
</div>
<div>
性别:<input type='text' class='sex'>
</div>
<div>
<input type='button' value='添加' class='add button'>
<input type='button' value='取消' class='back button'>
</div>
</div>
<div class='updateModel modal'>
<h3>修改学生信息</h3>
<div>+
姓名:<input type='text' class='u_name'>
</div>
<div>
年龄:<input type='text' class='u_age'>
</div>
<div>
性别:<input type='text' class='u_sex'>
</div>
<div>
<input type='button' value='修改' class='u_update button'>
<input type='button' value='取消' class='u_back button'>
</div>
</div>
<script>
// 示例:显示添加弹窗
document.querySelector('.addBtn').addEventListener('click', function() {
document.querySelector('.addModel').style.display = 'block';
document.querySelector('.overlay').style.display = 'block';
});
// 示例:隐藏弹窗
document.querySelectorAll('.back, .u_back').forEach(button => {
button.addEventListener('click', function() {
document.querySelector('.addModel').style.display = 'none';
document.querySelector('.updateModel').style.display = 'none';
document.querySelector('.overlay').style.display = 'none';
});
});
</script>
</body>
</html>
二、js文件 student.js
直接ajax模板+前端交互的js操作,绑定事件
get请求很容易,有地址即可一般用在查找上;get请求传参需要写到url中
post请求传参一般写到data中,可以混用
// 查找
$.ajax({
url: "SearchStudent", // 请求路径
type: "get", // 请求方式 get查找 post 添加,删除,修改
success: function(value) {
var arr = value.data;
for (var i = 0; i < arr.length; i++) {
$("tbody").append("<tr>" +
"<td>" + arr[i].id + "</td>" +
"<td>" + arr[i].name + "</td>" +
"<td>" + arr[i].age + "</td>" +
"<td>" + arr[i].sex + "</td>" +
"<td>" +
"<input type='button' value='修改' class='u_update' index='" + arr[i].id + "'>" +
"<input type='button' value='删除' class='delete' index='" + arr[i].id + "'>" +
"</td>" +
"</tr>");
}
}, // 请求成功的回调函数
error: function() {
alert("请求失败啦");
} // 请求失败的回调函数
});
// 删除
$("tbody").on("click", ".delete", function() {
var id = $(this).attr("index");
$.ajax({
url: "DeleteStudent", // 请求路径
type: "post", // 请求方式 get post
data: {
deleteId: id
}, // 参数域
success: function(value) {
alert(value);
// 页面刷新
location.reload();
}, // 请求成功的回调函数
error: function() {
alert("请求失败啦");
} // 请求失败的回调函数
});
});
// 添加模块显示
$(".addBtn").on("click", function() {
$(".addModel").css("display", "block");
});
// 添加模块隐藏
$(".back").on("click", function() {
$(".addModel").css("display", "none");
});
// 添加
$(".add").on("click", function() {
var name = $(".name").val().trim();
var sex = $(".sex").val().trim();
var age = $(".age").val().trim();
$.ajax({
url: "AddStudent", // 请求路径
type: "post", // 请求方式 get post
data: {
addName: name,
addSex: sex,
addAge: age,
}, // 参数域
success: function(value) {
alert(value);
// 页面刷新
location.reload();
}, // 请求成功的回调函数
error: function() {
alert("请求失败啦");
} // 请求失败的回调函数
});
});
// 回显
$("tbody").on("click", ".u_update", function() {
$(".updateModel").css("display", "block");
// 获取id
var id = $(this).attr("index");
$.ajax({
url: "SearchById",
type: "get",
data: {
id: id,
},
success: function(value) {
var obj = value.data[0];
$(".u_update").attr("index", obj.id);
$(".u_name").val(obj.name);
$(".u_sex").val(obj.sex);
$(".u_age").val(obj.age);
}, // 请求成功的回调函数
error: function() {
alert("请求失败啦");
} // 请求失败的回调函数
});
});
// 修改模块隐藏
$(".u_back").on("click", function() {
$(".updateModel").css("display", "none");
});
// 修改
$(".u_update").on("click", function() {
var id = $(".u_update").attr("index");
var name = $(".u_name").val();
var age = $(".u_age").val();
var sex = $(".u_sex").val();
$.ajax({
url: "UpdateServlet",
type: "post",
data: {
id: id,
name: name,
age: age,
sex: sex,
},
success: function(value) {
alert(value);
location.reload();
}, // 请求成功的回调函数
error: function() {
alert("请求失败啦");
} // 请求失败的回调函数
});
});
三、后端 servlet【主要是post/get函数里的代码】
servlet与前端进行数据交互get/post
创建url请求路径SearchStudent.java、AddStudent.java、DeleteStudent.java,在这里写后端操作,注意设置的数据格式和响应语句,get请求返回的数据返回到前端的value中
searchstudent.java
package com.lxy.servlet;
import java.io.IOException;
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 com.lxy.db.MysqlUtil;
/**
* Servlet implementation class SearchStudent
*/
@WebServlet("/SearchStudent")
public class SearchStudent extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SearchStudent() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查找
String sql = "select * from student";
String[] colums = {"id","name","age","sex"};
String res = MysqlUtil.getJsonBySql(sql, colums);
//设置后端给前端返回的为json格式的数据
response.setContentType("text/json;charset=utf-8");
//给前端响应数据
response.getWriter().write(res);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
AddStudent.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收参数
String name = request.getParameter("addName");
String sex = request.getParameter("addSex");
String age = request.getParameter("addAge");
//添加
String sql = "insert into student(name,age,sex) values(\""+name+"\","+age+",\""+sex+"\")";
int num = MysqlUtil.add(sql);
String res = "添加失败";
if(num>0) {
res="添加成功";
}
//设置数据编码
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
//数据返回
response.getWriter().write(res);
}
DeleteStudent.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收参数
String id = request.getParameter("deleteId");
//删除
String sql = "delete from student where id = "+id;
int num = MysqlUtil.del(sql);
String res = "删除失败";
if(num>0) {
res="删除成功";
}
//设置数据编码
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.getWriter().write(res);
}
SearchById.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String sql = "select * from student where id = "+id;
String[] colums = {"id","name","sex","age"};
String res = MysqlUtil.getJsonBySql(sql, colums);
response.setContentType("text/json;charset=utf-8");
response.getWriter().write(res);
}
UpdateStudent.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String age = request.getParameter("age");
String sql = "update student set name=\""+name+"\",age="+age+",sex=\""+sex+"\" where id ="+id;
System.out.println(sql);
int num = MysqlUtil.add(sql);
String res = "修改失败";
if(num>0) {
res="修改成功";
}
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.getWriter().write(res);
}
四、数据库
五、实现效果