Day6 删除和添加学生信息

1.删除学生信息

1.1实现jsp文件

       ( 1 ) 要想实现删除学生信息,首先需要在页面显示中出现可删除的按键才行,为了简单实现该功能,我们选择先建立一个超链接,利用点击链接,转到tuDelServlet的方式来实现删除信息。

       ( 2 ) 而链接就需要考虑如何选择路径了,绝对路径?相对路径?

        如果选择绝对路径,那要想在服务器中访问该资源,就要知道具体的ip地址,但是ip地址是会变化的,所以不能保证每次都会访问的到。

        如果选择相对路径,要注意该页面可能是被不同路径的不同文件打开的,那么对应不同文件的相对路径是不同的,我们也无法保证每次都可以访问的到。 

        因此要选择带El表达式的绝对路径${request.contextPath}/StuCour/StuDelServlet,其中${request.contextPath}表示上一次访问的ip地址,因为前后访问的ip是一样的,所以这样可以保证每次打开都可以访问的到。

        ( 3 )在页面中,每一个delete对应的网址都一样,那怎么才能知道我们要删除的是哪个呢?

        这就需要我们在跳转网址的时候传递信息了,在网址后加入 ?名字=属性 即可表示传递信息,如${request.contextPath}/StuCour/StuDelServlet?id=${stu.id}表示跳转${request.contextPath}/StuCour/StuDelServlet页面时,传递id属性,值为${stu.id}。

        具体实现代码如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import ="java.util.*,student.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
		<table border = "1">


	      		<tr>  <th>No.</th> <th>name</th> <th>sex</th><th>age</th><th>operation</th> </tr>
	    <c:forEach items="${requestScope.stus}" var="stu">
			<tr>
				<td>${ stu.id }</td>
				<td>${ stu.name }</td>
				<td>${ stu.sex }</td>
				<td>${ stu.age }</td>
				<td><a href="${request.contextPath}/StuCour/StuDelServlet?id=${stu.id}"> delete</a></td>
			</tr>
		</c:forEach>
	</table>

</body>
</html>

结果如下:

1.2实现StuDaoImp文件中的del(int id)方法

  •         连接数据库
  •         执行删除语句

        具体代码如下:

package student.dao.imp;

import java.util.ArrayList;
import java.util.List;

import java.sql.*;

import student.dao.StuDao;
import student.model.*;
public class StuDaoImp implements StuDao{

	@Override
	public List<Student> listAll() {
		// TODO Auto-generated method stub
		Connection con = null;
		ArrayList <Student> stus = new ArrayList <Student> ();
		try { 
			Class.forName("com.mysql.jdbc.Driver"); 
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stucour" ,"root" ,"");  
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery("select * from student");
			
			while(rs.next())
			{
				Student stu = new Student();
				stu.setId(rs.getInt("id"));
				stu.setName(rs.getString("name"));
				stu.setSex(rs.getString("sex"));
				stu.setAge(rs.getInt("age"));
				stus.add(stu);
			}

		}catch(Exception e)
			{
				e.printStackTrace();
			}
		try {
			con.close();
		}catch (Exception e1) {
			e1.printStackTrace();
		}
	    return stus;

	
	}

	@Override
	public Student listById(int id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean save(Student stu) {
		// TODO Auto-generated method stub
		return false;
	}
	

	@Override
	public boolean update(Student stu) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean del(int id) {
		// TODO Auto-generated method stub
		Connection con = null;
		try { 
			Class.forName("com.mysql.jdbc.Driver"); 
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stucour" ,"root" ,"");  
			Statement st = con.createStatement();
			st.execute("delete  from student where id ="+id);
			return true;
		}catch(Exception e)
			{
				e.printStackTrace();
			    return false;
			}finally {
				try{con.close();}
				catch(Exception e1)
				{
					e1.printStackTrace();
				}
			}
		
	}
}

1.3实现StuService中的del(int id)方法

  •         实现StuDao.del(int id)
package student.service.imp;

import java.util.List;

import student.dao.imp.StuDaoImp;
import student.dao.StuDao;
import student.model.Student;
import student.service.StuService;

public class StuServiceImp implements StuService{
	StuDao stuDao = new StuDaoImp();
	@Override
	public List<Student> listAll() {
		// TODO Auto-generated method stub


			return stuDao.listAll();
	}

	@Override
	public Student listById(int id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean save(Student stu) {
		// TODO Auto-generated method stub
		return stuDao.save(stu);
	}

	@Override
	public boolean update(Student stu) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean del(int id) {
		// TODO Auto-generated method stub
		return stuDao.del(id);
	}

}

1.4实现StuDelServlet代码

  •         接收id
  •         执行del()方法
  •         返回浏览界面

        具体代码如下:

package student.controller;
import student.model.Student;
import student.service.*;
import student.service.imp.StuServiceImp;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class StuDelServlet
 */
@WebServlet("/StuDelServlet")
public class StuDelServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String id = request.getParameter("id");
		StuService stuService = new StuServiceImp();
		stuService.del(  Integer.parseInt(id));
		response.sendRedirect("StuListServlet");
		
	}

}

2.添加学生信息

2.1实现add_stu.jsp文件

        (1)相较于delete,add功能需要填入需要添加的具体信息,所以在实现add功能时,需要跳转到一个新的页面,使得能够输入信息,完成添加功能。以下是stu_list.jsp代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import ="java.util.*,student.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
		<table border = "1">


	      		<tr>  <th>No.</th> <th>name</th> <th>sex</th><th>age</th><th>operation</th> </tr>
	    <c:forEach items="${requestScope.stus}" var="stu">
			<tr>
				<td>${ stu.id }</td>
				<td>${ stu.name }</td>
				<td>${ stu.sex }</td>
				<td>${ stu.age }</td>
				<td><a href="${request.contextPath}/StuCour/StuDelServlet?id=${stu.id}"> delete</a></td>
			</tr>
		</c:forEach>
	</table>
	<a href="${request.contextPath}/StuCour/StuAddServlet">insert student</a>
</body>
</html>

        注意为什么不直接跳转到stu_add.jsp资源去?不是更加方便么?就是因为约定大于配置,跳转界面都需要跳转至Servlet中去,再由它决定要跳转到哪个资源去,直接跳转可以,但是不规范。

        (2)注意如果想利用jsp代码传数据,需要在需要的数据处标记一下属性name="....",否则不会传代码过去。

        像radio等单选多选的按钮,需要标记属性value="..",否者不知道传送的数据是何值。

        如果使用GET方法,则在浏览器网址中,我们可以看到传送的数据有哪些,分别是什么。POST方法则在网址中看不到,但是仍可以通过检查页面得知传送数据。一般使用POST方法进行传输数据。

        具体add_stu.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<form action="${request.contextPath}/StuCour/StuAddServlet" method="post">
		id:<input type="text" name="id"> <br>
		name:<input type="text" name="name"> <br>
		sex:<input type="radio" name="sex" value="m">m 
		<input type="radio" name="sex" value="w">w <br>
		age:<input type="text" name="age"> <br>
		<input type="submit">
		<input type="reset">
	</form>
</body>
</html>

2.2实现StuAddDaoImp的save方法

  •         实现连接
  •         实现sql代码

        具体代码(save)实现如下:

package student.dao.imp;

import java.util.ArrayList;
import java.util.List;

import java.sql.*;

import student.dao.StuDao;
import student.model.*;
public class StuDaoImp implements StuDao{

	@Override
	public List<Student> listAll() {
		// TODO Auto-generated method stub
		Connection con = null;
		ArrayList <Student> stus = new ArrayList <Student> ();
		try { 
			Class.forName("com.mysql.jdbc.Driver"); 
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stucour" ,"root" ,"");  
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery("select * from student");
			
			while(rs.next())
			{
				Student stu = new Student();
				stu.setId(rs.getInt("id"));
				stu.setName(rs.getString("name"));
				stu.setSex(rs.getString("sex"));
				stu.setAge(rs.getInt("age"));
				stus.add(stu);
			}

		}catch(Exception e)
			{
				e.printStackTrace();
			}
		try {
			con.close();
		}catch (Exception e1) {
			e1.printStackTrace();
		}
	    return stus;

	
	}

	@Override
	public Student listById(int id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean save(Student stu) {
		// TODO Auto-generated method stub
		Connection con = null;
		try { 
			Class.forName("com.mysql.jdbc.Driver"); 
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stucour" ,"root" ,"");  
			String sql = "insert into student values(?,?,?,?)";
			PreparedStatement pst = con.prepareStatement(sql);
			pst.setInt(1,stu.getId());
			pst.setString(2,stu.getName());
			pst.setString(3,stu.getSex());
			pst.setInt(4,stu.getAge());
			pst.execute();
			return true;
		}catch(Exception e)
			{
				e.printStackTrace();
			    return false;
			}finally {
				try{con.close();}
				catch(Exception e1)
				{
					e1.printStackTrace();
				}
			}
		
	}
	

	@Override
	public boolean update(Student stu) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean del(int id) {
		// TODO Auto-generated method stub
		Connection con = null;
		try { 
			Class.forName("com.mysql.jdbc.Driver"); 
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/stucour" ,"root" ,"");  
			Statement st = con.createStatement();
			st.execute("delete  from student where id ="+id);
			return true;
		}catch(Exception e)
			{
				e.printStackTrace();
			    return false;
			}finally {
				try{con.close();}
				catch(Exception e1)
				{
					e1.printStackTrace();
				}
			}
		
	}
}

2.3实现StuAddServiceImp的save方法

  •         实现实现StuDao.save(Student stu)

        具体代码实现如下:

package student.service.imp;

import java.util.List;

import student.dao.imp.StuDaoImp;
import student.dao.StuDao;
import student.model.Student;
import student.service.StuService;

public class StuServiceImp implements StuService{
	StuDao stuDao = new StuDaoImp();
	@Override
	public List<Student> listAll() {
		// TODO Auto-generated method stub


			return stuDao.listAll();
	}

	@Override
	public Student listById(int id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean save(Student stu) {
		// TODO Auto-generated method stub
		return stuDao.save(stu);
	}

	@Override
	public boolean update(Student stu) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean del(int id) {
		// TODO Auto-generated method stub
		return stuDao.del(id);
	}

}

2.4实现StuAddServlet代码

        1.doGet

  •                 跳转add_stu.jsp资源

        2.doPost

  •                 接收用户输入学生信息
  •                 实现学生信息添加保存
  •                 返回主界面
package student.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import student.model.Student;
import student.service.StuService;
import student.service.imp.StuServiceImp;

/**
 * Servlet implementation class StuAddServlet
 */
@WebServlet("/StuAddServlet")
public class StuAddServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.getRequestDispatcher("student/stu_add.jsp").forward(request, response);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String id = req.getParameter("id");
		String name = req.getParameter("name");
		String sex = req.getParameter("sex");
		String age = req.getParameter("age");
		Student stu = new Student();
		stu.setId(Integer.parseInt(id));
		stu.setName(name);
		stu.setSex(sex);
		stu.setAge(Integer.parseInt(age));
		StuService stuService = new StuServiceImp();
		stuService.save(stu);
		resp.sendRedirect("StuListServlet");
	}

}

执行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值