✨JavaWeb项目:实战亲自动手手敲上线小项目部分功能的第三天✨

本文是JavaWeb项目实战系列的第三天,主要介绍如何实现动态获取年级列表、新增、修改和删除学生信息的功能。通过创建处理类、调用service和dao层方法,以及使用JSP页面展示数据。详细讲解了每个步骤,包括处理新增学生时的年级列表动态获取,以及修改和删除功能的实现流程。最后展示了功能实现后的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列链接:
✨JavaWeb项目实战亲自动手手敲上线小项目的第一天✨
✨JavaWeb项目实战亲自动手手敲上线小项目的第二天✨
✨JavaWeb项目实战亲自动手手敲上线小项目的第三天✨
✨JavaWeb项目:实战亲自动手手敲上线小项目部分功能的第四天优化✨


今天是第三天了,我有一个思考,如果真的有人能跟着我一起去跟进,哪怕是跟我一起出错,之后再去解决错误,一步步的往下进行,事无巨细啊,我想他一定会有所收获的。

实现流程与思想与过程1

那今天又是新的一天,今天计划完成后续的所有实现,那我们直接进入主题,说一说接下来要完成的实现功能。

1.新增学生的实现流程

1.1首先实现我们年级的动态获取
  1. 当我们在页面中点击[新增学生]这一选择时,就跳转到新增学生的页面,那其实有一个点要注意,那就是我们的班级(学生是有班级的,但是班级这个不是学生表中的数据,是外键),所以是根据数据库去动态获取的。那我们就可以去发送一个请求到/Educational/student/getGradeList,那我们就去新建一个处理类GradeListServlet去接收一下。
  2. 那在GradeListServlet中我们首先实现://查询年级列表的方法。那我们在service层和dao层都添加上getList方法,最后在GradeDaoImpl中编写查询sql语句,之后返回查询结果集,然后while循环遍历数据,之后将数据添加到List集合中,那最后就是关闭资源,返回list的数据。
  3. 之后我们回到GradeListServlet
    那我们是首先调用service对象,让它去调用getList方法,那返回的是一个Grade集合,那我们之后就要把数据显示在页面中,那就要去存储这个数据,之后我们就进行跳转到add.jsp(新增学生页面),那我们跳转到add.jsp把我们的1班2班3班转换成动态数据就可以使用<c:forEach></c:forEach>去循环,那这就和list.jsp一样了。我们导入jstl标签库,之后循环把数据进行展示。

新增学生功能实现1

按照流程一步一步走,首先去新建一个GradeListServlet处理类,

@WebServlet("/Educational/student/getGradeList")
public class GradeListServlet extends HttpServlet {
   
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        //查询年级列表的方法
       
    }
}

那这里是还没有内容的,那我们就去service和dao层依次添加,
首先是GradeService:

public interface GradeService {
   
    /**
     * 查询年级列表的方法
     */
    public List<Grade> getList();
}

还有GradeDao

public interface GradeDao {
   
    /**
     * 查询年级列表的方法
     */
    public List<Grade> getList();
}

那还有GradeServiceImpl

public class GradeServiceImpl implements GradeService {
   
    private GradeDao dao = new GradeDaoImpl();
    
    @Override
    public List<Grade> getList() {
   
        return dao.getList();
    }
}

这里返回dao层方法,去向上查询,到dao层实现类GradeDaoImpl:

public class GradeDaoImpl extends DBUtils implements GradeDao {
   
    @Override
    public List<Grade> getList() {
   
        List gs = new ArrayList();
        try {
   
            String sql="select * from grade";
            resultSet = query(sql, null);
            while(resultSet.next()){
   
                Grade grade = new Grade();
                grade.setGradeId(resultSet.getInt("gradeid"));
                grade.setGradeName(resultSet.getString("gradename"));
                gs.add(grade);
            }
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        } finally {
   
            closeAll();
        }

        return gs;
    }
}

这里我们首先写一个全查sql语句,将结果给resultSet,让其遍历获取数据,之后定义一个List集合对象,将前面的数据添加到List中,那之后closeAll关闭资源,最后返回list集合。
之后我们回到GradeListServlet去调取。

@WebServlet("/Educational/student/getGradeList")
public class GradeListServlet extends HttpServlet {
   
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        //查询年级列表的方法
        GradeService service = new GradeServiceImpl();
        List<Grade> list = service.getList();
        req.setAttribute("glist",list);
        req.getRequestDispatcher("add.jsp").forward(req,resp);
    }
}

调用service对象,让它去调用getList方法,那返回的是一个Grade集合,那我们之后就要把数据显示在页面中,那就要去存储这个数据,存完之后我们就进行跳转到add.jsp。

			 <tr>
	             <td>班级<span style="color:red">*</span></td>
	                <td>
	                    <select name="gid">
	                        <c:forEach items="${glist}" var="g">
	                    	<option value="${g.gradeId}">${g.gradeName}</option>
	                        </c:forEach>
	                    </select>
	                </td>
            </tr>

那我们跳转到add.jsp把我们的1班2班3班转换成动态数据就可以使用<c:forEach></c:forEach>去循环,那这就和list.jsp一样了。我们导入jstl标签库,之后循环把数据进行展示。

好,我们去看一下效果:
新增学生展示那我们可以看到这是一个可选择的年级,那其实呢,这是第二次的展示,第一次只有三个年级,我是直接去数据库又添加了两个年级,之后更新数据,之后刷新页面重新打开就是五个年级,那这就说明我们已经成功的从数据库动态获取年级了。

那当我们点击左下角新增呢是可以回到我们的学生列表数据的,然后可以查看我们新增的学生信息,就会出现错误:
在这里插入图片描述那这是我写的一个路径,那现在是没有内容的额,那我们就去把它填充一下。完善整个新增功能的实现。

实现流程与思想与过程2

2.新增学生的实现流程

2.1实现添加数据到数据库的过程
  1. 当我点击[添加]时,我们在表单提交我们的信息,那这个是以post的方式去提交数据,之后就按照之前那个addStu的路径请求,我们新建一个处理类AddStuServlet去实现功能。
  2. AddStuServlet中我们还是三步走
    1 接收参数;
    2 调取service方法,封装为Student对象,之后会传递给insertStudent的方法,那方法执行完成后会返回一个受影响行数i
    3 之后我们根据受影响的行数去判断去跳转哪一个页面。

新增学生功能实现2

那我们话不多说,直接就是上代码:
我们的第一步接收参数:

		req.setCharacterEncoding("utf-8");//防止乱码
        //1. 接收参数
        String stuNo = req.getParameter("stuNo");
        String stuname = req.getParameter("stuName");
        String gid = req.getParameter("gid");
        String sex = req.getParameter("sex");
        String email = req.getParameter("email");
        String phone = req.getParameter("phone");
        String registered = req.getParameter("registered");
        String address = req.getParameter("address");
        String politics = req.getParameter("politics");
        String idnumber = req.getParameter("idNumber");
        String profession = req.getParameter("profession");
        String introdction = req.getParameter("introdction");

那在第二步调取service之前,要注意的是,我们这次要调取的是StudentService接口:
所以要在StudentService接口中新增一个方法:

/**
     * 新增学生
     */
    public int insertStu(Student student);

那由于我们上面的参数过多啊,总不能一个一个添加,那样太麻烦了,所以我们可以去封装成一个Student对象。
那之后就是同样的,在StudentDao中也去添加一个这样的方法:
那迭代后:

public interface StudentDao {
   
    /**
     * 获取学员的信息列表
     */
    public List<Student> getStudents(String name,String stuno,int sex,int pageIndex,int pageSize);
    /**
     * 获得总条数(基于模糊查询)
     */
    public int total(String name,String stuno,int sex);
    /**
     * 新增学生
     */
    public int insertStu(Student student);
}

之后在相应的StudentServiceImpl中添加:

@Override
    public int insertStu(Student student) {
   
        return dao.insertStu(student);
    }

那我们的StudentDaoImpl会比较麻烦一些,但过程与其他方法类似,
首先编写插入sql语句,之后将对应的数据添加到集合中,之后定义变量i为受影响的行数,之后进行try/catch,然后关闭资源,返回i。

@Override
    public int insertStu(Student student) {
   
        int i = 0;
        //注意对应数据库表的列名,除了stuid不用设置,其他都用占位符,一定要与数据库表的列名一一对应
        try {
   
            String sql="insert into student values(null,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            List params = new ArrayList();
            params.add(student.getStuName());
            params.add(student.getStuNo());
            params.add(student.getSex());
            params.add(student.getPhone());
            params.add(student.getEmail());
            params.add(student.getRegistered());
            params.add(student.getAddress());
            params.add(student.getProfession());
            params.add(student.getIdNumber());
            params.add(student.getPolitics());
            params.add(new Date()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少年,又是你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值