JSP(二)

添加用户

我们分四步走

1. 创建添加用户的持久层

在dao包内,创建一个接口,里面有一个添加用户的抽象方法

package com.bjsxt.dao; 
import com.bjsxt.pojo.Users; 
import java.util.List; 

/**
 * 用户管理持久层抽象类
 */
public interface UserManagerDao {
	//用户添加的抽象方法
    void insertUser(Users users); 
}


做接口实现类

package com.bjsxt.dao.impl;

import com.bjsxt.commons.JdbcUtils;
import com.bjsxt.dao.UserManagerDao;
import com.bjsxt.pojo.Users;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.List;

/**
 * 用户管理持久层
 */
public class UserManagerDaoImpl  implements UserManagerDao {
	//实现添加用户的方法
    @Override
    public void insertUser(Users users) {
    	//使用jdbc将数据添加到数据库内
        Connection conn = null;
        try{
            //现将Connection事务的自动提交关闭
            conn = JdbcUtils.getConnection();
            conn.setAutoCommit(false);
            PreparedStatement ps = conn.prepareStatement("insert into user3 values(default,?,?,?,?,?)");
            ps.setString(1,users.getUsername());
            ps.setString(2,users.getUserpwd());
            ps.setString(3,users.getUsersex());
            ps.setString(4,users.getPhonenumber());
            ps.setString(5,users.getQqnumber());
            //执行sql语句
            ps.execute();
            //关闭事务
            conn.commit();

        }catch (Exception e){
            e.printStackTrace();
            //调用事务回滚
            JdbcUtils.rollbackConnection(conn);
        }finally{
            JdbcUtils.closeConnection(conn);
        }
    }
 
}

2. 创建添加用户的业务层

在servlet包内,创建一个接口UserManagerService,这个接口内包含了对于用户管理的所有业务

package com.bjsxt.service;

import com.bjsxt.pojo.Users;

/**
 * 包含了对于用户管理的所有业务
 */
public interface UserManagerService {
    void addUser(Users users);
}

实现接口:

package com.bjsxt.service.impl;

import com.bjsxt.dao.UserManagerDao;
import com.bjsxt.dao.impl.UserManagerDaoImpl;
import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserManagerService;

/**
 * 用户管理业务层
 */
public class UserManagerServiceImpl implements UserManagerService {
    /**
     * 添加用户
     */
    @Override
    public void addUser(Users users) {
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        userManagerDao.insertUser(users);

    }
}

3. 创建添加用户的servlet(userManager.do)

创建UserManagerServlet类,用于处理所有的用户请求

package com.bjsxt.web.servlet;

import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserManagerService;
import com.bjsxt.service.impl.UserManagerServiceImpl;

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 java.io.IOException;

/**
 * 处理用户管理请求
 */
@WebServlet("/userManager.do")
public class UserManagerServlet  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
    //可以处理多个请求
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String flag = req.getParameter("flag");
        if ("addUser".equals(flag)){
            this.addUser(req,resp);
        }
    }

    //先获取用户提交数据
    private Users createUsers(HttpServletRequest req){
        String username = req.getParameter("username");
        String userpwd = req.getParameter("userpwd");
        String usersex = req.getParameter("usersex");
        String phonenumber = req.getParameter("phonenumber");
        String qqnumber = req.getParameter("qqnumber");
        Users users = new Users();
        //将获取到的数据都存到user内
        users.setQqnumber(qqnumber);
        users.setPhonenumber(phonenumber);
        users.setUsername(username);
        users.setUserpwd(userpwd);
        users.setUsersex(usersex);
        return users;
    }
    //处理添加用户的请求
    private void addUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //从req内取得用户输入的数据,使用createUsers方法存入users对象内
        Users users = this.createUsers(req);
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            //使用业务层的添加方法,将数据添加到数据库内
            userManagerService.addUser(users);
            //跳转到添加成功页面
            resp.sendRedirect("ok.jsp");
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }
}

4. 创建添加用户的页面

addUser.jsp(上一个文章创建过)

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/2/28 0028
  Time: 18:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css" />
    <link href="../css/style.css" rel="stylesheet" type="text/css" />
    <link href="../css/select.css" rel="stylesheet" type="text/css" />
</head>

<body>

<div class="place">
    <span>位置:</span>
    <ul class="placeul">
        <li><a href="#">用户管理</a></li>
        <li><a href="#">添加用户</a></li>
    </ul>
</div>

<div class="formbody">

    <div class="formtitle"><span>基本信息</span></div>
    <form action="../userManager.do" method="post">
        <input type="hidden"  name="flag" value="addUser"/>
        <ul class="forminfo">
            <li>
                <label>用户名</label>
                <input name="username" type="text" class="dfinput" /></li>
            <li>
            <li>
                <label>用户密码</label>
                <input name="userpwd" type="text" class="dfinput" /><i></i></li>
            <li>
                <label>性别</label><cite>
                <input name="usersex" type="radio" value="1" checked="checked" />&nbsp;&nbsp;&nbsp;&nbsp;
                <input name="usersex" type="radio" value="0" /></li>
            <li>
                <label>联系方式</label>
                <input name="phonenumber" type="text" class="dfinput" />
            </li>
            <li>
                <label>QQ号</label>
                <input name="qqnumber" type="text" class="dfinput" />
            </li>
            <li>
                <label>&nbsp;</label>
                <input  type="submit"  class="btn" value="确认保存" />
            </li>
        </ul>
    </form>
</div>

</body>

</html>


创建操作成功页面(ok.jsp):

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/3/1 0001
  Time: 15:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript">
        function submitForm(){
            window.close();

        }

    </script>
</head>

<body>
<div class="place">
    <span>位置:</span>
    <ul class="placeul">
        <li><a href="#">操作提示</a></li>
    </ul>
</div>

操作成功!

</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加用户的操作完成

查询用户

分四步

1. 创建查询用户持久层

在UsermanagerDao抽象类下添加一个查询用户的抽象方法


/**
 * 用户管理持久层抽象类
 */
public interface UserManagerDao {
    void insertUser(Users users);
    //查询用户的抽象方法
    List<Users> selectUsersByProperty(Users users); 
}

在用户管理持久层的UserManagerDaoImpl类内实现抽象类的抽象方法

   //查询用户
    @Override
    public List<Users> selectUsersByProperty(Users users) {
        Connection conn = null;
        //创建一个list,存放每次查询出来的数据
        List<Users> list = new ArrayList<>();
        try{
            conn = JdbcUtils.getConnection();
            String sql = this.createSQL(users);
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            //执行查询
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                Users user = new Users();
                user.setUserid(resultSet.getInt("userid"));
                user.setPhonenumber(resultSet.getString("phonenumber"));
                user.setQqnumber(resultSet.getString("qqnumber"));
                user.setUserpwd(resultSet.getString("userpwd"));
                user.setUsername(resultSet.getString("username"));
                user.setUsersex(resultSet.getString("usersex"));
                list.add(user);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            JdbcUtils.closeConnection(conn);
        }
        return list;
    }

    //拼接查询的SQL语句
    private String createSQL(Users users){
        StringBuffer stringBuffer = new StringBuffer("select * from user3 where 1=1 ");
        //当查询的元素有值时,就将其拼接到sql查询语句内
        if(users.getUsername() != null && users.getUsername().length() > 0){
            stringBuffer.append(" and username = "+"\""+users.getUsername()+"\"");
        }
        if(users.getUsersex() != null && users.getUsersex().length() > 0){
            stringBuffer.append(" and usersex = "+"\""+users.getUsersex()+"\"");
        }
        if(users.getPhonenumber() != null &&users.getPhonenumber().length() > 0){
            stringBuffer.append(" and phonenumber = "+"\""+users.getPhonenumber()+"\"");
        }
        if(users.getQqnumber() != null && users.getQqnumber().length() > 0){
            stringBuffer.append(" and qqnumber = "+"\""+users.getQqnumber()+"\"");
        }
        return stringBuffer.toString();
    }

2. 创建查询用户业务层

在UserLoginService业务层的抽象类内,添加一个查询的抽象方法

public interface UserManagerService {
    void addUser(Users users);
    //查询的抽象方法
    List<Users> findUser(Users users);
}

在实现类UserManagerServiceImpl.java内实现抽象方法

    /**
     * 查询用户
     */
    @Override
    public List<Users> findUser(Users users) {
        //调用持久层
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        //userManagerDao类的查询方法
        return userManagerDao.selectUsersByProperty(users);
    }

3. 创建查询用户servlet

在处理用户管理请求的UserManagerServlet类内,添加查询用户的代码:

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String flag = req.getParameter("flag");
        if ("addUser".equals(flag)){
            this.addUser(req,resp);
        }else if ("findUser".equals(flag)){
            this.findUser(req,resp);
        }
    }


    /**
     * 处理查询用户请求
     */
    private void findUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        Users user = this.createUsers(req);
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            List<Users> list = userManagerService.findUser(user);
            req.setAttribute("list",list);
            req.getRequestDispatcher("usermanager/viewUser.jsp").forward(req,resp);
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }

4. 创建查询用户与现实结果的页面

创建findUser.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/2/28 0028
  Time: 18:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css" />
    <link href="../css/select.css" rel="stylesheet" type="text/css" />
</head>

<body>

<div class="place">
    <span>位置:</span>
    <ul class="placeul">
        <li><a href="#">用户管理</a></li>
        <li><a href="#">查询用户</a></li>
    </ul>
</div>

<div class="rightinfo">
    <form action="../userManager.do" method="post">
        <input type="hidden" name="flag" value="findUser"/>
        <ul class="prosearch">
            <li>
                <label>查询:</label>
                <i>用户名</i>
                <a>
                    <input name="username" type="text" class="scinput" />
                </a>
            </li>
            <li>
                <label>性别:</label>
                <input name="usersex" type="radio" value="1" checked="checked" />&nbsp;&nbsp;&nbsp;
                <input name="usersex" type="radio" value="0" />&nbsp;</li>
            <li>
                <label>手机号:</label>
                <a>
                    <input name="phonenumber" type="text" class="scinput" />
                </a>
            </li>
            <li>
                <label>QQ号:</label>
                <a>
                    <input name="qqnumber" type="text" class="scinput" />
                </a>
            </li>
            <a>
                <input type="submit" class="sure" value="查询"/>
            </a>
        </ul>
    </form>
</body>
</html>


创建 viewUser.jsp 页面:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/2/28 0028
  Time: 18:03
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
</head>


<body>

<div class="place">
    <span>位置:</span>
    <ul class="placeul">
        <li><a href="#">用户管理</a></li>
        <li><a href="#">查询用户</a></li>
        <li><a href="#">查询结果</a></li>
    </ul>
</div>

<div class="rightinfo">


    <div class="formtitle1"><span>用户列表</span></div>

    <table class="tablelist" >
        <thead>
        <tr>
            <th>序号</th>
            <th>用户名</th>
            <th>用户性别</th>
            <th>手机号</th>
            <th>QQ号</th>
            <th>操作</th>
        </tr>
        </thead>

        <tbody>
        <c:forEach items="${list}" var="user" varStatus="status">
            <tr>
                <td>${status.count}</td>
                <td>${user.username}</td>
                <td>
                    <c:choose>
                        <c:when test="${user.usersex == 1}"></c:when>
                        <c:otherwise></c:otherwise>
                    </c:choose>
                </td>
                <td>${user.phonenumber}</td>
                <td>${user.qqnumber}</td>
                <td><a href="userManager.do?flag=preUpdate&userid=${user.userid}" class="tablelink">修改</a> &nbsp;&nbsp;&nbsp;&nbsp;  <a href="userManager.do?userid=${user.userid}" class="tablelink click"> 删除</a></td>
            </tr>
        </c:forEach>
        </tbody>
    </table>



    <div class="tip">
        <div class="tiptop"><span>提示信息</span><a></a></div>

        <div class="tipinfo">
            <span><img src="images/ticon.png" /></span>
            <div class="tipright">
                <p>是否确认对信息的修改 ?</p>
                <cite>如果是请点击确定按钮 ,否则请点取消。</cite>
            </div>
        </div>

        <div class="tipbtn">
            <input name="" type="button"  class="sure" value="确定" />&nbsp;
            <input name="" type="button"  class="cancel" value="取消" />
        </div>

    </div>




</div>
</body>
</html>

查询结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

预更新查询用户

分四步

1. 创建预更新用户查询持久层

在UserManagerDao类下创建一个抽象方法:

public interface UserManagerDao {
    void insertUser(Users users);
    List<Users> selectUsersByProperty(Users users);
    //查询的抽象方法
    Users selectUserByUserId(int userid); 
}

在UserManagerDaoImpl这个接口实现类下实现抽象方法:


    /**
     * 根据用户的id查询用户
     */
    @Override
    public Users selectUserByUserId(int userid) {
        Connection conn = null;
        Users user = null;
        try{
            conn = JdbcUtils.getConnection();
            PreparedStatement preparedStatement = conn.prepareStatement("select * from user3 where userid = ?");
            preparedStatement.setInt(1,userid);
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                user  = new Users();
                user.setUserid(resultSet.getInt("userid"));
                user.setPhonenumber(resultSet.getString("phonenumber"));
                user.setQqnumber(resultSet.getString("qqnumber"));
                user.setUserpwd(resultSet.getString("userpwd"));
                user.setUsername(resultSet.getString("username"));
                user.setUsersex(resultSet.getString("usersex"));
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            JdbcUtils.closeConnection(conn);
        }
        return user;
    }

2. 创建预更新用户业务层


public interface UserManagerService {
    void addUser(Users users);
    List<Users> findUser(Users users);
    //创建查询的抽象方法
    Users findUserByUserId(int userid);
}

在抽象类UserManagerServiceImpl内实现这个抽象方法:

    /**
     * 预更新用户的查询
     */
    @Override
    public Users findUserByUserId(int userid) {
        //创建持久层对象
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        return userManagerDao.selectUserByUserId(userid);
    }

3. 创建预更新的用户Servlet

在处理用户请求的UserManagerServlet.java页面内

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String flag = req.getParameter("flag");
        if ("addUser".equals(flag)){
            this.addUser(req,resp);
        }else if ("findUser".equals(flag)){
            this.findUser(req,resp);
        }else if("preUpdate".equals(flag)){
            this.preUpdate(req,resp);
        }
    }

   /**
     * 预更新查询
     */
    private void preUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        //获取到输入的id
        String userid = req.getParameter("userid");
        try{
            //创建业务层的对象
            UserManagerService userManagerService = new UserManagerServiceImpl();
            //使用业务层的查询方法根据获取的id查询到user对象
            Users user = userManagerService.findUserByUserId(Integer.parseInt(userid));
            //将user对象放到req内
            req.setAttribute("user",user);
            //携带放着user对象的req,跳转到指定页面
            req.getRequestDispatcher("usermanager/updateUser.jsp").forward(req,resp);
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }

创建更新用户页面

对viewUser.jsp进行修改

 <td>
 <a href="userManager.do?flag=preUpdate&userid=${user.userid}" class="tablelink">修改</a>
 </td>

创建updateUser.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/2/28 0028
  Time: 18:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
</head>

<body>

<div class="place">
    <span>位置:</span>
    <ul class="placeul">
        <li><a href="#">用户管理</a></li>
        <li><a href="#">修改用户</a></li>
    </ul>
</div>

<div class="formbody">

    <div class="formtitle"><span>基本信息</span></div>
    <form action="userManager.do" method="post">
        <input type="hidden" name="flag" value="modifyUser"/>
        <input type="hidden" name="userid" value="${user.userid}"/>
        <ul class="forminfo">
            <li><label>用户名</label><input name="username" type="text" class="dfinput" value="${user.username}"/> </li>
            <li>
                <label>性别</label><cite>
                <c:choose>
                <c:when test="${user.usersex == 1}">
                <input name="usersex" type="radio" value="1" checked="checked" />&nbsp;&nbsp;&nbsp;&nbsp;
                <input name="usersex" type="radio" value="0" /></c:when>
                <c:otherwise>
                <input name="usersex" type="radio" value="1" />&nbsp;&nbsp;&nbsp;&nbsp;
                <input name="usersex" type="radio" value="0" checked="checked" /></c:otherwise>
                </c:choose>

            </li>
            <li><label>手机号</label><input name="phonenumber" type="text" class="dfinput" value="${user.phonenumber}"/></li>
            <li><label>QQ号</label><input name="qqnumber" type="text" class="dfinput" value="${user.qqnumber}"/></li>
            <li><label>&nbsp;</label><input type="submit" class="btn" value="确认保存"/></li>
        </ul>
    </form>
</div>
</body>
</html>
 

效果:
当我们选择修改的数据时,就会获得他在数据库内的id,然后根据id,将获取的数据显示在修改页面上
在这里插入图片描述

更新用户的信息

分四步

创建更新持久层

/**
 * 用户管理持久层抽象类
 */
public interface UserManagerDao {
    void insertUser(Users users);
    List<Users> selectUsersByProperty(Users users);
    //根据id查询到要在更新页面上显示的用户信息
    Users selectUserByUserId(int userid);
    //对修改页上用户信息进行修改操作
    void updateUserByUserId(Users users); 
}

在持久层实现类UserManagerDaoImpl内实现这个抽象方法:


    /**
     * 更新用户信息
     */
    @Override
    public void updateUserByUserId(Users users) {
        Connection conn = null;
        try{
            conn = JdbcUtils.getConnection();
            conn.setAutoCommit(false);
            PreparedStatement preparedStatement = conn.prepareStatement("update user3 set username=? ,usersex = ?,phonenumber=?,qqnumber = ? where userid = ? ");
            preparedStatement.setString(1,users.getUsername());
            preparedStatement.setString(2,users.getUsersex());
            preparedStatement.setString(3,users.getPhonenumber());
            preparedStatement.setString(4,users.getQqnumber());
            preparedStatement.setInt(5,users.getUserid());
            preparedStatement.execute();
            conn.commit();
        }catch (Exception e){
            e.printStackTrace();
            JdbcUtils.rollbackConnection(conn);
        }finally{
            JdbcUtils.closeConnection(conn);
        }
    }

创建更新用户的业务层

在业务层的抽象接口内添加一个抽象方法:

/**
 * 包含了对于用户管理的所有业务
 */
public interface UserManagerService {
    void addUser(Users users);
    List<Users> findUser(Users users);
    Users findUserByUserId(int userid);
    //执行修改操作的抽象方法
    void modifyUser(Users users);
}

在抽象实现类UserManagerServiceImpl内实现这个抽象方法:

    /**
     * 修改用户信息
     */
    @Override
    public void modifyUser(Users users) {
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        userManagerDao.updateUserByUserId(users);
    }

创建更新用户的Servlet

在处理用户管理请求的类UserManagerServlet内,添加关于更新用户的代码:

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String flag = req.getParameter("flag");
        if ("addUser".equals(flag)){
            this.addUser(req,resp);
        }else if ("findUser".equals(flag)){
            this.findUser(req,resp);
        }else if("preUpdate".equals(flag)){
            this.preUpdate(req,resp);
        }else if ("modifyUser".equals(flag)){
            this.modifyUser(req,resp);
        }
    }


    /**
     * 处理更新用户请求
     */
    private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ 
        Users users = this.createUsers(req); 
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            userManagerService.modifyUser(users);
            resp.sendRedirect("ok.jsp");
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }

修改更新用户页面完成用户更新

修改 updateUser.jsp,根据updateUser.jsp的两行代码:

 <input type="hidden" name="flag" value="modifyUser"/>
  <input type="hidden" name="userid" value="${user.userid}"/>

将获取到的id传到servlet内:


    /**
     * 处理更新用户请求
     */
    private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        //获取需要修改的用户id
        String userid = req.getParameter("userid");
        Users users = this.createUsers(req);
        //将userid放到users对象内
        users.setUserid(Integer.parseInt(userid));
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            userManagerService.modifyUser(users);
            resp.sendRedirect("ok.jsp");
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }

修改前:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改后,查询性别为女的用户:
在这里插入图片描述

删除用户

分为四步

1. 创建删除用户的持久层

/**
 * 用户管理持久层抽象类
 */
public interface UserManagerDao {
    void insertUser(Users users);
    List<Users> selectUsersByProperty(Users users);
    //根据id查询到要在更新页面上显示的用户信息
    Users selectUserByUserId(int userid);
    //对用户信息进行修改
    void updateUserByUserId(Users users);
    //根据用户的id去删除用户
    void deleteUserByUserId(int userid);
}

在实现类中实现这个抽象方法:

    /**
     * 根据用户的id去删除用户的信息
     * @param userid
     */
    @Override
    public void deleteUserByUserId(int userid) {
        Connection conn = null;
        try{
            conn = JdbcUtils.getConnection();
            //这里为了演示,手动关闭conn
            conn.setAutoCommit(false);
            PreparedStatement ps = conn.prepareStatement("delete from user3 where userid = ?");
            ps.setInt(1,userid);
            ps.execute();
            conn.commit();
        }catch(Exception e){
            e.printStackTrace();
            JdbcUtils.rollbackConnection(conn);
        }finally{
            JdbcUtils.closeConnection(conn);
        }
    }
    

2. 创建删除用户的业务层

/**
 * 包含了对于用户管理的所有业务
 */
public interface UserManagerService {
    void addUser(Users users);
    List<Users> findUser(Users users);
    Users findUserByUserId(int userid);
    void modifyUser(Users users);
    //删除的抽象方法
    void dropUser(int userid);
}

在实现类UserManagerServiceImpl内实现这个抽象方法:

    /**
     * 删除用户信息
     */
    @Override
    public void dropUser(int userid) {
        UserManagerDao userManagerDao = new UserManagerDaoImpl();
        userManagerDao.deleteUserByUserId(userid);
    }

3. 创建删除用户的Servlet

在UserManagerServletn内添加删除用户的代码:

    //可以处理多个请求
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String flag = req.getParameter("flag");
        if ("addUser".equals(flag)){
            this.addUser(req,resp);
        }else if ("findUser".equals(flag)){
            this.findUser(req,resp);
        }else if("preUpdate".equals(flag)){
            this.preUpdate(req,resp);
        }else if ("modifyUser".equals(flag)){
            this.modifyUser(req,resp);
        }else{
            this.dropUser(req,resp);
        }
    }

   /**
     * 处理删除用户的请求
     */
    private  void dropUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        String userid = req.getParameter("userid");
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            userManagerService.dropUser(Integer.parseInt(userid));
            resp.sendRedirect("ok.jsp");
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }

4. 修改viewUser.jsp完成用户的删除

在viewUser.jsp内添加删除语句:

 <td><a href="userManager.do?flag=preUpdate&userid=${user.userid}" class="tablelink">修改</a> &nbsp;&nbsp;&nbsp;&nbsp;  <a href="userManager.do?userid=${user.userid}" class="tablelink click"> 删除</a></td>

我们先添加一个数据
在这里插入图片描述
添加成功
在这里插入图片描述
删除成功
在这里插入图片描述
查询所有的男性,没有找到被删除的用户信息
在这里插入图片描述

添加中文乱码

在这里插入图片描述
我们可以看出,问题应该出现在将添加的数据存放到sql数据库内这一步,
排查后发现,利用之前文章提过的
Tomcat的使用及Servlet的实践
在这里插入图片描述
可以解决这个问题
对处理用户管理请求的UserManagerServlet类内 用户提交数据的createUsers以及相关的代码进行了修改:

package com.bjsxt.web.servlet;

import com.bjsxt.pojo.Users;
import com.bjsxt.service.UserManagerService;
import com.bjsxt.service.impl.UserManagerServiceImpl;

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 java.io.IOException;
import java.util.List;

/**
 * 处理用户管理请求
 */
@WebServlet("/userManager.do")
public class UserManagerServlet  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
    //可以处理多个请求
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        String flag = req.getParameter("flag");
        if ("addUser".equals(flag)){
            try {
                this.addUser(req,resp);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else if ("findUser".equals(flag)){
            try {
                this.findUser(req,resp);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else if("preUpdate".equals(flag)){
            this.preUpdate(req,resp);
        }else if ("modifyUser".equals(flag)){
            try {
                this.modifyUser(req,resp);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else{
            this.dropUser(req,resp);
        }
    }

    //先获取用户提交数据
    private Users createUsers(HttpServletRequest req) throws Exception {
        String username = req.getParameter("username");
        //设定将发送的请求数据的编码方式从"iso-8859-1" 转为"utf-8"
        String name = new String(username.getBytes("iso-8859-1"),"utf-8");
        String userpwd = req.getParameter("userpwd");
        String usersex = req.getParameter("usersex");
        String phonenumber = req.getParameter("phonenumber");
        String qqnumber = req.getParameter("qqnumber");
        Users users = new Users();
        //将获取到的数据都存到user内
        users.setQqnumber(qqnumber);
        users.setPhonenumber(phonenumber);
        users.setUsername(name);
        users.setUserpwd(userpwd);
        users.setUsersex(usersex);
        return users;
    }
    //处理添加用户的请求
    private void addUser(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        req.setCharacterEncoding("utf-8");
        //从req内取得用户输入的数据,使用createUsers方法存入users对象内
        Users users = this.createUsers(req);
        System.out.println("在addUser方法内获取输入的user信息:"+users.getUsername());
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            //使用业务层的添加方法,将数据添加到数据库内
            userManagerService.addUser(users);
            //跳转到添加成功页面
            resp.sendRedirect("ok.jsp");
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }

    /**
     * 处理查询用户请求
     */
    private void findUser(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        System.out.println("进入查询阶段");
        Users user = this.createUsers(req);
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            List<Users> list = userManagerService.findUser(user);
            req.setAttribute("list",list);
            req.getRequestDispatcher("usermanager/viewUser.jsp").forward(req,resp);
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }
    /**
     * 预更新查询
     */
    private void preUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        //获取到输入的id
        String userid = req.getParameter("userid");
        System.out.println("userid:"+userid);
        try{
            //创建业务层的对象
            UserManagerService userManagerService = new UserManagerServiceImpl();
            //使用业务层的查询方法根据获取的id查询到user对象
            Users user = userManagerService.findUserByUserId(Integer.parseInt(userid));
            //将user对象放到req内
            req.setAttribute("user",user);
            //携带放着user对象的req,跳转到指定页面
            req.getRequestDispatcher("usermanager/updateUser.jsp").forward(req,resp);
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }
    /**
     * 处理更新用户请求
     */
    private void modifyUser(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        //获取需要修改的用户id
        String userid = req.getParameter("userid");
        Users users = this.createUsers(req);
        //将userid放到users对象内
        users.setUserid(Integer.parseInt(userid));
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            userManagerService.modifyUser(users);
            resp.sendRedirect("ok.jsp");
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }
    /**
     * 处理删除用户的请求
     */
    private  void dropUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        String userid = req.getParameter("userid");
        try{
            UserManagerService userManagerService = new UserManagerServiceImpl();
            userManagerService.dropUser(Integer.parseInt(userid));
            resp.sendRedirect("ok.jsp");
        }catch(Exception e){
            e.printStackTrace();
            resp.sendRedirect("error.jsp");
        }
    }
}

这样,我们添加数据获取到的汉字格式就对了在这里插入图片描述

修改之后的汉字格式也正确

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值