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);
}
}