上一次已经完成了数据库的连接与查询,并且将查询到的数据展示在jsp页面上,今天来完成添加用户、修改信息和删除用户的功能。
首先在student.jsp页面中为“添加学生”按钮设置跳转,也可以将button标签替换为a标签
<button type="button" class="btn btn-primary" onclick="window.location.href='${pageContext.request.contextPath}/addstudent.jsp'">添加学生</button>
跳转至addstudent.jsp页面,修改form表单的action
<form class="form-horizontal" action="${pageContext.request.contextPath}/addStudentServlet">
创建AddStudentServlet类,用于处理添加学生的逻辑
@WebServlet("/addStudentServlet")
public class AddStudentServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取参数
String studentno = request.getParameter("studentno");
String name = request.getParameter("name");
String classno = request.getParameter("classno");
String major = request.getParameter("major");
String gender = request.getParameter("gender");
String age = request.getParameter("age");
Student student = new Student();
student.setStudentNo(studentno);
student.setName(name);
student.setClassNo(classno);
student.setMajor(major);
student.setGender(gender.equals("男") ? Student.MALE : Student.FEMALE);
student.setAge(Integer.parseInt(age));
//添加student
StudentService studentService = new StudentServiceImpl();
studentService.addStudent (student);
//重定向至用户查询servlet
response.sendRedirect(request.getContextPath() + "/studentListServlet");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
与之前查询数据类似,为StudentService接口和StudentDao接口添加新的方法
public class StudentServiceImpl implements StudentService {
private StudentDao dao = new StudentDaoImpl();
@Override
public List<Student> findStudentForList() {
return dao.findStudentForList ();
}
@Override
public void addStudent(Student student) {
dao.addStudent (student);
}
}
public class StudentDaoImpl implements StudentDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<Student> findStudentForList() {
String sql = "select * from student";
return template.query(sql, new BeanPropertyRowMapper<>(Student.class));
}
@Override
public void addStudent(Student student) {
String sql = "insert into student values (?, ?, ?, ?, ?, ?)";
String studentNo = student.getStudentNo();
String name = student.getName();
String classNo = student.getClassNo();
String major = student.getMajor();
int gender = student.getGender();
int age = student.getAge();
template.update(sql, studentNo, name, classNo, major, gender, age);
}
}
完成后可以启动Tomcat测试一下。
登录成功后点击添加学生,成功跳转到添加学生页面,并填写信息,点击添加按钮
添加成功!
接下来做修改和删除功能,为“修改”和“删除”按钮添加链接,这里要为“修改”按钮的跳转链接添加学号这个主键作为参数,因为在后面修改的时候,如果没有旧的学号,就无法在student表中查询这条信息。
<button class="btn btn-success" onclick="window.location.href='${pageContext.request.contextPath}/findStudentServlet?studentno=${student.studentNo}'">修改</button>
<button class="btn btn-danger" onclick="window.location.href='${pageContext.request.contextPath}/deleteStudentServlet?studentno=${student.studentNo}'">删除</button>
创建FindStudentServlet,先在student表中找到这条信息,然后跳转至updatestudent.jsp,在updatestudent.jsp修改信息
@WebServlet("/findStudentServlet")
public class FindStudentServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String studentno = request.getParameter("studentno");
StudentService studentService = new StudentServiceImpl();
Student student = studentService.findStudentByStudentNo (studentno);
request.setAttribute("student", student);
request.getRequestDispatcher("/updatestudent.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
与之前类似,为StudentService添加findStudentByStudentNo(String studentNo)方法,用于利用studentNo进行数据查询
具体实现方法就不写了,和前面大同小异,只写一下查询的SQL语句:
select * from student where studentno = ?
重写updatestudent.jsp,给对应的input标签添加value属性值
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>修改信息</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/jquery-3.5.1.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</head>
<body>
<div style="width: 30%;margin: 20px auto">
<h1 style="text-align: center;margin: 10px">修改信息</h1>
<form class="form-horizontal" action="${pageContext.request.contextPath}/updateStudentServlet">
<input type="hidden" name="oldstudentno" value="${student.studentNo}">
<input type="hidden" name="oldstudentno" value="${requestScope.studentno}">
<div class="form-group">
<label for="studentno" class="col-sm-2 control-label">学号:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="studentNo" name="studentno" value="${student.studentno}">
</div>
</div>
<div class="form-group">
<label for="name" class="col-sm-2 control-label">姓名:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="name" name="name" value="${student.name}">
</div>
</div>
<div class="form-group">
<label for="class" class="col-sm-2 control-label">班级:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="class" name="class" value="${student.classNo}">
</div>
</div>
<div class="form-group">
<label for="major" class="col-sm-2 control-label">专业:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="major" name="major" value="${student.major}">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">性别:</label>
<div class="col-sm-10">
<c:if test="${student.gender == 1}">
<label class="radio-inline">
<input type="radio" name="gender" value="男" checked> 男
</label>
<label class="radio-inline">
<input type="radio" name="gender" value="女"> 女
</label>
</c:if>
<c:if test="${student.gender == 2}">
<label class="radio-inline">
<input type="radio" name="gender" value="男"> 男
</label>
<label class="radio-inline">
<input type="radio" name="gender" value="女" checked> 女
</label>
</c:if>
</div>
</div>
<div class="form-group">
<label for="age" class="col-sm-2 control-label">年龄:</label>
<div class="col-sm-10">
<input type="number" class="form-control" id="age" name="age" value="${student.age}">
</div>
</div>
<div class="form-group">
<div style="text-align: center">
<button type="submit" class="btn btn-primary">修改</button>
<button type="reset" class="btn btn-info">重置</button>
</div>
</div>
</form>
</div>
</body>
</html>
现在可以先测试一下是否好用,重启Tomcat,登录后点击修改
成功!原来的信息显示出来了,接下来创建UpdateStudentServlet类,用于处理修改信息的逻辑。注意updatestudent.jsp的form表单中有一个type类型为hidden的input,存放了修改前的学号,用于后面的信息查找。
@WebServlet("/updateStudentServlet")
public class UpdateStudentServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String oldStudentNo = request.getParameter("oldstudentno");
String studentno = request.getParameter("studentno");
String name = request.getParameter("name");
String classNo = request.getParameter("class");
String major = request.getParameter("major");
String gender = request.getParameter("gender");
String age = request.getParameter("age");
Student student = new Student();
student.setStudentNo(studentno);
student.setName(name);
student.setClassNo(classNo);
student.setMajor(major);
student.setGender(gender.equals("男") ? 1 : 2);
student.setAge(Integer.parseInt(age));
StudentService studentService = new StudentServiceImpl();
studentService.updateStudent (student, oldStudentNo);
response.sendRedirect(request.getContextPath() + "/studentListServlet");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
还是与之前类似,为StudentService接口添加新方法updateStudent(Student student, String oldStudentNo);
这里就不写了,只写一下最后的SQL语句:
update student set studentno = ?, name = ?, classno = ?, major = ?, gender = ?, age = ? where studentno = ?
现在可以重启Tomcat测试一下
修改信息,点击修改按钮
成功!
添加和修改的功能都已经实现了,接下来做删除功能。
第一步先修改删除按钮的链接地址,刚才已经做过了,接着创建DeleteStudentServlet类,处理删除逻辑
@WebServlet("/deleteStudentServlet")
public class DeleteStudentServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String studentno = request.getParameter("studentno");
StudentService studentService = new StudentServiceImpl();
studentService.deleteStudentByStudentNo (studentno);
response.sendRedirect(request.getContextPath() + "/studentListServlet");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
又双叒和之前一样,为StudentService接口添加新方法,这里还是只写SQL语句:
delete from student where studentno = ?
迫不及待的测试一下,把章鱼哥删掉
成功!章鱼哥消失了。
这次就先做到这,下次再接着做剩下的功能。