• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

JavaWeb开发-Servletday05-学生成绩管理系统-实现添加、删除、修改、查询功能

武飞扬头像
代码骑士
帮助1

目录

一、前端页面

1、对列表页面进行改进

 二、项目开发

1、添加功能

 ①stuDao.class新建添加函数

 ②在DaoTest.class中写个测试

 ③在业务层stuService.class新建添加函数

 ④写一个前端添加页面

 ⑤编辑stuServlet.class

 ⑥测试

2、删除功能

 ①新建DAO层删除方法

 ②在test层进行测试

 ③在service层写一个删除业务

 ④修改stuList.jsp删除按钮

 ⑤在Servlet层写delStu.do逻辑

 ⑥测试与思路

3、修改功能

(1)根据学生ID获取学生信息

①在stuDao.class中添加findByStuId函数

②在DaoTest.class中进行测试

③在stuService.class新建查询函数

④在stuServlet.class中新建分支

⑤编写updateStu.jsp

(2)提交已修改的学生信息

①在stuDao.class写修改方法

②在DaoTest,class中进行测试

③在service实现修改业务

④在Servlet新建处理修改请求的分支

4、成绩查询

①在stuDao.class中新建查询函数

②在DaoTest.class中进行测试

 ③修改stuList.jsq的搜索框

④创建一个查询页面

⑤实现Servlet层功能

⑥测试与思路 


一、前端页面

1、对列表页面进行改进

        stuList.jsp

  1.  
    <%@page import="sams.ck.entity.Student"%>
  2.  
    <%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.List,sams.ck.entity.*"
  3.  
    pageEncoding="utf-8"%>
  4.  
    <!DOCTYPE html>
  5.  
    <html>
  6.  
    <head>
  7.  
    <meta charset="utf-8">
  8.  
    <title>Student List</title>
  9.  
    </head>
  10.  
    <body>
  11.  
    <table width='500px' border='5px' >
  12.  
     
  13.  
    <form action="stuList.do" method="post">
  14.  
    <input name="stuId" ><input type="submit" value="搜索">
  15.  
    </form>
  16.  
    &ensp;
  17.  
    <input type="button" class="button" value="添加" onclick="location='addStu.jsp'"/>
  18.  
    &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;
  19.  
    <input type="button" class="button" value="成绩查询" onclick="location='inquiryStu.jsp'"/>
  20.  
     
  21.  
    <tr>
  22.  
    <td>学号</td>
  23.  
    <td>姓名</td>
  24.  
    <td>班级</td>
  25.  
    <td>语文</td>
  26.  
    <td>数学</td>
  27.  
    <td>英语</td>
  28.  
    <td>总分</td>
  29.  
    <td>操作</td>
  30.  
    </tr>
  31.  
    <%
  32.  
    //java代码
  33.  
    //到request中取出 绑定的数据
  34.  
    List<Student>stus=(List<Student>)request.getAttribute("stus");
  35.  
    //循环迭代 数据并显示
  36.  
    for(Student stu:stus){
  37.  
    %>
  38.  
    <tr>
  39.  
    <td>
  40.  
    <%=stu.getStuId() %>
  41.  
    </td>
  42.  
    <td>
  43.  
    <%=stu.getStuName() %>
  44.  
    </td>
  45.  
    <td>
  46.  
    <%=stu.getStuClass() %>
  47.  
    </td>
  48.  
    <td>
  49.  
    <%=stu.getChineseScore() %>
  50.  
    </td>
  51.  
    <td>
  52.  
    <%=stu.getMathScore() %>
  53.  
    </td>
  54.  
    <td>
  55.  
    <%=stu.getEnglisScore() %>
  56.  
    </td>
  57.  
    <td>
  58.  
    <%=stu.getEnglisScore() stu.getMathScore() stu.getChineseScore() %>
  59.  
    </td>
  60.  
    <td>
  61.  
    <input type="button" class="button" value="删除" onclick="location='delStu.do?stuId=<%=stu.getStuId() %>'"/>
  62.  
    <input type="button" class="button" value="修改" onclick="location='toUpdateStu.do?stuId=<%=stu.getStuId() %>'"/>
  63.  
    </td>
  64.  
    </tr>
  65.  
    <%} %>
  66.  
    </table>
  67.  
    </body>
  68.  
    </html>
学新通

        启动服务查看页面效果:

学新通

 二、项目开发

1、添加功能

①stuDao.class新建添加函数

  1.  
    //添加学生成绩信息
  2.  
    public void addStudent(Student stu) {
  3.  
    try {
  4.  
    //获取数据库连接
  5.  
    Connection conn = DBUtil.getConnection();
  6.  
    //定义SQL语句
  7.  
    String sql = "insert into students(number,name,class,chinese,math,english)values(?,?,?,?,?,?)";
  8.  
    //获取PreparedStatement对象
  9.  
    PreparedStatement prep = conn.prepareStatement(sql);
  10.  
    //添加占位符参数
  11.  
    prep.setString(1, stu.getStuId());
  12.  
    prep.setString(2, stu.getStuName());
  13.  
    prep.setString(3, stu.getStuClass());
  14.  
    prep.setDouble(4, stu.getChineseScore());
  15.  
    prep.setDouble(5, stu.getMathScore());
  16.  
    prep.setDouble(6, stu.getEnglisScore());
  17.  
    //执行SQL
  18.  
    prep.executeUpdate();
  19.  
    } catch (SQLException e) {
  20.  
    e.printStackTrace();
  21.  
    }
  22.  
     
  23.  
    }
学新通

②在DaoTest.class中写个测试

  1.  
    package sams.ck.test;
  2.  
     
  3.  
    import java.sql.SQLException;
  4.  
    import java.util.ArrayList;
  5.  
    import java.util.List;
  6.  
     
  7.  
    import sams.ck.dao.stuDao;
  8.  
    import sams.ck.entity.Student;
  9.  
    import sams.ck.service.stuService;
  10.  
    import sams.ck.util.DBUtil;
  11.  
     
  12.  
    public class DaoTest {
  13.  
    public static void main(String[] args) {
  14.  
    stuDao dao = new stuDao();
  15.  
    Student stu = new Student();
  16.  
     
  17.  
    stu.setStuId("20222002");
  18.  
    stu.setStuClass("2");
  19.  
    stu.setStuName("小红");
  20.  
    stu.setChineseScore(100.0);
  21.  
    stu.setMathScore(100.0);
  22.  
    stu.setEnglisScore(99.0);
  23.  
    dao.addStudent(stu);
  24.  
     
  25.  
    System.out.println("添加成功");
  26.  
     
  27.  
    List<Student> stus= dao.findAllStudents();
  28.  
     
  29.  
    for(Student s:stus){
  30.  
    System.out.println(s);
  31.  
    }
  32.  
    }
  33.  
    }
学新通

查看测试结果:

 学新通

 ③在业务层stuService.class新建添加函数

  1.  
    //添加学生成绩信息
  2.  
    public void stuAdd(Student stu) {
  3.  
    dao.addStudent(stu);
  4.  
    }

 ④写一个前端添加页面

        addStu.jsp

  1.  
    <%@page import="sams.ck.entity.Student"%>
  2.  
    <%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.List,sams.ck.entity.*"
  3.  
    pageEncoding="utf-8"%>
  4.  
    <!DOCTYPE html>
  5.  
    <html>
  6.  
    <head>
  7.  
    <meta charset="utf-8">
  8.  
    <title>Add Student</title>
  9.  
    </head>
  10.  
    <body>
  11.  
    <div>
  12.  
    <div>
  13.  
    <div>
  14.  
    <h1>
  15.  
    添加学生信息:
  16.  
    </h1>
  17.  
    <form action="addStu.do" method="post">
  18.  
    <table cellpadding="0" cellspacing="0" border="0"
  19.  
    class="form_table">
  20.  
    <tr>
  21.  
    <td valign="middle" align="right">
  22.  
    学号:
  23.  
    </td>
  24.  
    <td valign="middle" align="left">
  25.  
    <input type="text" class="inputgri" name="stuId" />
  26.  
    </td>
  27.  
    </tr>
  28.  
    <tr>
  29.  
    <td valign="middle" align="right">
  30.  
    姓名:
  31.  
    </td>
  32.  
    <td valign="middle" align="left">
  33.  
    <input type="text" class="inputgri" name="stuName" />
  34.  
    </td>
  35.  
    </tr>
  36.  
    <tr>
  37.  
    <td valign="middle" align="right">
  38.  
    班级:
  39.  
    </td>
  40.  
    <td valign="middle" align="left">
  41.  
    <input type="text" class="inputgri" name="stuClass" />
  42.  
    </td>
  43.  
    </tr>
  44.  
    <tr>
  45.  
    <td valign="middle" align="right">
  46.  
    语文:
  47.  
    </td>
  48.  
    <td valign="middle" align="left">
  49.  
    <input type="text" class="inputgri" name="ChineseScore" />
  50.  
    </td>
  51.  
    </tr>
  52.  
    <tr>
  53.  
    <td valign="middle" align="right">
  54.  
    数学:
  55.  
    </td>
  56.  
    <td valign="middle" align="left">
  57.  
    <input type="text" class="inputgri" name="MathScore" />
  58.  
    </td>
  59.  
    </tr>
  60.  
    <tr>
  61.  
    <td valign="middle" align="right">
  62.  
    英语:
  63.  
    </td>
  64.  
    <td valign="middle" align="left">
  65.  
    <input type="text" class="inputgri" name="EnglishScore" />
  66.  
    </td>
  67.  
    </tr>
  68.  
    </table>
  69.  
    <p>
  70.  
    <input type="submit" class="button" value="确认" />
  71.  
    </p>
  72.  
    </form>
  73.  
    </div>
  74.  
    </div>
  75.  
    </div>
  76.  
    </body>
  77.  
    </html>
学新通

 ⑤编辑stuServlet.class

  1.  
    else if(path.equals("/addStu")) {
  2.  
    // 获取前端浏览器传递过来的员工信息
  3.  
    String stuId = request.getParameter("stuId");//学号
  4.  
    String stuName = request.getParameter("stuName");//姓名
  5.  
    String stuClass = request.getParameter("stuClass");//班级
  6.  
    double ChineseScore = Double.parseDouble(request.getParameter("ChineseScore"));//语文
  7.  
    double MathScore = Double.parseDouble(request.getParameter("MathScore"));//数学
  8.  
    double EnglishScore = Double.parseDouble(request.getParameter("EnglishScore"));//英语
  9.  
    // 将获取的前端传递的参数封装到Stu对象当中
  10.  
    Student Stu = new Student();
  11.  
    Stu.setStuId(stuId);
  12.  
    Stu.setStuName(stuName);
  13.  
    Stu.setStuClass(stuClass);
  14.  
    Stu.setChineseScore(ChineseScore);
  15.  
    Stu.setMathScore(MathScore);
  16.  
    Stu.setEnglisScore(EnglishScore);
  17.  
    //调用业务层代码提交给数据库
  18.  
    service.stuAdd(Stu);
  19.  
    // 添加成功后将页面重定向会 信息展示页
  20.  
    response.sendRedirect("stuList.do");
  21.  
    }
学新通

 ⑥测试

启动服务,搜索网址:http://127.0.0.1:8080/StudentAchievementManagementSystem/stuList.do

点击添加按钮到达addStu.jsp页面,添加学生信息:

学新通

 点击确认按钮,将信息传递到addStu.do中,addStu.do会通过Servlet默认处理,处理完在返回给stuList.jsp显示在列表页面上:

学新通

**需要注意的是,开发过程中一定要理清逻辑。

        在stuList.do页面,Servlet执行的功能是将数据库里的信息全部展示在当前页面。重点是前后端绑定同一个学生信息的数组。然后调用业务层代码取出数据库中的所有信息,通过实体类数组将学生成绩信息转发给前端页面。

        前端stuList.jsp上的添加按钮跳转到的页面是addStu.jsp,其表单提交页面是addStu.do,也就是说在addStu.jsp写好学生信息后点击确认,表单会传递给addStu.do页面,此时addStu.do在Servlet层接收处理,通过实体类接收前端传递来的信息,在调用业务层方法将封装好的信息传递给dao层再存入数据库。此时再进行页面跳转,回到stuList.do页面,也就是从数据库中显示全部学生信息,若看到新添加的学生信息,添加成功。

2、删除功能

①新建DAO层删除方法

        stuDao.class

  1.  
    //删除学生成绩信息
  2.  
    public void deleteStudent(String stuId) {
  3.  
    try {
  4.  
    //获取数据库连接
  5.  
    Connection conn = DBUtil.getConnection();
  6.  
    //定义SQL语句
  7.  
    String sql = "delete from students where number=?";
  8.  
    //获取PreparedStatement对象
  9.  
    PreparedStatement prep = conn.prepareStatement(sql);
  10.  
    //将传递的参数 注入到占位符中
  11.  
    prep.setString(1,stuId);
  12.  
    //执行SQL
  13.  
    prep.executeUpdate();
  14.  
    } catch (SQLException e) {
  15.  
    e.printStackTrace();
  16.  
    }
  17.  
    }
学新通

 ②在test层进行测试

        daoTest.class

  1.  
    package sams.ck.test;
  2.  
     
  3.  
    import java.sql.SQLException;
  4.  
    import java.util.ArrayList;
  5.  
    import java.util.List;
  6.  
     
  7.  
    import sams.ck.dao.stuDao;
  8.  
    import sams.ck.entity.Student;
  9.  
    import sams.ck.service.stuService;
  10.  
    import sams.ck.util.DBUtil;
  11.  
     
  12.  
    public class DaoTest {
  13.  
    public static void main(String[] args) {
  14.  
    stuDao dao = new stuDao();
  15.  
     
  16.  
    String stuId = "20222003";
  17.  
     
  18.  
    dao.deleteStudent(stuId);
  19.  
     
  20.  
    System.out.println("删除成功");
  21.  
     
  22.  
    List<Student> stus= dao.findAllStudents();
  23.  
     
  24.  
    for(Student s:stus){
  25.  
    System.out.println(s);
  26.  
    }
  27.  
    }
  28.  
    }
学新通

输出显示, 学号为20222003的小明已经被删除了

学新通

③在service层写一个删除业务

  1.  
    //删除学生成绩信息
  2.  
    public void stuDel(String stuId) {
  3.  
    dao.deleteStudent(stuId);
  4.  
    }

④修改stuList.jsp删除按钮

  1.  
    <td>
  2.  
    <input type="button" class="button" value="删除" onclick="location='delStu.do?stuId=<%=stu.getStuId() %>'"/>
  3.  
    <input type="button" class="button" value="修改" onclick="location='toUpdateStu.do?stuId=<%=stu.getStuId() %>'"/>
  4.  
    </td>

⑤在Servlet层写delStu.do逻辑

  1.  
    else if(path.equals("/delStu")) {
  2.  
    // 服务端获取浏览器端传递的参数
  3.  
    String stuId = request.getParameter("stuId");
  4.  
    //调用业务层删除函数
  5.  
    service.stuDel(stuId);
  6.  
    // 使用重定向技术 完成页面的跳转
  7.  
    response.sendRedirect("stuList.do");
  8.  
    }

⑥测试与思路

测试:

启动服务访问页面:http://127.0.0.1:8080/StudentAchievementManagementSystem/stuList.do

点击删除小红:

学新通

删除后:

学新通

思路:

        首先在dao层写一个操作数据库的删除逻辑,删除的条件是学生的学号,因为学号是唯一的,以此为条件,可以防止误删其他信息。

        然后在业务层写一个删除函数,实际上就是调用dao层的功能,函数的参数依旧是学生学号。

        接下来我们修改前端学生信息列表页面,将删除按钮绑定跳转页面和学生学号。这里默认的是使用get方法,也就是跳转的路径和stuId参数都会在url中显示,但是不用担心,我们在Servlet层处理delStu.do时使用重定向技术返回到了stuList.do页面,用户是无法看到delStu.do页面的,也更看不到url参数。当然也可以选用post的请求方式传递参数。

学新通         处理好前端后,我们来到Servlet层,当前端请求到delStu.do时,Servlet在此页面中实现了删除功能(调用业务层函数,学生学号参数通过request从前端获取),然后立刻重定向回到学生信息列表页面。

3、修改功能

(1)根据学生ID获取学生信息

①在stuDao.class中添加findByStuId函数

        修改学生信息前提是通过要修改的学生学号获取学生信息

  1.  
    //修改学生信息前提是通过要修改的学生学号获取学生信息
  2.  
    public Student findByStuId(String stuId) {
  3.  
    Student stu = null;
  4.  
    try {
  5.  
    //获取数据库连接
  6.  
    Connection conn = DBUtil.getConnection();
  7.  
    //定义SQL语句
  8.  
    String sql = "select * from students where number=?";
  9.  
    //获取PreparedStatement对象
  10.  
    PreparedStatement prep = conn.prepareStatement(sql);
  11.  
    //将传递的参数 注入到占位符中
  12.  
    prep.setString(1,stuId);
  13.  
    //执行SQL获取结果集对象
  14.  
    ResultSet rs = prep.executeQuery();
  15.  
    while (rs.next()) {
  16.  
    stu = new Student();
  17.  
    stu.setStuId(rs.getString("number"));
  18.  
    stu.setStuName(rs.getString("name"));
  19.  
    stu.setStuClass(rs.getString("class"));
  20.  
    stu.setChineseScore(rs.getDouble("chinese"));
  21.  
    stu.setEnglisScore(rs.getDouble("english"));
  22.  
    stu.setMathScore(rs.getDouble("math"));
  23.  
    }
  24.  
    } catch (SQLException e) {
  25.  
    e.printStackTrace();
  26.  
    }
  27.  
    return stu;
  28.  
    }
学新通

②在DaoTest.class中进行测试

  1.  
    package sams.ck.test;
  2.  
     
  3.  
    import java.sql.SQLException;
  4.  
    import java.util.ArrayList;
  5.  
    import java.util.List;
  6.  
     
  7.  
    import sams.ck.dao.stuDao;
  8.  
    import sams.ck.entity.Student;
  9.  
    import sams.ck.service.stuService;
  10.  
    import sams.ck.util.DBUtil;
  11.  
     
  12.  
    public class DaoTest {
  13.  
    public static void main(String[] args) {
  14.  
    stuDao dao = new stuDao();
  15.  
     
  16.  
    String stuId = "20221001";
  17.  
     
  18.  
    Student stu = new Student();
  19.  
     
  20.  
    stu = dao.findByStuId(stuId);
  21.  
     
  22.  
    System.out.println(stu "查询成功");
  23.  
    }
  24.  
    }
学新通

输出的20221001学号的学生信息,测试成功。

 学新通

③在stuService.class新建查询函数

  1.  
    //查询某个学生信息
  2.  
    public Student findByStuId(String stuId){
  3.  
    Student stu=dao.findByStuId(stuId);
  4.  
    return stu;
  5.  
    }

④在stuServlet.class中新建分支

  1.  
    else if (path.equals("/toUpdateStu")) {
  2.  
    // 获取前端产地过来的stuId值
  3.  
    String stuId = request.getParameter("stuId");//学号
  4.  
    Student stu = service.findByStuId(stuId);
  5.  
    // 将查询出的数据绑定到request对象中
  6.  
    request.setAttribute("stu", stu);
  7.  
    // 转发到updateStu.jsp页面
  8.  
    request.getRequestDispatcher("updateStu.jsp").forward(request, response);
  9.  
    }

⑤编写updateStu.jsp

  1.  
    <%@page import="sams.ck.entity.Student"%>
  2.  
    <%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.List,sams.ck.entity.*"
  3.  
    pageEncoding="utf-8"%>
  4.  
    <!DOCTYPE html>
  5.  
    <html>
  6.  
    <head>
  7.  
    <meta charset="utf-8">
  8.  
    <title>Update Student</title>
  9.  
    </head>
  10.  
    <body>
  11.  
    <div>
  12.  
    <div>
  13.  
    <div>
  14.  
    <h1>
  15.  
    修改学生信息:
  16.  
    </h1>
  17.  
    <form action="updateStu.do" method="post">
  18.  
     
  19.  
    <%
  20.  
    Student stu=(Student)request.getAttribute("stu");
  21.  
     
  22.  
    %>
  23.  
    <table cellpadding="0" cellspacing="0" border="0"
  24.  
    class="form_table">
  25.  
    <tr>
  26.  
    <td valign="middle" align="right">
  27.  
    学号:
  28.  
    </td>
  29.  
    <td valign="middle" align="left">
  30.  
    <%=stu.getStuId() %>
  31.  
    <input type="hidden" name="stuId" value="<%=stu.getStuId() %>"/>
  32.  
    </td>
  33.  
    </tr>
  34.  
    <tr>
  35.  
    <td valign="middle" align="right">
  36.  
    姓名:
  37.  
    </td>
  38.  
    <td valign="middle" align="left">
  39.  
    <input type="text" class="inputgri" name="stuName" value="<%=stu.getStuName() %>"/>
  40.  
    </td>
  41.  
    </tr>
  42.  
    <tr>
  43.  
    <td valign="middle" align="right">
  44.  
    班级:
  45.  
    </td>
  46.  
    <td valign="middle" align="left">
  47.  
    <input type="text" class="inputgri" name="stuClass" value="<%=stu.getStuClass() %>"/>
  48.  
    </td>
  49.  
    </tr>
  50.  
    <tr>
  51.  
    <td valign="middle" align="right">
  52.  
    语文:
  53.  
    </td>
  54.  
    <td valign="middle" align="left">
  55.  
    <input type="text" class="inputgri" name="ChineseScore" value="<%=stu.getChineseScore() %>"/>
  56.  
    </td>
  57.  
    </tr>
  58.  
    <tr>
  59.  
    <td valign="middle" align="right">
  60.  
    数学:
  61.  
    </td>
  62.  
    <td valign="middle" align="left">
  63.  
    <input type="text" class="inputgri" name="MathScore" value="<%=stu.getMathScore() %>"/>
  64.  
    </td>
  65.  
    </tr>
  66.  
    <tr>
  67.  
    <td valign="middle" align="right">
  68.  
    英语:
  69.  
    </td>
  70.  
    <td valign="middle" align="left">
  71.  
    <input type="text" class="inputgri" name="EnglishScore" value="<%=stu.getEnglisScore() %>"/>
  72.  
    </td>
  73.  
    </tr>
  74.  
    </table>
  75.  
    <p>
  76.  
    <input type="submit" class="button" value="确认" />
  77.  
    </p>
  78.  
    </form>
  79.  
    </div>
  80.  
    </div>
  81.  
    </div>
  82.  
    </body>
  83.  
    </html>
学新通

此处的stu与Servlet中的stu是相互绑定的

学新通

 学新通

测试:

在成绩列表点击修改按钮

学新通

可以看到修改页面显示学生信息

(如果不想在url看到参数请将按钮提交方式改为post)

学新通

 测试成功。

(2)提交已修改的学生信息

①在stuDao.class写修改方法

  1.  
    //修改学生信息
  2.  
    public void updateStudent(Student stu) {
  3.  
    try {
  4.  
    //获取数据库连接
  5.  
    Connection conn = DBUtil.getConnection();
  6.  
    //定义SQL语句
  7.  
    String sql = "update students set name=?,class=?,chinese=?,math=?,english=? where number=?";
  8.  
    //获取PreparedStatement对象
  9.  
    PreparedStatement prep = conn.prepareStatement(sql);
  10.  
    //将传递的参数 注入到占位符中
  11.  
     
  12.  
    prep.setString(1,stu.getStuName());
  13.  
    prep.setString(2,stu.getStuClass());
  14.  
    prep.setDouble(3,stu.getChineseScore());
  15.  
    prep.setDouble(4,stu.getMathScore());
  16.  
    prep.setDouble(5,stu.getEnglisScore());
  17.  
    prep.setString(6,stu.getStuId());
  18.  
     
  19.  
    //执行SQL获取结果集对象
  20.  
    prep.executeUpdate();
  21.  
     
  22.  
    } catch (SQLException e) {
  23.  
    e.printStackTrace();
  24.  
    }
  25.  
    }
学新通

②在DaoTest,class中进行测试

  1.  
    package sams.ck.test;
  2.  
     
  3.  
    import java.sql.SQLException;
  4.  
    import java.util.ArrayList;
  5.  
    import java.util.List;
  6.  
     
  7.  
    import sams.ck.dao.stuDao;
  8.  
    import sams.ck.entity.Student;
  9.  
    import sams.ck.service.stuService;
  10.  
    import sams.ck.util.DBUtil;
  11.  
     
  12.  
    public class DaoTest {
  13.  
    public static void main(String[] args) {
  14.  
    stuDao dao = new stuDao();
  15.  
     
  16.  
    String stuId = "20221001";
  17.  
     
  18.  
    Student stu = new Student();
  19.  
    stu = dao.findByStuId(stuId);
  20.  
    System.out.println("修改前:" stu);
  21.  
    stu.setChineseScore(0.0);
  22.  
    stu.setEnglisScore(0.0);
  23.  
    stu.setMathScore(0.0);
  24.  
    dao.updateStudent(stu);
  25.  
    System.out.println("修改后:" stu);
  26.  
    }
  27.  
    }
学新通

测试结果显示,修改成功:

学新通

③在service实现修改业务

  1.  
    //修改学生信息
  2.  
    public void updateStu(Student stu){
  3.  
    dao.updateStudent(stu);
  4.  
    }

④在Servlet新建处理修改请求的分支

  1.  
    else if (path.equals("/updateStu")) {
  2.  
    // 获取请求参数
  3.  
    String stuId = request.getParameter("stuId");//学号
  4.  
    String stuName = request.getParameter("stuName");//姓名
  5.  
    String stuClass = request.getParameter("stuClass");//班级
  6.  
    double ChineseScore = Double.parseDouble(request.getParameter("ChineseScore"));//语文
  7.  
    double MathScore = Double.parseDouble(request.getParameter("MathScore"));//数学
  8.  
    double EnglishScore = Double.parseDouble(request.getParameter("EnglishScore"));//英语
  9.  
    // 封装数据
  10.  
    Student Stu = new Student();
  11.  
    Stu.setStuId(stuId);
  12.  
    Stu.setStuName(stuName);
  13.  
    Stu.setStuClass(stuClass);
  14.  
    Stu.setChineseScore(ChineseScore);
  15.  
    Stu.setMathScore(MathScore);
  16.  
    Stu.setEnglisScore(EnglishScore);
  17.  
    //实现修改业务
  18.  
    service.updateStu(Stu);
  19.  
    // 重定向回列表显示页面
  20.  
    response.sendRedirect("stuList.do");
  21.  
    }
学新通

⑤测试与思路

测试:

学新通

 学新通

学新通

思路:

        修改学生信息,首先要通过修改学生的id获取全部需要修改的学生信息。在dao层实现通过学生id对学生信息的查找。在前端通过url传递参数,在servlet中从request中获取前端传递来的参数,再通过业务层对象调取dao层方法,将此id全部学生信息显示在修改页面。总而言之,就是从前端获取学生id,通过后端查询id并显示在页面上。

        数据正常显示后,再将前端修改后的信息传递给Servlet层,Servlet层通过调用后端的更新方法来提交给数据库,并重定向会前端列表界面。

4、成绩查询

新的页面:输入学号、显示姓名、语文、数学、英语、总分。

①在stuDao.class中新建查询函数

  1.  
    //查询学生成绩
  2.  
    public Student seleStudent(String stuId) {
  3.  
    Student stu = null;
  4.  
    try {
  5.  
    //获取数据库连接
  6.  
    Connection conn = DBUtil.getConnection();
  7.  
    //定义SQL语句
  8.  
    String sql = "select name,Chinese,Math,English FROM students WHERE number=?";
  9.  
    //获取PreparedStatement对象
  10.  
    PreparedStatement prep = conn.prepareStatement(sql);
  11.  
    //将传递的参数 注入到占位符中
  12.  
    prep.setString(1,stuId);
  13.  
    //执行SQL获取结果集对象
  14.  
    ResultSet rs = prep.executeQuery();
  15.  
    while (rs.next()) {
  16.  
    stu = new Student();
  17.  
    stu.setStuName(rs.getString("name"));
  18.  
    stu.setChineseScore(rs.getDouble("chinese"));
  19.  
    stu.setEnglisScore(rs.getDouble("english"));
  20.  
    stu.setMathScore(rs.getDouble("math"));
  21.  
    }
  22.  
    } catch (SQLException e) {
  23.  
    // TODO Auto-generated catch block
  24.  
    e.printStackTrace();
  25.  
    }
  26.  
    return stu;
  27.  
    }
学新通

②在DaoTest.class中进行测试

  1.  
    package sams.ck.test;
  2.  
     
  3.  
    import java.sql.SQLException;
  4.  
    import java.util.ArrayList;
  5.  
    import java.util.List;
  6.  
     
  7.  
    import sams.ck.dao.stuDao;
  8.  
    import sams.ck.entity.Student;
  9.  
    import sams.ck.service.stuService;
  10.  
    import sams.ck.util.DBUtil;
  11.  
     
  12.  
    public class DaoTest {
  13.  
    public static void main(String[] args) {
  14.  
    stuDao dao = new stuDao();
  15.  
    String stuId = "20221001";
  16.  
    Student stu = new Student();
  17.  
    stu = dao.seleStudent(stuId);
  18.  
    System.out.println(stu);
  19.  
    }
  20.  
    }
学新通

测试结果,查询成功:

学新通

 ③修改stuList.jsq的搜索框

  1.  
    <form action="toInquiryStu.do" method="post">
  2.  
    <input placeholder="请输入您的学号" name="stuId" ><input type="submit" value="查询">
  3.  
    </form>

④创建一个查询页面

InquiryStu.jsp

  1.  
    <%@page import="sams.ck.service.stuService"%>
  2.  
    <%@page import="sams.ck.entity.Student"%>
  3.  
    <%@ page language="java" contentType="text/html; charset=utf-8" import="java.util.List,sams.ck.entity.*"
  4.  
    pageEncoding="utf-8"%>
  5.  
    <!DOCTYPE html>
  6.  
    <html>
  7.  
    <head>
  8.  
    <meta charset="utf-8">
  9.  
    <title>Update Student</title>
  10.  
    </head>
  11.  
    <body>
  12.  
    <div>
  13.  
    <div>
  14.  
    <div>
  15.  
    <h1>
  16.  
    查询学生成绩:
  17.  
    </h1>
  18.  
    <form action="stuList.do" method="post">
  19.  
    <%
  20.  
    Student stu=(Student)request.getAttribute("stu");
  21.  
    %>
  22.  
    <table cellpadding="0" cellspacing="0" border="0"
  23.  
    class="form_table">
  24.  
    <tr>
  25.  
    <td valign="middle" align="right">
  26.  
    学生姓名:
  27.  
    </td>
  28.  
    <td valign="middle" align="left">
  29.  
    <input type="text" name="stUName" value="<%=stu.getStuName() %>" readonly="readonly"/>
  30.  
    </td>
  31.  
    </tr>
  32.  
    <tr>
  33.  
    <td valign="middle" align="right">
  34.  
    语文分数:
  35.  
    </td>
  36.  
    <td valign="middle" align="left">
  37.  
    <input type="text" class="inputgri" name="ChineseScore" value="<%=stu.getChineseScore() %>" readonly="readonly"/>
  38.  
    </td>
  39.  
    </tr>
  40.  
    <tr>
  41.  
    <td valign="middle" align="right">
  42.  
    数学分数:
  43.  
    </td>
  44.  
    <td valign="middle" align="left">
  45.  
    <input type="text" class="inputgri" name="MathScore" value="<%=stu.getMathScore() %>" readonly="readonly"/>
  46.  
    </td>
  47.  
    </tr>
  48.  
    <tr>
  49.  
    <td valign="middle" align="right">
  50.  
    英语分数:
  51.  
    </td>
  52.  
    <td valign="middle" align="left">
  53.  
    <input type="text" class="inputgri" name="EnglishScore" value="<%=stu.getEnglisScore() %>" readonly="readonly"/>
  54.  
    </td>
  55.  
    </tr>
  56.  
    <tr>
  57.  
    <td valign="middle" align="right">
  58.  
    总分数:
  59.  
    </td>
  60.  
    <td valign="middle" align="left">
  61.  
    <input type="text" class="inputgri" name="totalScore" value="<%=stu.getChineseScore() stu.getMathScore() stu.getEnglisScore() %>" readonly="readonly"/>
  62.  
    </td>
  63.  
    </tr>
  64.  
     
  65.  
    </table>
  66.  
    <p>
  67.  
    <input type="submit" class="button" value="返回" />
  68.  
    </p>
  69.  
    </form>
  70.  
    </div>
  71.  
    </div>
  72.  
    </div>
  73.  
    </body>
  74.  
    </html>
学新通

⑤实现Servlet层功能

  1.  
    else if (path.equals("/toInquiryStu")) {
  2.  
    // 服务端获取浏览器端传递的参数
  3.  
    String stuId = request.getParameter("stuId");
  4.  
    //调用业务层的查询方法
  5.  
    Student stu = service.selecStudent(stuId);
  6.  
    //将查询结果传给前端
  7.  
    // 将查询出的数据绑定到request对象中
  8.  
    request.setAttribute("stu", stu);
  9.  
    // 转发到inquiryStu.jsp页面
  10.  
    request.getRequestDispatcher("inquiryStu.jsp").forward(request, response);
  11.  
    }

⑥测试与思路 

测试:

输入学号

学新通

查询页面

学新通

思路:

  •         dao层根据学号查询学生成绩信息:语文、数学、英语、总分的分数。
  •         service层调用dao层。
  •         前端 jsp 页面把输入的学号传递给Servlet,Servlet拿着学号去业务层调方法取得数据库中的分数信息,再通过转发技术将参数返回给前端查询页面。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgakcef
系列文章
更多 icon
同类精品
更多 icon
继续加载