第一天总结 之 用户管理界面的实现 之 模糊查询和分页操作

news2024/10/7 12:26:19

第一天总结 之 用户管理界面的实现 之 模糊查询和分页操作

1、明确页面的跳转

当登录操作执行时  
          如果正确 跳转到   UserFuzzySelectServlet  即用户模糊查询的select    
   注:因为第一次写项目  对于很多操作都不熟悉  很多前期操作没         有  按着 见名之意 的方式命名    如:用户模糊查询的select  正常书写应该为 UserFuzzySelectServlet  而我第一天书写时 写的为 UserFuzzyServlet   对于后续操作 需周知
          如果错误 跳转到  登录界面  

2、用户管理前端页面的展示

这是通过直接打开jsp页面获取的界面展示
很明显看出 模糊查询是通过姓名 或 性别 如果两个都不选为查询所有的数据
在这里插入图片描述

3、UserFuzzySelectServlet的书写

 因为是select  在MVC框架中  应放在controller层下
 即:第一步  在controller下 创建 UserFuzzySelectServlet 

在这里插入图片描述
如果未找到servlet 可按下图操作在这里插入图片描述

在这里插入图片描述

 创建 UserFuzzySelectServlet  
         在dopost()下调用doset();
  在doget()方法下 进行下列操作
      1、设置请求和响应的字符集  防止中文乱码  
      2、获取当前的页码  如果为null  设置为1
      3、设置每页显示的数据个数
      4、获取前端 模糊查询 时的 依据   如 姓名  性别 
      5、通过 姓名 性别 当前页码 每页数据  进行查询
        姓名 对应sql语句中 模糊查询的  username  like   "模糊查询传的值"
        性别 对应sql中    sex = "前端传过来的性别数据"
        当前页码 和 每页的数据  对应sql语句中 的  limit  当前页码*每页数据  , 每页数据
        limit  0,5  代表 从第0条数据开始  选择前5条数据
      6、将查询出来的数据  以list集合的形式存放到 request 域中 
         从而使得  前端页面能够获取到  并且从中获取数据 展示在页面上
      7、转发数据到 前端页面  

其中 UserFuzzySelectServlet代码如下:

package com.qfedu.controller;

import com.qfedu.entity.User;
import com.qfedu.service.UserService;
import com.qfedu.service.impl.UserServiceImpl;

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

//注解的方式  设置路径
@WebServlet(name = "UserFuzzyServlet", value = "/UserFuzzyServlet")
public class UserFuzzyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求字符集 防止中文乱码
        request.setCharacterEncoding("utf-8");

        String pageNo = request.getParameter("pageNo");
        if(pageNo==null){
            pageNo="1";
        }
        Integer pNo=Integer.valueOf(pageNo);
        int pageSize=4;

        //获取前端  模糊查询  的username和sex
        String username = request.getParameter("username");
        String sex = request.getParameter("sex");

        UserService userService =new UserServiceImpl();
        //调用service  获取一页的所有数据
        List<User> users = userService.getOnePageUsers(username,sex,pNo,pageSize);
        //将users集合存到 request域中
        request.setAttribute("users",users);

        //获取总的页数
        int pageCount=0;
        pageCount = userService.getpageCount(pageSize);
        request.setAttribute("pageNo",pNo);
        request.setAttribute("pageCount",pageCount);
        //转发到前端页面
        request.getRequestDispatcher("/after/user.jsp").forward(request,response);
    }

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

UserServiceImpl 中 getOnePageUsers代码如下

@Override
    public List<User> getOnePageUsers(String username,String sex,int pNo,int pageSize) {
        Object[] objs={(pNo-1)*pageSize,pageSize};
        String condition=null;
        if(username !=null&&!"".equals(username)&&sex!=null&&!"".equals(sex)){
            //SELECT * FROM t_user WHERE 1=1 AND sex = "男" AND username LIKE "%a%" LIMIT 0,3
            condition=" and sex = \""+sex+"\" and username like \"%"+username+"%\" ";
        }else if (username != null && !"".equals(username)) {
            condition = " AND username LIKE \"%"+ username+"%\"";
        }else if( sex != null && !"".equals(sex)){
            condition = " AND sex=\""+sex+"\"";
        } else {
            condition = "";
        }
        return userDao.getOnePageUsers(condition,objs);
    }

UserDaoImpl 中的 getOnePageUsers代码如下

@Override
    public List<User> getOnePageUsers(String condition,Object[] objs) {
        String sql="select * from t_user where 1=1 "+condition+" limit ?,? ";
        return super.query(sql,objs,User.class);
    }

在前端代码中 展示数据 其中的部分代码截图如下
在这里插入图片描述
从而实现数据在前端页面的展示
效果图如下
在这里插入图片描述

4、遇到的问题与解决方法

测试上下页和 模糊查询 发现存在一处bug

当我 通过 模糊查询 查询数据时 即 我 查询带a的名字的数据 然后发现 查询的没有问题 但当我 点击下一页 之后 发现 我第二页的数据为 全部数据的第二页

解决方法:
在request 域中 设置两个 标识 ua ub 代表模糊查询的 username 和 sex 在servlet中 添加判断操作 如果当前的 页面传过来的 username和sex 都为null 则获取ua和ub 将username 和 sex的设置为ua ub对应的值
然后进行查询操作 最后再 重新设置一下ua ub

修改后UserFuzzySelectServlet 的代码如下

package com.qfedu.controller;

import com.qfedu.entity.User;
import com.qfedu.service.UserService;
import com.qfedu.service.impl.UserServiceImpl;

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

@WebServlet(name = "UserFuzzySelectServlet", value = "/UserFuzzySelectServlet")
public class UserFuzzySelectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求字符集 防止中文乱码
        request.setCharacterEncoding("utf-8");

        String pageNo = request.getParameter("pageNo");
        if(pageNo==null){
            pageNo="1";
        }

        Integer pNo=Integer.valueOf(pageNo);
        int pageSize=4;

        //获取前端  模糊查询  的username和sex
        String username = request.getParameter("username");
        String sex = request.getParameter("sex");
//        System.out.println("username="+username);
//        System.out.println("sex="+sex);
//        System.out.println("///");

        if(  (username ==null||"".equals(username))&& (sex==null||"".equals(sex)) ){
            username=request.getParameter("ua");
            sex=request.getParameter("ub");
//            System.out.println("username="+username);
//            System.out.println("sex="+sex);
//            System.out.println("!!!!");
        }

        UserService userService =new UserServiceImpl();
        //调用service  获取一页的所有数据
        List<User> users = userService.getOnePageUsers(username,sex,pNo,pageSize);
        //将users集合存到 request域中
        request.setAttribute("users",users);
//        System.out.println(users);

        //获取总的页数
        int pageCount=0;
        pageCount = userService.getpageCount(username,sex,pageSize);
        request.setAttribute("pageNo",pNo);
        request.setAttribute("pageCount",pageCount);
//        System.out.println("pNo="+pNo);
//        System.out.println("pageCount="+pageCount);


        request.setAttribute("ua",username);
        request.setAttribute("ub",sex);
        //转发到前端页面
        request.getRequestDispatcher("/after/user.jsp").forward(request,response);
    }

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

前端页面的 跳转部分 进行略微修改 原因:request域中的属性 仅只支持一次请求 之后销毁 所以我通过 跳转的url 携带上 ua和ub 从而实现 点击下一页或上一页 ua ub 依然存在
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/169418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

迎兔年 贺新春 | vLive虚拟直播新年场景上线!

为了带来更为舒适的用户体验给用户提供更好的线上活动品质vLive虚拟直播2.3.1版本进行了优化升级还有多个新春场景上新全新升级的vLive又增添了哪些亮点一起来快速了解一下吧场景上新&#xff1a;新春活动更出彩农历新春降至如何让拜年视频更出众&#xff1f;如何让新年直播更精…

【C++】为什么C++会支持函数重载

文章目录 函数重载 1.概念 2.支持函数重载的原理 2.1准备知识 2.2原理 函数重载 1.概念 在C语言中&#xff0c;是不允许同名函数存在的。但是在一个作用域种&#xff0c;比如加法函数&#xff0c;想要实现各种类型的数据相加&#xff0c;要定义多个函数&#xff0c;但是…

设计模式-七大原则

设计模式 聚合 设计模式追求的是 1.代码重用性&#xff08;相同功能的代码不用重复编写&#xff09; 2.可读性&#xff08;规范性&#xff0c;便于其他程序员阅读和理解&#xff09; 3.可扩展性&#xff08;增加新的功能非常方便&#xff09; 4.可靠性&#xff08;增加新的…

【国产可编程逻辑控制器plc调研】

国产可编程逻辑控制器plc调研1 高性能PLC&#xff08;ACxxx系列&#xff09;2 中型PLC&#xff08;AMx00系列&#xff09;3 小型PLC&#xff08;HxU、HxS&#xff09;4 小型紧凑型PLC&#xff08;Easy&#xff09;[新品]总结由于有国产化的需求&#xff0c;所以调研了一家国内的…

Internet Download Manager2023下载器Win系统经典下载工具

IDM下载器是一款非常经典的多线程下载工具&#xff0c;广受国内外用户喜爱。该软件专注于文件下载&#xff0c;没有任何多余功能&#xff0c;也没有烦人的弹窗广告打扰&#xff0c;简单易操作。特别是站点抓取功能&#xff0c;对于网站整站下载非常的好用。 整站下载器有很多&…

shell-将密码输入错误超过4次的IP地址通过firewalld防火墙阻止访问

应用场景&#xff1a;防止恶意IP尝试ssh登录 脚本说明&#xff1a;将密码输入错误超过四次得ip地址通过iptable防火墙访问。 分析&#xff1a; 首先&#xff0c;需要知道ssh远程访问记录在哪一个文件中 /var/log/secure其次&#xff0c;模拟远程访问输错密码&#xff0c;查…

数字化+智能化,低代码平台助力能源行业创新赋能

编者按&#xff1a;能源行业数字化转型需求发杂&#xff0c;定制化要求高&#xff0c;低代码平台对于能源行业来说可谓是“专业对口”。本文分析了能源行业数字化转型的痛点和需求&#xff0c;并进一步指出低代码平台的在能源行业中的应用价值&#xff0c;最后介绍了老牌低代码…

破解版IDM导致电脑反复闪屏的解决方案

破解版IDM导致电脑反复闪屏的解决方案 概括&#xff1a; 进入安全模式&#xff0c;卸载IDM&#xff0c;结束 文章目录破解版IDM导致电脑反复闪屏的解决方案问题原因解决方式&#xff1a;问题原因 在使用IDM(Internet Download Manager)的破解版下载文件时突然电脑闪屏&#…

分享5款开年必备的工具软件

最近陆陆续续收到好多小伙伴的咨询&#xff0c;这边也是抓紧时间整理出几个好用的软件&#xff0c;希望可以帮到大家。 1. 影像处理——GIMP GIMP 提供了各种的影像处理工具&#xff0c;滤镜&#xff0c;还有许多的组件模块&#xff0c;对于要制作一个又酷又炫的网页按钮或网…

华为机试题:HJ15 求int型正整数在内存中存储时1的个数(python)

文章目录知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。2、print() &#xff1a;打印输出。3、int() &#xff1a;将一个字符串或数字转换为十进制整数&#xff08;强转&#xff09;。输入可以指定进制&#xff0c;…

JUC面试(二)——JUCJMMvolatile 2.0

JUC&JMM JMM 不保证原子性 各个线程对主内存中共享变量的操作都是各个线程各自拷贝到自己的工作内存进行操作后在写回到主内存中的。 这就可能存在一个线程AAA修改了共享变量X的值&#xff0c;但是还未写入主内存时&#xff0c;另外一个线程BBB又对主内存中同一共享变量…

【项目实战】基于XStream实现漏洞信息数据(XML格式)的手动导入功能

一、背景 项目中需要实现漏洞信息数据的手动导入功能 以下是导入的XML文件所在地址&#xff1a;https://www.cnnvd.org.cn/home/loophole 二、实现思路 &#xff08;1&#xff09;前端实现&#xff08;ElementUIAvue&#xff09; &#xff08;2&#xff09;后端实现 三、…

一文读懂eslint和prettier

为什么会有eslint和prettier&#xff0c;他们有什么作用 首先&#xff0c;工具的出现都是为了解决一定的问题。 团队写代码风格不一样&#xff0c;书写方式不一致&#xff0c;导致整个项目同一类型代码出现多种写法&#xff0c;或者不严谨、或者不美观。或者是提交git时&#…

秒杀功能、高并发系统关注的问题、秒杀系统设计-59

一&#xff1a;秒杀 1.1 特点 秒杀具有瞬间高并发的特点&#xff0c;针对这一特点&#xff0c;必须要做限流 异步 缓存 &#xff08; 页面静态化&#xff09;。 1.2 限流方式 前端限流&#xff0c;一些高并发的网站直接在前端页面开始限流&#xff0c;例如&#xff1a;小…

Python 生成 svg 图片,一篇博客带你掌握 Python 与 svg 之间的操作

python svgwritePython 操作 SVG 图片的库清单svgwrite 库svgwrite 库其他图形绘制储备反爬技术 svgwrite 生成一个手机号Python 操作 SVG 图片的库清单 在 Python 中&#xff0c;可以使用以下几种库来生成 SVG 图片&#xff1a; svgwrite&#xff1a;这是一个简单易用的 Pyt…

民生银行联手火山引擎,一场“1+1>2”的金融数字化征程

数字化时代下&#xff0c;信息成为企业生长的升维秘钥。管理学者德鲁克在《21世纪的管理挑战》一书中指出&#xff0c;我们正经历着一场信息革命。其中特别提出&#xff0c;不是某种软硬件的革命&#xff0c;而是“信息”被使用和利用的方式转变了。近年来&#xff0c;金融行业…

【终极UI/UX工具包】上海道宁与Infragistics助力您简化程序开发,​创建精美应用程序

​​​​​​​​​​​​​​ Infragistics Ultimate是 开发者的UI/UX工具包 可以简化程序开发 加速从设计到代码的应用程序创建 为Web、移动和桌面 创建精美应用程序所需的一切帮助 Infragistics Ultimate附带 完整的企业级.NET和JavaScript图表 网格和UI组件以及可用…

SQL--DML

目录 1、添加数据&#xff08;insert&#xff09; 1. 给指定字段添加数据 2. 给全部字段添加数据 3. 批量添加数据 2、修改数据&#xff08;update&#xff09; 3、删除数据&#xff08;delete&#xff09; DML英文全称是Data Manipulation Language(数据操作语言)&…

AIParsing(TIP2022)-人体解析论文阅读

文章目录解决问题算法人体解析AIParsingFPN检测头边缘引导解析头实验结论论文&#xff1a; 《AIParsing: Anchor-Free Instance-Level Human Parsing》github&#xff1a; https://github.com/31sy/AIParsing解决问题 目前SOTA实例级人体解析模型使用二阶段基于anchor的检测器…

使用 curl multi interface 编写的高性能封装类和示例

CurlMultiDemo 使用 libCurl 的 Multi Interface 的一个简单封装类,支持功能: 单线程 纯异步 的 Get/Post 支持极高的性能(使用 POST 上传 600 文件,仅耗时4~6秒) 使用方式: 1.编译或下载 libcurl 库, 我采用的是 vcpkg2.搭建或找一个支持 MultiPart 上传文件的服务器, 如没…