JavaWeb之简单的学生信息管理系统(三)

今日任务:实现学生管理系统的删除更新、修改模糊查询功能!

一、删除学生信息

点击超链接,弹出一个询问是否删除的对话框,如果点击了确定,删除此学生的信息。

1. 超链接执行一个js方法
<a href="#" onclick="doDelete(${stu.sid})">删除</a>

在doDelete()方法里判断点击的选项,然后跳转到DeleteServlet。

<script type="text/javascript">
	function doDelete(sid){
		//如果这里弹出的对话框,用户点击的是确定,就去请求servlet
		var flag = confirm("确定删除?");
		if(flag){
			//表明确定删除。则访问servlet,在当前标签页上打开超链接
			window.location.href = "DeleteServlet?sid="+sid;
		}
	}
</script>
2. DeleteServlet收到了请求,然后去调用service,service去调用dao。
  1. DeleteServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try {
			//1.接受id
			int sid = Integer.parseInt(request.getParameter("sid"));
			
			//2.执行删除
			StudentService service = new StudentServiceImpl();
			service.delete(sid);
			
			//3.跳转到列表页
			request.getRequestDispatcher("StudentListServlet").forward(request,response);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
  1. StudentDao.java & StudentService.java
	/**
	 * 根据id删除学生
	 * @param sid
	 * @throws SQLException
	 */
	void delete(int sid) throws SQLException;
  1. StudentDaoImpl.java & StudentServiceImpl.java
public class StudentDaoImpl implements StudentDao {
	
	@Override
	public void delete(int sid) throws SQLException {
		QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
		String sql = "delete from stu where sid=?";
		runner.update(sql,sid);
		
	}

}
public class StudentServiceImpl implements StudentService{
	@Override
	public void delete(int sid) throws SQLException {
		StudentDao dao = new StudentDaoImpl();
		dao.delete(sid);
		
	}	
}
3. 删除结果如下:

删除id = 3的学生的信息
在这里插入图片描述
在这里插入图片描述

二、更新(修改)学生信息
1. 点击列表上的更新,跳转到EditServlet上
<a href="EditServlet?sid=${stu.sid }">更新</a>
2. 在EditServlet里面,根据id查询这个学生的所有信息
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try {
			//1.接受id
			int sid = Integer.parseInt(request.getParameter("sid"));
			
			//2.查询学生数据
			StudentService service = new StudentServiceImpl();
			Student stu = service.findStudentById(sid);
			
			//3.显示数据
			//存数据
			request.setAttribute("stu", stu);
			//跳转
			request.getRequestDispatcher("edit.jsp").forward(request, response);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
	}
3. 跳转到更新页面edit.jsp,在edit.jsp上显示数据

原来的学生信息如图所示,我们修改编号为2的学生的电话为11111。
点击更新,跳转到该学生的修改页面,如下:
在这里插入图片描述

修改页面代码如下:

<body>

	<h3>更新学生页面</h3>
	
	<form action="UpdateServlet" method="post">
		<input type="hidden" name="sid" value="${stu.sid }">
		<table border="1" width="600">
			<tr>
				<td>姓名</td>
				<td><input type="text" name="sname" value="${stu.sname }"></td>
			</tr>
			<tr>
				<td>性别</td>
				<td>
					<!-- 
					如果性别是男的,可以在男的性别input标签里面出现checked;
					如果性别是女的,可以在女的性别input标签里面出现checked;
					 -->
					<input type="radio" name="gender" value=""
						<c:if test="${stu.gender == '' }">checked</c:if>
					>男
					<input type="radio" name="gender" value=""
						<c:if test="${stu.gender == '' }">checked</c:if>
					>女
				</td>
			</tr>
			<tr>
				<td>电话</td>
				<td><input type="text" name="phone" value="${stu.phone }"></td>
			</tr>
			<tr>
				<td>生日</td>
				<td><input type="text" name="birthday" value="${stu.birthday }"></td>
			</tr>
			<tr>
				<td>爱好</td>
				<td>
					<!-- 
					例如:爱好有篮球,足球,看书
					由于爱好有很多歌,里面存在包含关系
					 -->
					<input type="checkbox" name="hobby" value="游泳"
						<c:if test="${fn:contains(stu.hobby,'游泳') }">checked</c:if>
					>游泳
					<input type="checkbox" name="hobby" value="篮球"
						<c:if test="${fn:contains(stu.hobby,'篮球') }">checked</c:if>
					>篮球
					<input type="checkbox" name="hobby" value="足球"
						<c:if test="${fn:contains(stu.hobby,'足球') }">checked</c:if>
					>足球
					<input type="checkbox" name="hobby" value="看书"
						<c:if test="${fn:contains(stu.hobby,'看书') }">checked</c:if>
					>看书
					<input type="checkbox" name="hobby" value="写字"
						<c:if test="${fn:contains(stu.hobby,'写字') }">checked</c:if>
					>写字
				</td>
			</tr>
			<tr>
				<td>简介</td>
				<td>
					<textarea rows="3" cols="20" name="info">${stu.info }</textarea>
				</td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="更新"></td>
			</tr>
		</table>
	</form>
	

</body>

修改该学生的电话为11111,如下:
在这里插入图片描述

4. 修改完数据,提交数据到UpdateServlet

【备:代码与AddServlet代码相似,唯一的不同点就是:提交上来的数据是没有带id的,我们需要手动创建一个隐藏的输入框,在这里面给定id的值,以便提交表单时,带上id。

<input type="hidden" name="sid" value="${stu.sid }">

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		try {
			//1.获取客户端提交上来的数据
			int sid = Integer.parseInt(request.getParameter("sid"));
			System.out.println(sid);
			String sname = request.getParameter("sname");
			System.out.println(sname);
			String gender = request.getParameter("gender");
			String phone = request.getParameter("phone");
			String birthday = request.getParameter("birthday");  //传过来是1989-10-18
			String info = request.getParameter("info");
			 
			//String hobby = request.getParameter("hobby");
			String [] h = request.getParameterValues("hobby");
			//[篮球,足球,写字]-----篮球,足球,写字
			String hobby = Arrays.toString(h);
			hobby = hobby.substring(1,hobby.length()-1);
			
			//String-------Date
			Date date = new SimpleDateFormat("yyyy-MM-dd").parse(birthday);
			Student student = new Student(sid,sname,gender,phone,hobby,info,date);
			
			//2.更新数据库数据
			StudentService service = new StudentServiceImpl();
			service.update(student);
			
			//3.跳转界面
			request.getRequestDispatcher("StudentListServlet").forward(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	
	}
5. 获取数据,调用service,调用dao
  1. StudentDao.java & StudentService.java
	/**
	 * 更新学生信息
	 * @param student  需要更新的学生数据
	 * @throws SQLException
	 */
	void update(Student student) throws SQLException;
  1. StudentDaoImpl.java
public class StudentDaoImpl implements StudentDao {
	@Override
	public void update(Student student) throws SQLException {
		QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
		String sql = "update stu set sname=? , gender=? , phone=? , birthday=? , hobby=? , info=? where sid=?";
		runner.update(sql, 
				student.getSname(),
				student.getGender(),
				student.getPhone(),
				student.getBirthday(),
				student.getHobby(),
				student.getInfo(),
				student.getSid()
				
				);
		
	}

}
  1. StudentServiceImpl.java
public class StudentServiceImpl implements StudentService{
	@Override
	public void update(Student student) throws SQLException {
		
		StudentDao dao = new StudentDaoImpl();
		dao.update(student);
	}	
}
6. 更新(修改)学生信息结果如下:

在这里插入图片描述

三、模糊查询
1. 在list.jsp加入进行查询的文本框
<form action="SearchStudentServlet" method="post">
	
		<table border="1" width="700">
			
			<tr>
				<td colspan="8">
					按姓名查询:<input type="text" name="sname"/>
					&nbsp;&nbsp;&nbsp;
					按性别查询:<select name="sgender">
									<option value="">--请选择--
									<option value=""><option vale=""></select>
					&nbsp;&nbsp;&nbsp;	
					<input type="submit" value="查询">
					&nbsp;&nbsp;&nbsp;
					<a href="add.jsp">添加</a>
				</td>
			</tr>
		</table>
	</form>

实现效果如下图所示:
在这里插入图片描述

2. 在SearchServlet里面,查询符合查询条件的学生信息

代码实现如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		try {
			//1.取到了要查询的关键数据:姓名,性别
			String sname = request.getParameter("sname");
			String sgender = request.getParameter("sgender");
			
			//2.查询
			StudentService service = new StudentServiceImpl();
			List<Student> list = service.searchStudent(sname, sgender);
			
			request.setAttribute("list", list);
			
			//3.跳转界面--列表界面
			request.getRequestDispatcher("list.jsp").forward(request, response);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

例如:查询所有性别为男的学生信息;
在这里插入图片描述
查询结果如下:
在这里插入图片描述

3. 获取数据,调用service,调用dao
  1. StudentDao.java & StudentService.java
/**
	 * 模糊查询,根据姓名或者根据性别,或者两者兼有
	 * @param sname
	 * @param sgender
	 * @return  List<Student>
	 * @throws SQLException
	 */
	List<Student> searchStudent(String sname,String sgender) throws SQLException;
  1. StudentDaoImpl.java【这是一个需要注意的部分!!!】
	@Override
	public List<Student> searchStudent(String sname, String sgender) throws SQLException {
		QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
		/**
		 * 如果只有姓名 select * from stu where sname like?;
		 * 如果只有性别 select * from stu where gender=?
		 * 如果两个都有 select * from stu where sname like? and gender=?
		 * 如果两个都没有就查询所有
		 */
		String sql = "select * from stu where 1=1 ";
		List<String> list = new ArrayList<String>();
		
		//判断是否有姓名,如果有,就组拼到sql语句里
		if(!TestUtils.isEmpty(sname)) {
			sql = sql + "and sname like ?";
			list.add("%"+sname+"%");
		}
		//判断是否有性别,如果有,就组拼到sql语句里
		if(!TestUtils.isEmpty(sgender)) {
			sql = sql + "and gender = ?";
			list.add(sgender);
		}
		
		
		return runner.query(sql, new BeanListHandler<Student>(Student.class),list.toArray());
		
	}
  1. StudentServiceImol…java
@Override
	public List<Student> searchStudent(String sname, String sgender) throws SQLException {
		StudentDao dao = new StudentDaoImpl();
		return dao.searchStudent(sname, sgender);
	}
发布了32 篇原创文章 · 获赞 3 · 访问量 1352

猜你喜欢

转载自blog.csdn.net/weixin_44270855/article/details/104231634