JSP&Servlet(8)——使用Servlet实现增删改查

效果展示

显示所有用户

添加用户

修改用户

删除用户

代码结构

源码

java

User.java

用户实体类。

package bean;

import java.io.Serializable;

public class User implements Serializable {
    private int id;
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

UserDao.java

操作users表的一些方法。

package dao;

import bean.User;
import utils.DBUtils;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao implements Serializable {
    /**
     * 查找数据库中的所有记录
     *
     * @return 返回查询结果集合
     */
    public List<User> selectAll() {
        // 存储查询结果集的集合
        List<User> userList = new ArrayList<>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "select * from users";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 获取结果集对象
            rs = ps.executeQuery();
            // 对结果集进行遍历
            while (rs.next()) {
                // 实例化User对象
                User user = new User();
                // 进行赋值
                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                // 将User对象添加到集合中
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, rs);
        }
        return userList;
    }

    /**
     * 查询用户通过用户id
     *
     * @param id 用户id
     * @return 返回查询用户
     */
    public User selectById(int id) {
        // 定义一个User对象
        User user = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "select id, username, password from users where id=?";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 设置参数
            ps.setInt(1, id);
            // 获取结果集对象
            rs = ps.executeQuery();
            // 对结果集进行遍历
            while (rs.next()) {
                // 实例化User对象
                user=new User();
                // 对User进行赋值
                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, rs);
        }
        return user;
    }

    /**
     * 通过id删除记录
     *
     * @param id 用户id
     * @return 返回受影响行数
     */
    public int deleteById(int id) {
        int count = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "delete from users where id=?";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 对参数进行赋值
            ps.setInt(1, id);
            // 执行删除
            count = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, null);
        }
        return count;
    }

    /**
     * 添加用户
     *
     * @param user 用户对象
     * @return 返回受影响行数
     */
    public int addUser(User user) {
        int count = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "insert into users(username, password) values (?,?);";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 对参数进行赋值
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            // 执行增加
            count = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, null);
        }
        return count;
    }

    /**
     * 更新用户
     *
     * @param user 用户
     * @return 返回受影响行数
     */
    public int updateUser(User user) {
        // 受影响行数
        int count = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "update users set username=?,password=? where id=?";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 对参数进行赋值
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            ps.setInt(3, user.getId());
            // 执行更新
            count = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, null);
        }
        return count;
    }
}

UserServlet.java

处理前端传来的数据,并作出响应的Servlet。

package servlet;

import bean.User;
import dao.UserDao;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

public class UserServlet extends HttpServlet {
    private UserDao userDao = new UserDao();

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求的编码
        request.setCharacterEncoding("UTF-8");
        // 设置响应的编码
        response.setContentType("text/html;charset=UTF-8");
        // 获取action
        String action = request.getParameter("action");
        // 对action进行判断
        if (action.equals("userList")) {// 如果参数是userList则显示所有用户列表
            // 获取用户列表集合
            List<User> userList = userDao.selectAll();
            // 获取请求的session
            HttpSession session = request.getSession();
            // 设置session
            session.setAttribute("userList", userList);
            // 跳转user_list.jsp页面
            request.getRequestDispatcher("user_list.jsp").forward(request, response);
        } else if (action.equals("add")) {// 如果参数是add则是添加用户
            // 获取用户名
            String username = request.getParameter("username");
            // 获取密码
            String password = request.getParameter("password");
            // 添加到数据库
            int i = userDao.addUser(new User(username, password));
            // 对添加结果进行判断
            if (i > 0) {
                response.getWriter().println("<script>alert('添加用户成功!');window.location.href='userServlet?action=userList';</script>");
            } else {
                response.getWriter().println("<script>alert('添加用户失败!');window.location.href='add_user.jsp';</script>");
            }
        } else if (action.equals("del")) {// 如果参数是del则是删除用户
            // 获取要删除的id
            String id = request.getParameter("id");
            // 调用数据库方法进行删除操作
            int i = userDao.deleteById(Integer.parseInt(id));
            // 对删除结果进度判断
            if (i > 0) {
                response.getWriter().println("<script>alert('删除用户成功!');window.location.href='userServlet?action=userList';</script>");
            } else {
                response.getWriter().println("<script>alert('删除用户失败!');window.location.href='userServlet?action=userList';</script>");
            }
        } else if (action.equals("edit")) {// 如果参数是edit则是将要修改的参数保存到session中传输到edit_user.jsp页面进行显示
            // 获取要修改的id
            String id = request.getParameter("id");
            // 通过id查询用户
            User user = userDao.selectById(Integer.parseInt(id));
            // 保存到session中,然后在edit_user.jsp中使用
            request.getSession().setAttribute("user", user);
            // 跳转到edit_user.jsp页面
            request.getRequestDispatcher("edit_user.jsp").forward(request, response);
        } else if (action.equals("update")) {// 如果参数是update则是将修改后的数据保存到数据库中
            // 获取id
            String id = request.getParameter("id");
            // 获取修改后的用户名
            String username = request.getParameter("username");
            // 获取修改后的密码
            String password = request.getParameter("password");
            // 将修改更新到数据库中
            int i = userDao.updateUser(new User(Integer.parseInt(id), username, password));
            // 对更新结果进行判断
            if (i > 0) {// 如果更新成功
                response.getWriter().println("<script>alert('编辑用户成功!');window.location.href='userServlet?action=userList';</script>");
            } else {
                response.getWriter().println("<script>alert('编辑用户失败!');window.location.href='userServlet?action=userList';</script>");
            }
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

DBUtils.java

获取数据库连接对象和释放数据库资源的方法。

package utils;

import java.sql.*;

public class DBUtils {
    /**
     * 获取数据库连接对象
     * @return 返回数据库连接对象
     */
    public static Connection getConnection(){
        Connection connection=null;
        try {
            // 加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 获取连接对象
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/servletdemo","root","admin");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * 释放数据库连接资源
     * @param connection 数据库连接对象
     * @param statement 数据库执行对象
     * @param resultSet 数据库结果集对象
     */
    public static void release(Connection connection, Statement statement, ResultSet resultSet){
        // 关闭resultSet
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        // 关闭statement
        if(statement!=null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        // 关闭connection
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

web

index.jsp

该页面是主页面,主要是通过超链接使用userServlet从数据库读取数据并显示在user_list.jsp中。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
</head>
<body>
<a href="userServlet?action=userList">显示所有用户</a>
</body>
</html>

user_list.jsp

该JSP页面通过一个表格来显示所有用户情况。

<%@ page import="bean.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8"/>
    <!-- 新 Bootstrap 核心 CSS 文件 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
    <script src="js/jquery.min.js"></script>

    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="js/bootstrap.min.js"></script>
    <title>显示所有用户</title>
</head>
<body>
<%
    List<User> userList = (ArrayList<User>) session.getAttribute("userList");
%>
<a class="btn btn-info" href="add_user.jsp">添加用户</a>
<table class="table table-hover table-bordered">
    <tr>
        <td>序号</td>
        <td>用户名</td>
        <td>密码</td>
        <td>操作</td>
    </tr>
    <%
        for (User user : userList) {
    %>
    <tr>
        <td>
            <%=user.getId()%>
        </td>
        <td>
            <%=user.getUsername()%>
        </td>
        <td>
            <%=user.getPassword()%>
        </td>
        <td>
            <a class="btn btn-info" href="userServlet?action=del&id=<%=user.getId()%>">删除</a>
            &nbsp;&nbsp;
            <a class="btn btn-danger" href="userServlet?action=edit&id=<%=user.getId()%>">编辑</a>
        </td>
    </tr>
    <%
        }
    %>
</table>
</body>
</html>

add_user.jsp

该JSP页面是用来添加用户

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8"/>
    <!-- 新 Bootstrap 核心 CSS 文件 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
    <script type="text/javascript" src="js/jquery.min.js"></script>

    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <title>添加用户</title>
</head>
<body>
<div class="container-fluid">
    <div class="form-horizontal">
        <form action="userServlet?action=add" method="post">
            <div class="form-group">
                <label class="text-muted col-lg-1">用户名:</label>
               <div class="col-lg-4">
                   <input class="form-control" type="text" name="username">
               </div>
            </div>
            <div class="form-group">
                <label class="text-muted col-lg-1">密码:</label>
                <div class="col-lg-4">
                    <input class="form-control" type="text" name="password">
                </div>
            </div>
            <div class="form-group">
                <input class="btn btn-success" type="submit" value="添加">
                <input class="btn btn-warning" type="reset" value="重置">
            </div>
        </form>
    </div>
</div>
</body>
</html>

edit_user.jsp

该JSP用来修改编辑用户相关信息的。

<%@ page import="bean.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8"/>
    <!-- 新 Bootstrap 核心 CSS 文件 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
    <script src="js/jquery.min.js"></script>

    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="js/bootstrap.min.js"></script>
    <title>编辑</title>
</head>
<body>
<%
    User user = (User) session.getAttribute("user");
%>
<div class="container-fluid">
    <div class="form-horizontal">
        <form action="userServlet?action=update" method="post">
            <input type="hidden" name="id" value="<%=user.getId()%>"><br>
            <div class="form-group">
                <label class="text-muted col-lg-1">用户名:</label>
                <div class="col-lg-4">
                    <input class="form-control" type="text" name="username" value="<%=user.getUsername()%>">
                </div>
            </div>
            <div class="form-group">
                <label class="text-muted col-lg-1">密码:</label>
                <div class="col-lg-4">
                    <input class="form-control" type="text" name="password" value="<%=user.getPassword()%>">
                </div>
            </div>
            <div class="form-group">
                <input class="btn btn-success" type="submit" value="编辑">
                <input class="btn btn-warning" type="reset" value="重置">
            </div>
        </form>
    </div>
</div>
</body>
</html>

web.xml

用来注册Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--用户Servlet-->
    <servlet>
        <servlet-name>UserServlet</servlet-name>
        <servlet-class>servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UserServlet</servlet-name>
        <url-pattern>/userServlet</url-pattern>
    </servlet-mapping>
    <!--欢迎页面-->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

db.sql

数据库建表和测试SQL

# 创建数据库
create database servletdemo;
# 创建users表
create table users(
  id int not null primary key auto_increment comment '编号',
  username varchar(20) not null comment '用户名',
  password varchar(50) not null comment '密码'
);
# 插入一些测试数据
insert into users(username,password) values ('张三','123456');
insert into users(username,password) values ('李四','123456');
insert into users(username,password) values ('王五','123456');
insert into users(username,password) values ('赵六','123456');

 

如果对完整源码感兴趣。

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【CSDN201910062004】可获取本节源码。

 

  • 7
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值