Bootstrap

基于Javaweb实现ATM机系统开发实战(四)用户修改删除功能实现

我们点一下修改,发现页面进行了跳转,跳转到了/toUpdate,并传递了用户的卡号。

 我们可以先查看一下用户列表展示界面的前端代码:userlist.jsp,可以看到前端代码中做了跳转的动作,我们需要在后端中完成相应的servlet完成这个动作。

 首先,创建UserToUpdateServlet,对用户更新操作的请求进行页面跳转

package com.atm.servlet;

import com.atm.pojo.User;
import com.atm.service.UserService;
import com.atm.service.impl.UserServiceImpl;

import javax.print.attribute.standard.PresentationDirection;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/toUpdate")
public class UserToUpdateServlet extends HttpServlet {
    private UserService userService=new UserServiceImpl();
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String icno=request.getParameter("icno");
    try{
        User user=userService.getUserByIcno(icno);
        if(user==null){
            request.getSession().setAttribute("error","用户不存在");
        }
        request.getSession().setAttribute("user",user);
        response.sendRedirect("changepage/update.jsp");
    }catch (Exception e){
        e.printStackTrace();
    }
    }

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


}

要完成修改操作,首先要在用户的修改界面进行数据回显,要显示出这些数据,首先要完成他的查询,所以我们在UserService中添加他的查询方法:

    //根据银行卡号查询用户信息
    public User getUserByIcno(String icno)throws Exception;

然后再他的实现类(UserServiceImpl)中去实现这个方法:

//根据银行卡号查询用户信息
    public User getUserByIcno(String icno) throws Exception{
        return userDao.getUserByIcno(icno);
    }

实现类中调用我们的Dao也就是我们的数据层进行了查询操作,所以在dao中也要对这个方法进行实现:

    //根据银行卡号查询用户信息
    public  User getUserByIcno(String icno)throws  Exception{
        Connection connection= DBUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("select * from user where icno=?");
        preparedStatement.setString(1,icno);
        ResultSet resultSet=preparedStatement.executeQuery();
        User user=new User();
        if (resultSet.next()){
            user.setIcno(resultSet.getString(1));
            user.setName(resultSet.getString(2));
            user.setPwd(resultSet.getString(3));
            user.setMobile(resultSet.getString(4));
            user.setIdcard(resultSet.getString(5));
            user.setBalance(resultSet.getDouble(6));
        }
        DBUtils.release(connection,preparedStatement,resultSet);
        return user;
    }

这样我们的后端代码就完成了,我们启动项目测试一下修改界面的跳转和回显是否正常:

发现页面跳转和回显功能都正常了,现在我们就可以完成修改操作了:

查看前端页面,我们发现提交修改这个动作跳转到了/update的前端界面。

 所以我们还需要创建一个servlet来接收请求完成数据更新的操作:

package com.atm.servlet;

import com.atm.pojo.User;
import com.atm.service.UserService;
import com.atm.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

//执行用户更新操作
@WebServlet("/update")
public class UserUpdateServlet extends HttpServlet {

    private UserService userService=new UserServiceImpl();
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
//获得参数
        String icno=request.getParameter("icno");
        String name=request.getParameter("name");
        String pwd=request.getParameter("pwd");
        String mobile=request.getParameter("mobile");
        String idcard=request.getParameter("idcard");
        double balance=0;
        if(request.getParameter("balance")!=null){
        balance=Double.parseDouble(request.getParameter("idcard"));
        User user=new User();
        user.setIcno(icno);
        user.setBalance(balance);
        user.setName(name);
        user.setPwd(pwd);
        user.setMobile(mobile);
        user.setIdcard(idcard);
//调用业务
        try{
            boolean result=userService.updateUser(user);
            if(result){
                response.sendRedirect("/list");
            }else{
                response.getOutputStream().print("更新失败");
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }}

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


}

这里我们调用了UserService接口,但是接口中并没有这个方法,所以我们先在接口中完成这个方法:

    //更新用户
    public boolean updateUser(User user)throws Exception;

再在实现类中实现这个方法:


    //更新用户
    public boolean updateUser(User user)throws Exception{
        int num =userDao.updateUser(user);
        if(num>=1){
            return true;
        }else{
            return false;
        }
    }

实现类中调用了dao数据层进行数据库的操作,所以在数据层中我们也要实现这个功能的方法:

    //更新用户
    public int updateUser(User user) throws  Exception{
        Connection connection= DBUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("update user set name=?,pwd=?,mobile=?,idcard=?,balance=? where icno=?");
        preparedStatement.setString(1,user.getName());
        preparedStatement.setString(2,user.getPwd());
        preparedStatement.setString(3,user.getMobile());
        preparedStatement.setString(4,user.getIdcard());
        preparedStatement.setDouble(5,user.getBalance());
        preparedStatement.setString(6,user.getIcno());
        int num = preparedStatement.executeUpdate();

        DBUtils.release(connection,preparedStatement,null);
        return num;
    }

因为卡号是用户的唯一凭证,为了安全,我们要在前端将卡号信息设置为不可修改:

 这里我们就已经完成了修改操作的全部代码了,重启下项目测试下修改功能是否成功:

 

 修改成功啦!接下来我们继续删除功能的实现:

我们先点一下删除,发现页面进行了跳转,跳转到/delete的前端页面,并传递了卡号。

 首先我们先随便加一条数据,方便删除功能的测试:

 还是刚刚的老步骤,先创建servlet进行数据接收和请求处理、页面跳转:

package com.atm.servlet;

import com.atm.service.UserService;
import com.atm.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/delete")
public class UserDeleteServlet extends HttpServlet {
    private UserService userService=new UserServiceImpl();
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String icno=request.getParameter("icno");
    try{


    boolean result=userService.deleteUser(icno);
    if(result){
        response.sendRedirect("/list");
    }else{
        response.getOutputStream().print("删除失败");
    }}catch (Exception e){
        e.printStackTrace();
    }}

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


}

还是老样子,接口实现:

    //用户删除
    public boolean deleteUser(String icno)throws Exception;

实现类实现:

    //用户删除
    public boolean deleteUser(String icno)throws Exception{
        int num =userDao.deleteUser(icno);
        if(num>=1){
            return true;
        }else{
            return false;
        }
    }

数据层操作:


    //删除用户
    public int deleteUser(String icno) throws Exception{
        Connection connection= DBUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("delete from user where icno=?");
        preparedStatement.setString(1,icno);
        int num = preparedStatement.executeUpdate();
        DBUtils.release(connection,preparedStatement,null);
        return num;
    }

好啦,现在我们的删除代码全部实现了,现在我们来重启项目测试一下:

 删除成功!

实现代码已上传~

;