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");
}
}
执行结果如下: