我们点一下修改,发现页面进行了跳转,跳转到了/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;
}
好啦,现在我们的删除代码全部实现了,现在我们来重启项目测试一下:
删除成功!
实现代码已上传~