🚀个人主页:欢迎访问Ali.s的首页
⏰ 最近更新:2022年7月31日
⛽ Java框架学习系列:【Spring】【SpringMVC】【Mybatis】
🔥 Java项目实战系列:【飞机大战】【图书管理系统】
⛳ Java基础学习系列:【继承】【封装】【多态】
🏆 通信仿真学习系列:【硬件】【通信】【MATLAB】
🍄 个人简介:通信工程本硕🌈、Java程序员🚴。目前只会CURD😂
💌 点赞 👍 收藏 💗留言 💬 都是我最大的动力💯
文章目录
前言
这里是
【JAVASE】
项目实战的第三节课,接着前面的用户新增功能继续做,今天做的是用户的删除功能,使用
【servlet】
、
【JQuery】
、
【Mysql】
来实现该功能。
一、需求分析
在前面用用户新增功能实现后,可以清楚的看到插入的用户信息,并且能够在前端页面渲染出数据效果,但是在实际的测试过程中出现了中文乱码问题,今天将完善一下中文乱码问题,并且完成用户删除功能。
下面对增加的功能进行需求分析。
当点击每条数据的删除按钮时,就是用户发送了请求,这里由于在
UserServlet
中都是
POST
请求,所以后面在点击按钮触发事件时,应将
action
的
method
设置为
post
方式。用户发送请求后
controller
层的
Servlet
就应该要处理请求,而根据
MVC
架构,
controller
需要调用
service
层的方法,所以将业务逻辑交给
Service
层进行处理,
service
的处理有需要对请求处理的数据与
dao
层的数据进行比对,
dao
层访问数据库信息,对请求数据操作进行校验,并对操作返回数据响应。
二、功能实现
在
dao
层和
service
层中创建接口。这里与新增用户的功能类似,所以前面的功能实现后,这里就相对比较简单。
1.反射机制
这里使用反射机制来统一拿到
Use
r对象的表单信息,避免每次的增删改查都需要去获取
Use
r对象。
private<T>TgetRequestParameterForReflect(HttpServletRequest req,Class<T> cla)throwsInstantiationException,IllegalAccessException{T t=cla.newInstance();//使用反射机制获取表单信息Map<String,String[]> parameterMap = req.getParameterMap();Field[] fields = cla.getDeclaredFields();//对信息判空处理if(fields!=null&& fields.length>0){for(Field field : fields){String[] values = parameterMap.get(field.getName());if(values==null|| values.length==0){continue;}//判断是否是数组类型if(field.getType()==String[].class){//开启访问权限
field.setAccessible(true);try{
field.set(t,values);}catch(IllegalAccessException e){
e.printStackTrace();}//关闭访问权限
field.setAccessible(false);continue;}//不是数组类型
field.setAccessible(true);try{
field.set(t,values[0]);}catch(IllegalAccessException e){
e.printStackTrace();}//关闭访问权限
field.setAccessible(false);continue;}}return t;}
2.控制层
为了避免代码重复,将处理的方法抽象出来,便于调用函数,使代码更加简洁。下面删除用户的方法。
privatevoiddeleteUser(HttpServletRequest req,HttpServletResponse resp)throwsIOException{//获取需要删除的用户的编号String id = req.getParameter("id");//通过service来进行操作Integer count = userService.deleteUser(Integer.parseInt(id));//对判断条数if(count>0){//进行重定向跳转
resp.sendRedirect("/userServlet");}else{//删除失败System.out.println("删除失败……");}}
3.业务层
在接口中调用添加用户的方法,注意返回值为
Integer
,表示影响返回参数
id
的用户信息收到影响。
@OverridepublicIntegerdeleteUser(Integer id){return userDao.delete(id);}
在实现类实现所调用的接口就能完成业务层的处理。
packagecom.song.bookmanagersystem.service;importcom.song.bookmanagersystem.entity.User;importjava.util.List;publicinterfaceUserService{//业务层删除用户IntegerdeleteUser(Integer id);}
4.持久层
在
dao
层要完成信息的查库操作,与数据库的信息进行比对,并返回响应的结果,这是删除的操作,所以返回响应的结果是否删除成功,并且要将数据作为返回值进行传递。
@OverridepublicIntegerdelete(Integer id){QueryRunner queryRunner =DBUtils.getQueryRunner();String sql="delete from t_user where id= ?";try{return queryRunner.update(sql,id);}catch(SQLException e){
e.printStackTrace();}return-1;}
5.乱码问题
在新增用户信息时,当输入的字段信息为中文时,在前端页面和数据库中都有可能出现乱码问题。
针对乱码问题,我们选择在用户发送请求时,将用户输入的信息做字符集编码格式的处理,这样后面的每一步都将可以正常的操作和显示,从源头上解决乱码问题,所以在POST请求时,就设置字符编码格式
req.setCharacterEncoding("UTF-8")
。
protectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置post请求中解码的方式
req.setCharacterEncoding("UTF-8");
String type=req.getParameter(Constant.SERVLET_TYPE_SQLTYPE);if(type!=null&&!"".equals(type)){//对请求进行判断,针对不同的请求进行不同的处理if(Constant.SERVLET_TYPE_SAVE.equals(type)){//进行添加操作try{saveUser(req, resp);}catch(Exception e){
e.printStackTrace();}}elseif(Constant.SERVLET_TYPE_UPDATE.equals(type)){//进行更新操作}elseif(Constant.SERVLET_TYPE_DELETE.equals(type)){//进行删除操作deleteUser(req,resp);}elseif(Constant.SERVLET_TYPE_QUERY.equals(type)){//进行查询操作queryUser(req, resp);}}else{queryUser(req,resp);}}
三、功能测试
启动服务器,让项目在服务器中运行,实现在新增的功能下测试中文的输入是否还存在乱码问题,然后在网页上进行删除用户数据的测试。
页面已经可以正常显示中文字段信息,说明中文乱码问题已经解决,下面测试删除信息的功能。
点击删除按钮后,页面再次跳转回用户信息页面,并且刚刚删除的数据信息已经不存在,在数据库中也不存在该用户信息,说明用户删功能已经完成。
总结
以上就是今天要讲的内容,使用
【Servlet】
【JQuery】
对用户删除功能进行实现,发现能成功删除数据库中的用户信息,并且能够数据返回到前端页面进行渲染,重新返回到用户信息页面,同时解决了中文乱码问题,设置字符编码格式是防止乱码的有效方法。【Mysql】
版权归原作者 Ali.s 所有, 如有侵权,请联系我们删除。