Servlet+JSP+三层架构(代码重构)实现单表的增删改查

1.项目目录
在这里插入图片描述
在这里插入图片描述
entity层

Student

package cn.yf.entity;

public class Student {
	
	//根据数据库的字段来建立数据封装类
	private int id;
	private String name;
	private int age;
	private String address;
	
	public Student(String name, int age, String address) {
		super();
		this.name = name;
		this.age = age;
		this.address = address;
	}
	
	public Student(int id, String name, int age, String address) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.address = address;
	}
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + ", getId()=" + getId()
				+ ", getName()=" + getName() + ", getAge()=" + getAge() + ", getAddress()=" + getAddress()
				+ ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
				+ "]";
	}
}

util工具栏

DBUtil

package cn.yf.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.tomcat.dbcp.dbcp.DbcpException;

//通用的数据库操作方法
public class DBUtil {
	
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8";
	private static final String USERNAME="root";
	private static final String PASSWORD="admin";
	public static Connection connection = null;
	public static PreparedStatement ps = null;
	public static ResultSet rs = null;
	
	//获取连接
	public static Connection getConnection() throws ClassNotFoundException, SQLException{
		Class.forName("com.mysql.jdbc.Driver");
		connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
		return connection;
	}
	
	//获得PreparedStatement
	public static PreparedStatement getPreparedStatement(String sql,Object[] params) throws SQLException, ClassNotFoundException{
		PreparedStatement ps = DBUtil.getConnection().prepareStatement(sql);
		if(params!=null){
			for(int i=0;i<params.length;i++){
				ps.setObject(i+1, params[i]);
			}
		}
		return ps;
	}
	
	//关闭方法
	public static void closeAll(ResultSet rs, Statement s, Connection c){
		try{
			if(rs!=null) rs.close();
			if(s!=null) s.close();
			if(connection!=null) connection.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
	
	
	//通用的增删改
	public static boolean executeUpdate(String sql,Object[] params){
		
		try{
			PreparedStatement ps =DBUtil.getPreparedStatement(sql, params);
			int count = ps.executeUpdate();
			if(count>0){
				return true;
			}else{
				return false;
			}
		}catch(ClassNotFoundException e){
			e.printStackTrace();
			return false;
		}catch(SQLException e){
			e.printStackTrace();
			return false;
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}finally{
			closeAll(null, ps, connection);
		}
	}
	
	//通用的查
	public static ResultSet executeQuery(String sql,Object[] params){
		try{
			PreparedStatement ps = DBUtil.getPreparedStatement(sql, params); 
			rs = ps.executeQuery();
			return rs;
		}catch(ClassNotFoundException e){
			e.printStackTrace();
			return null;
		}catch(SQLException e){
			e.printStackTrace();
			return null;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
}
}

dao层

IStudentDao(接口)

package cn.yf.dao;

import java.util.List;

import cn.yf.entity.Student;

public interface IStudentDao {
	
		//根据学号查询学生
		public  Student queryStudentById(int id);
		
		//查询此学生是否存在
		public boolean isExist(int id);
		
		//添加学生
		public boolean addStudent(Student student);
			
		
		//根据学号删除学生
		public boolean deleteStudentById(int id);
			
		
		//根据学号修改该学生信息为student
		public boolean updateStudentById(int id,Student student);
			
		
		//查询到所有学生
		public List<Student> queryAllStudents();
	
}

StudentDaoImpl(实现类)

package cn.yf.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.yf.dao.IStudentDao;
import cn.yf.entity.Student;
import cn.yf.util.DBUtil;

public class StudentDaoImpl implements IStudentDao {
	

	//添加学生
	public boolean addStudent(Student student){
		String sql = "insert into student values(?,?,?,?)";
		Object params[] = {student.getId(),student.getName(),student.getAge(),student.getAddress()};
		boolean result = DBUtil.executeUpdate(sql, params);
		return result;
	
	}
	
	//根据学号删除学生
	public boolean deleteStudentById(int id){
		String sql = "delete from student where id = ?";
		Object params[] = {id};
		boolean result = DBUtil.executeUpdate(sql, params);
		return result;
		
	}
	
	//根据学号修改该学生信息为student
	public boolean updateStudentById(int id,Student student){
			String sql = "update student set name = ?,age = ?,address = ? where id = ?";
			Object params[] = {student.getName(),student.getAge(),student.getAddress(),id};
			boolean result = DBUtil.executeUpdate(sql, params);
			return result;
	}
	
	//根据学号查询学生
		public Student queryStudentById(int id){
			ResultSet rs = null;
			Student student = null;
			try{
				String sql = "select * from student where id = ?";
				Object params[] = {id};
				rs = DBUtil.executeQuery(sql, params);
				if(rs.next()){
					int id1 = rs.getInt("id");
					String name1 = rs.getString("name");
					int age1 = rs.getInt("age");
					String address1 = rs.getString("address");
					student = new Student(id1,name1,age1,address1);
				}
				return student;
			}catch(SQLException e){
				e.printStackTrace();
				return null;
			}catch(Exception e){
				e.printStackTrace();
				return null;
			}finally{
				DBUtil.closeAll(rs, DBUtil.ps, DBUtil.connection);
			}
		}
	
	//查询到所有学生
	public List<Student> queryAllStudents(){
		ResultSet rs = null;
		Student student = null;
		List<Student> students = new ArrayList<Student>();
		try{
			String sql = "select * from student";
			rs = DBUtil.executeQuery(sql, null);
			while(rs.next()){
				int id1 = rs.getInt("id");
				String name1 = rs.getString("name");
				int age1 = rs.getInt("age");
				String address1 = rs.getString("address");
				student = new Student(id1,name1,age1,address1);
				students.add(student);
			}
			return students;
		}catch(SQLException e){
			e.printStackTrace();
			return null;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}finally{
			try{
				if(rs!=null) rs.close();
				if(DBUtil.ps!=null) DBUtil.ps.close();
				if(DBUtil.connection!=null) DBUtil.connection.close();
			}catch(SQLException e){
				e.printStackTrace();
			}
		}
	}
	
	//查询此学生是否存在
		public boolean isExist(int id){
			return queryStudentById(id)==null?false:true;
		}

}

service层

IStudentService(接口)

package cn.yf.service;

import java.util.List;

import cn.yf.entity.Student;

public interface IStudentService {
	//添加学生
	public boolean addStudent(Student student);
	
	//删除学生
	public boolean deleteStudentById(int id);
	
	//修改学生信息
	public boolean updataStudentById(int id, Student student);
	
	//根据学号查询学生
	public Student queryStudentById(int id);
	
	//查询所有学生
	public List<Student> queryAllStudents();
}

StudentServiceImpl(实现类)

package cn.yf.service.impl;

import java.util.List;

import cn.yf.dao.IStudentDao;
import cn.yf.dao.impl.StudentDaoImpl;
import cn.yf.entity.Student;
import cn.yf.service.IStudentService;

public class StudentServiceImpl implements IStudentService {
	
	IStudentDao studentDao = new StudentDaoImpl();
	
	//添加学生
	public boolean addStudent(Student student){
		
		if(!studentDao.isExist(student.getId())){
			studentDao.addStudent(student);
			return true;
		}else{
			System.out.println("用户已经存在!");
			return false;
		}
		
	}
	
	//删除学生
	public boolean deleteStudentById(int id){
		if(studentDao.isExist(id)){
			return studentDao.deleteStudentById(id);
		}else{
			return false;
		}
	}
	
	//修改学生信息
	public boolean updataStudentById(int id, Student student){
		if(studentDao.isExist(id)){
			return studentDao.updateStudentById(id, student);
		}else{
			return false;
		}
	}
	
	//根据学号查询学生
	public Student queryStudentById(int id){
		return studentDao.queryStudentById(id);
	}
	
	//查询所有学生
	public List<Student> queryAllStudents(){
		return studentDao.queryAllStudents();
	}
	
}

Servlet(作用相当于Controller)

QueryAllStudents(通过请求转发将数据存放在request域中,然后在index.jsp中取出来,我在xml中将此Servlet设置为默认访问路径,所以我们打开项目会先访问此Servlet,将数据出来然后显示出来)

package cn.yf.servlet;

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;

import cn.yf.entity.Student;
import cn.yf.service.IStudentService;
import cn.yf.service.impl.StudentServiceImpl;

/**
 * Servlet implementation class QueryAllStudents
 */
@WebServlet("/QueryAllStudents")
public class QueryAllStudents extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public QueryAllStudents() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		IStudentService ss = new StudentServiceImpl();
		List<Student> students= ss.queryAllStudents();
		//System.out.println(students);
		//因为request域中有数据,因此需要通过请求转发的方式跳转
		request.setAttribute("students", students);
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

index.jsp

<%@page import="cn.yf.entity.Student"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="js/jquery.min.js" ></script>
<script type="text/javascript">
	$(document).ready(function(){
		$("tr:odd").css("background","lightgray");
	});
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>学生信息列表</title>
</head>
<body>
	
	<%
		String error = (String)request.getAttribute("error");
		if(error!=null){
			if(error.equals("error")){
				out.println("添加失败!");
			}else if(error.equals("noError")){
				out.println("添加成功!");
			}
		}
	%>
	
	<table border="1px">
    		<tr>
    			<th>学号</th>
    			<th>姓名</th>
    			<th>年龄</th>
    			<th>操作</th>
    		</tr>
    		<%	
    			//获得request域中的数据
    			List<Student> students = (List<Student>)request.getAttribute("students");
    			for(Student s : students){
    		%>
    		<tr>
    			<td><a href="QueryStudentById?id=<%=s.getId()  %>"><%=s.getId()  %></a></td>
    			<td><%=s.getName() %></td>
    			<td><%=s.getAge() %></td>
    			<td><a href="DeleteStudentServlet?id=<%=s.getId()  %>">删除</a></td>
    		</tr>
    		<%
    			}
    		%>
    	</table>
    	<a href="add.jsp">新增</a>
</body>
</html>

然后是删除功能的实现

DeleteStudentServlet
我们在index.jsp点击删除后**a href=“DeleteStudentServlet?id=<%=s.getId() %>”**会访问到DeleteStudentServlet,并且将要删除数据的id传过去,然后调用Service层写好的代码即可。删除成功后重定向到QueryAllStudents刷新数据展示页面

package cn.yf.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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 cn.yf.service.IStudentService;
import cn.yf.service.impl.StudentServiceImpl;

/**
 * Servlet implementation class DeleteStudentServlet
 */
@WebServlet("/DeleteStudentServlet")
public class DeleteStudentServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DeleteStudentServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		IStudentService ss = new StudentServiceImpl();
		int id = Integer.parseInt(request.getParameter("id"));
		boolean result = ss.deleteStudentById(id);
		PrintWriter pr = response.getWriter();
		if(result){
			pr.println("删除成功");
			response.sendRedirect("QueryAllStudents");
		}else{
			pr.println("删除失败");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

查询单条数据功能是通过点击id访问QueryStudentById,然后请求转发到studentInfo.jsp,将所有数据呈现出来,并且在这个页面实现对数据的更新。
当点某一条数据的id时href=“QueryStudentById?id=<%=s.getId() %>”><%=s.getId() %>
同样的将id传过去,然后使用Service层封装好的方法得到Student数据对象,然后存放在request域中,然后请求转发到studentInfo.jsp中将数据取出并且展示出来。
QueryStudentById

package cn.yf.servlet;

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 cn.yf.entity.Student;
import cn.yf.service.IStudentService;
import cn.yf.service.impl.StudentServiceImpl;

/**
 * Servlet implementation class QueryStudentById
 */
@WebServlet("/QueryStudentById")
public class QueryStudentById extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public QueryStudentById() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		int id = Integer.parseInt(request.getParameter("id"));
		IStudentService ss = new StudentServiceImpl();
		Student s = ss.queryStudentById(id);
		System.out.println(s);
		//将此人的信息通过前台jsp显示
		request.setAttribute("student", s);
		request.getRequestDispatcher("studentInfo.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

studentInfo.jsp

<%@page import="cn.yf.entity.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		Student s = (Student)request.getAttribute("student");
		
	%>
	<!-- 通过表单展示此人! -->
	<form action="UpdateStudentServlet" method="post">
    		学号:<input type="text" name="id" value="<%= s.getId() %>" /><br />
    		姓名:<input type="text" name="name" value="<%=s.getName()  %>" /><br />
    		年龄:<input type="text" name="age" value="<%=s.getAge() %>" /><br />
    		地址:<input type="text" name="address" value="<%=s.getAddress()  %>" /><br />
    		<input type="submit" value="修改学生信息">
    		<a href="QueryAllStudents">返回</a>
    </form>
</body>
</html>

更新功能实现

UpdateStudentServlet(同样的当更新成功后,重定向到QueryAllStudents将更新的数据展示出来,更新数据)

package cn.yf.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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 cn.yf.entity.Student;
import cn.yf.service.IStudentService;
import cn.yf.service.impl.StudentServiceImpl;

/**
 * Servlet implementation class UpdateStudentServlet
 */
@WebServlet("/UpdateStudentServlet")
public class UpdateStudentServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UpdateStudentServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		IStudentService ss = new StudentServiceImpl();
		int id = Integer.parseInt(request.getParameter("id"));
		String name = request.getParameter("name");
		int age = Integer.parseInt(request.getParameter("age"));
		String address = request.getParameter("address");
		Student s = new Student(name,age,address);
		boolean result = ss.updataStudentById(id, s);
		PrintWriter pw = response.getWriter();
		if(result){
			pw.println("修改成功");
			response.sendRedirect("QueryAllStudents");
		}else{
			pw.println("修改失败");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

添加功能的实现

AddStudentServlet(一样的请求转发到QueryAllStudents,更新数据然后展示)

package cn.yf.servlet;

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 cn.yf.entity.Student;
import cn.yf.service.IStudentService;
import cn.yf.service.impl.StudentServiceImpl;

/**
 * Servlet implementation class AddStudentServlet
 */
@WebServlet("/AddStudentServlet")
public class AddStudentServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddStudentServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=UTF-8");
		int id = Integer.parseInt(request.getParameter("id"));
		String name = request.getParameter("name");
		int age = Integer.parseInt(request.getParameter("age"));
		String address = request.getParameter("address");
		Student student = new Student(id,name,age,address);
		
		IStudentService ss = new StudentServiceImpl();
		//添加学生
		boolean result = ss.addStudent(student);
//		if(result){
//			response.getWriter().println("添加成功");
//			
//		}else{
//			response.getWriter().println("添加失败");
//		}
		if(!result){//如果添加失败在request域中添加数据
			request.setAttribute("error", "error");
		}else{
			request.setAttribute("error", "noError");
		}
		//response.sendRedirect("QueryAllStudents");
		request.getRequestDispatcher("QueryAllStudents").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值