JavaWeb实现的超级简陋的CRUD功能的项目,记录下来方便以后查看。
1.项目结构
2.数据库
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`sno` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`sname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`ssex` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '1',
`sage` int(11) NULL DEFAULT NULL,
`stel` char(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 132 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '2020032201', '张三', '1', 19, '18728394832');
INSERT INTO `student` VALUES (2, '2020032202', '李四', '2', 19, '18329108345');
INSERT INTO `student` VALUES (3, '2020032203', '王五', '1', 18, '18405812308');
INSERT INTO `student` VALUES (4, '2020032204', '赵六', '1', 19, '13019273792');
INSERT INTO `student` VALUES (5, '2020032205', '孙七', '2', 18, '18732914501');
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('wangwu', '123');
SET FOREIGN_KEY_CHECKS = 1;
3.bean
User.java:
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Student.java:
public class Student {
private String sno;
private String sname;
private String ssex;
private Integer sage;
private String stel;
public Student() {
}
public Student(String sno, String sname, String ssex, Integer sage, String stel) {
this.sno = sno;
this.sname = sname;
this.ssex = ssex;
this.sage = sage;
this.stel = stel;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSsex() {
return ssex;
}
public void setSsex(String ssex) {
this.ssex = ssex;
}
public Integer getSage() {
return sage;
}
public void setSage(Integer sage) {
this.sage = sage;
}
public String getStel() {
return stel;
}
public void setStel(String stel) {
this.stel = stel;
}
}
4.dao
UserDao接口:
public interface UserDao {
User find(String name);
int insertUser(User user);
}
UseDaoImpl.java:
public class UserDaoImpl extends DruidUtil implements UserDao {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
/**
* 根据用户名查找密码
* @param name
* @return
*/
@Override
public User find(String name) {
User user = new User();
try {
conn = getConnection();
ps = conn.prepareStatement("select password from users where username=?");
ps.setString(1,name);
rs = ps.executeQuery();
while(rs.next()){
user.setUsername(name);
user.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn,ps,rs);
}
return user;
}
/**
* 新增用户
* @param user
* @return
*/
@Override
public int insertUser(User user) {
int num = 0;
try {
conn = getConnection();
ps = conn.prepareStatement("insert into users values(?,?)");
ps.setString(1,user.getUsername());
ps.setString(2,user.getPassword());
num = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn,ps);
}
return num;
}
}
StudentDao接口:
public interface StudentDao {
public List<Student> getAll();
int insertStudent(Student student);
int deleteStudent(String sno);
int updateStudent(Student student);
Student findStu(String sno);
}
StudentDaoImpl.java:
public class StudentDaoIml extends DruidUtil implements StudentDao {
Connection conn = null;
PreparedStatement ps = null;
Statement state = null;
ResultSet rs = null;
/**
* 列出所有学生信息
* @return
*/
@Override
public List<Student> getAll() {
List list = new ArrayList();
try {
conn = getConnection();
ps = conn.prepareStatement("select * from student");
rs = ps.executeQuery();
while(rs.next()){
Student student = new Student();
student.setSno(rs.getString("sno"));
student.setSname(rs.getString("sname"));
student.setSsex(rs.getString("ssex"));
student.setSage(rs.getInt("sage"));
student.setStel(rs.getString("stel"));
list.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(conn,ps,rs);
}
return list;
}
/**
* 增加学生
* @param student
* @return
*/
@Override
public int insertStudent(Student student) {
int num = 0;
try {
conn = getConnection();
ps = conn.prepareStatement("insert into student(sno,sname,ssex,sage,stel) values (?,?,?,?,?)");
ps.setString(1,student.getSno());
ps.setString(2,student.getSname());
ps.setString(3,student.getSsex());
ps.setInt(4,student.getSage());
ps.setString(5,student.getStel());
num = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn,ps);
}
return num;
}
/**
* 删除学生
* @param sno
* @return
*/
@Override
public int deleteStudent(String sno) {
int num = 0;
try {
conn = getConnection();
state = conn.createStatement();
num = state.executeUpdate("delete from student where sno=" + sno);
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn,ps);
}
return num;
}
/**
* 更新学生信息
* @param student
* @return
*/
@Override
public int updateStudent(Student student) {
int num = 0;
try {
conn = getConnection();
ps = conn.prepareStatement("update student set sname=?,ssex=?,sage=?,stel=? where sno=?");
ps.setString(1,student.getSname());
ps.setString(2,student.getSsex());
ps.setInt(3,student.getSage());
ps.setString(4,student.getStel());
ps.setString(5,student.getSno());
num = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn,ps);
}
return num;
}
/**
* 根据学号查找学生信息
* @param sno
* @return
*/
@Override
public Student findStu(String sno) {
Student student = new Student();
try {
conn = getConnection();
ps = conn.prepareStatement("select * from student where sno=?");
ps.setString(1,sno);
rs = ps.executeQuery();
while (rs.next()){
student.setSno(rs.getString("sno"));
student.setSname(rs.getString("sname"));
student.setSsex(rs.getString("ssex"));
student.setSage(rs.getInt("sage"));
student.setStel(rs.getString("stel"));
return student;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn,ps,rs);
}
return student;
}
}
5.service
UserService接口:
//service层主要定义业务逻辑,现阶段主要实现调取dao层
public interface UserService {
User find(String name);
int insertUser(User user);
}
UserServiceImpl.java:
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public User find(String name) {
return userDao.find(name);
}
@Override
public int insertUser(User user) {
return userDao.insertUser(user);
}
}
StudentService接口:
public interface StudentService {
public List<Student> getAll();
int insertStudent(Student student);
int deleteStudent(String sno);
int updateStudent(Student student);
Student findStu(String sno);
}
StudentServiceImpl.java:
public class StudentServiceImpl implements StudentService {
private StudentDao studentDao = new StudentDaoIml();
@Override
public List<Student> getAll() {
return studentDao.getAll();
}
@Override
public int insertStudent(Student student) {
return studentDao.insertStudent(student);
}
@Override
public int deleteStudent(String sno) {
return studentDao.deleteStudent(sno);
}
@Override
public int updateStudent(Student student) {
return studentDao.updateStudent(student);
}
@Override
public Student findStu(String sno) {
return studentDao.findStu(sno);
}
}
6.servlet
RegisterServlet.java:
@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
private UserService userService;
public RegisterServlet() {
userService = new UserServiceImpl();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
int num = userService.insertUser(user);
if(num>0){
resp.sendRedirect("index.jsp");
}else{
resp.sendRedirect("register.jsp");
}
}
}
LoginServlet.java:
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private UserService userService;
public LoginServlet() {
userService = new UserServiceImpl();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = userService.find(username);
String pwd = user.getPassword();
if(pwd.equals(password)){
HttpSession session = req.getSession();
session.setAttribute("username",username);
session.setAttribute("password",password);
session.setMaxInactiveInterval(60*30);
resp.sendRedirect(req.getContextPath()+"/gotostudentlist");
}else{
resp.sendRedirect("index.jsp");
}
}
}
LoginOutServlet.java:
@WebServlet("/loginout")
public class LoginOutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getSession().invalidate();//使session失效
resp.sendRedirect("index.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
StudentListServlet.java:
@WebServlet("/gotostudentlist")
public class StudentListServlet extends HttpServlet {
private StudentService studentService;
public StudentListServlet(){
studentService = new StudentServiceImpl();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Student> getAll = studentService.getAll();
//后台传递数据给前台
req.setAttribute("stulist",getAll);
req.getRequestDispatcher("/studentList.jsp").forward(req,resp);
}
}
AddStudentServlet.java:
@WebServlet("/addStudent")
public class AddStudentServlet extends HttpServlet {
private StudentService studentService;
public AddStudentServlet(){
studentService = new StudentServiceImpl();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
//获取输入框的值
String sno = req.getParameter("sno");
String sname = req.getParameter("sname");
String ssex = req.getParameter("ssex");
String sage = req.getParameter("sage");
String stel = req.getParameter("stel");
Student student = new Student();
student.setSno(sno);
student.setSname(sname);
student.setSsex(ssex);
student.setSage(Integer.parseInt(sage));
student.setStel(stel);
int num = studentService.insertStudent(student);
if(num>0){
resp.sendRedirect(req.getContextPath()+"/gotostudentlist");
}else{
resp.sendRedirect("studentAdd.jsp");
}
}
}
DeleteStudentServlet.java:
@WebServlet("/deleteStudent")
public class DeleteStudentServlet extends HttpServlet {
private StudentService studentService;
public DeleteStudentServlet(){
studentService = new StudentServiceImpl();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String sno = req.getParameter("sno");
studentService.deleteStudent(sno);
resp.sendRedirect(req.getContextPath()+"/gotostudentlist");
}
}
UpdateStudentServlet.java:
@WebServlet("/updateStudent")
public class UpdateStudentServlet extends HttpServlet {
private StudentService studentService;
public UpdateStudentServlet(){
studentService = new StudentServiceImpl();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
//获取输入框的值
String sno = req.getParameter("sno");
String sname = req.getParameter("sname");
String ssex = req.getParameter("ssex");
String sage = req.getParameter("sage");
String stel = req.getParameter("stel");
Student student = new Student(sno,sname,ssex,Integer.parseInt(sage),stel);
int num = studentService.updateStudent(student);
if(num>0){
resp.sendRedirect(req.getContextPath()+"/gotostudentlist");
}else{
resp.sendRedirect("studentUpdate.jsp");
}
}
}
下方是修改时根据学号链接跳转:
FindStudentBySnoServlet.java:
@WebServlet("/findStudentBySno")
public class FindStudentBySnoServlet extends HttpServlet {
private StudentService studentService;
public FindStudentBySnoServlet(){
studentService = new StudentServiceImpl();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String sno = req.getParameter("sno");
Student stu = studentService.findStu(sno);
req.setAttribute("student",stu);
req.getRequestDispatcher("studentUpdate.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
下方是根据学号查询学生信息:
SearchStudentBySnoServlet.java:
@WebServlet("/searchStuBySno")
public class SearchStudentBySnoServlet extends HttpServlet {
private StudentService studentService;
public SearchStudentBySnoServlet() {
studentService = new StudentServiceImpl();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String sno = req.getParameter("findstu");
Student stu = studentService.findStu(sno);
req.setAttribute("student",stu);
req.getRequestDispatcher("studentFindList.jsp").forward(req,resp);
}
}
7.其他
druid.properties:
url=jdbc:mysql://localhost:3306/mvc?useUnicode=true&characterEncoding=utf-8
username=root
password=123
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=10
minIdle=5
maxWait=3000
DruidUtil.java:
public class DruidUtil {
private static DataSource ds;
static {
try {
Properties ppt = new Properties();
ppt.load(DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
ds = DruidDataSourceFactory.createDataSource(ppt);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 从连接池中取出一个连接给用户
* @return
*/
public static Connection getConnection(){
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void close(Connection conn, Statement state, ResultSet rs){
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
close(conn,state);
}
public static void close(Connection conn,Statement state){
try {
state.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
LoginFilter.java:
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//处理乱码
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
request.setCharacterEncoding("utf-8");
//防止用户在未登录的情况下访问资源
String requestURI = request.getRequestURI();
Object username = request.getSession().getAttribute("username");
if(requestURI.contains("student")&&username==null){
response.sendRedirect("index.jsp");
}
//调取下一个过滤器,或者调用Servlet
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<filter>
<filter-name>f</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>f</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
8.jsp
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<h1>请登录</h1>
<form action="login" method="post">
用户名:<input type="text" name = "username"><br><br>
密码:<input type="password" name="password"><br><br>
<input type="submit" value="登录">
<input type="button" value="注册" οnclick=window.open("register.jsp")>
</form>
</body>
</html>
register.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册页面</title>
</head>
<body>
<h1>请注册</h1>
<form action="register" method="post">
用户名:<input type="text" name="username"><br><br>
密码:<input type="password" name="password"><br><br>
<input type="submit" value="注册">
<input type="button" value="登录" οnclick=window.open("index.jsp")>
</form>
</body>
</html>
studentList.jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>学生列表</title>
<style>
h1{
text-align: center;
}
table{
background: blanchedalmond;
width: 800px;
margin: 20px auto;
text-align: center;
}
td{
height: 40px;
}
tr:first-child{
font-weight: 700;
}
form{
width: 265px;
margin:20px auto;
}
#find{
width: 200px;
height: 30px;
}
#findinput1,#findinput2{
width: 60px;
height: 30px;
cursor: pointer;
background: blanchedalmond;
}
#findinput2{
margin: 10px 100px;
}
div{
float:right;
}
</style>
</head>
<body>
<h1>学生信息</h1>
<div>
当前登录用户:${sessionScope.username}
<a href="loginout">退出</a>
</div>
<form action="searchStuBySno" method="post">
<input id="find" type="text" name="findstu" placeholder="输入学号">
<input id="findinput1" type="submit" value="查询">
</form>
<table border="1">
<tr>
<td>学号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>电话号码</td>
<td>操作</td>
</tr>
<c:forEach items="${stulist}" var="stu">
<tr>
<td>${stu.sno}</td>
<td>${stu.sname}</td>
<td>${stu.ssex==1?"男":"女"}</td>
<td>${stu.sage}</td>
<td>${stu.stel}</td>
<td>
<a href="deleteStudent?sno=${stu.sno}">删除</a>
<a href="findStudentBySno?sno=${stu.sno}">修改</a>
</td>
</tr>
</c:forEach>
</table>
<form action="studentAdd.jsp" method="post">
<input type="submit" value="添加" id="findinput2">
</form>
</body>
</html>
studentAdd.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>添加学生页面</title>
<style>
h1{
text-align: center;
}
table{
background: blanchedalmond;
width: 700px;
margin: 20px auto;
text-align: center;
}
input{
height: 40px;
width: 90%;
margin: 10px auto;
font-size: 20px;
}
tr:first-child{
font-weight: 700;
height: 60px;
}
#lastinput{
width: 50%;
}
</style>
</head>
<body>
<h1>学生信息</h1>
<form action="addStudent" method="post">
<table border="1">
<tr>
<td>信息</td>
<td>请填写</td>
</tr>
<tr>
<td>学号</td>
<td><input type="text" name="sno"> </td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="sname"> </td>
</tr>
<tr>
<td>性别</td>
<td><input type="text" name="ssex"> </td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="sage"> </td>
</tr>
<tr>
<td>电话号码</td>
<td><input type="text" name="stel"> </td>
</tr>
<tr>
<td colspan="2"><input id="lastinput" type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
studentUpdate.jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改学生页面</title>
<style>
h1{
text-align: center;
}
table{
background: blanchedalmond;
width: 700px;
margin: 20px auto;
text-align: center;
}
input{
height: 40px;
width: 90%;
margin: 10px auto;
font-size: 20px;
}
tr:first-child{
font-weight: 700;
height: 60px;
}
#lastinput{
width: 50%;
}
</style>
</head>
<body>
<h1>学生信息</h1>
<form action="updateStudent" method="post">
<table border="1">
<tr>
<td>信息</td>
<td>请填写</td>
</tr>
<tr>
<td>学号</td>
<td><input type="text" name="sno" readonly value="${student.sno}"></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="sname" value="${student.sname}"></td>
</tr>
<tr>
<td>性别</td>
<td><input type="text" name="ssex" value="${student.ssex}"></td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="sage" value="${student.sage}"></td>
</tr>
<tr>
<td>电话号码</td>
<td><input type="text" name="stel" value="${student.stel}"></td>
</tr>
<tr>
<td colspan="2"><input id="lastinput" type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
studentFindList.jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>学生列表</title>
<style>
h1{
text-align: center;
}
table{
background: blanchedalmond;
width: 800px;
margin: 20px auto;
text-align: center;
}
td{
height: 40px;
}
tr:first-child{
font-weight: 700;
}
form{
width: 265px;
margin:20px auto;
}
</style>
</head>
<body>
<h1>学生信息</h1>
<table border="1">
<tr>
<td>学号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>电话号码</td>
<td>操作</td>
</tr>
<tr>
<td>${student.sno}</td>
<td>${student.sname}</td>
<td>${student.ssex==1?"男":"女"}</td>
<td>${student.sage}</td>
<td>${student.stel}</td>
<td>
<a href="deleteStudent?sno=${student.sno}">删除</a>
<a href="findStudentBySno?sno=${student.sno}">修改</a>
</td>
</tr>
</table>
</body>
</html>
9.效果图:
注册:
登录:
学生列表:
添加:
修改:
查询:
做项目时的难点已写在bug之路(持续更新)中。