Day24_10 JavaWeb之JSTL标签、分页查询
创始人
2024-03-31 04:04:10
0

目录

一、JSTl标签

JSTL的概述及作用

JSTL的使用步骤及演示 

二、分页查询的实现

前端传递请求参数

响应给前端的数据


一、JSTl标签

  • JSTL的概述及作用

解析:

1、概述:JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。

2、作用:

2.1、开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

2.2、替换java脚本, 配合EL标签式;

2.3、执行在服务器端执行, 把jstl执行之后的结果响应给客户端浏览器;

2.4、JSTL标签在Html标签之前执行

  • JSTL的使用步骤及演示 

 解析:

1、导入jstl依赖:jstl-1.2jar及standard-1.0.6.jar(如下图所示:)

2、在使用jstl标签的jsp页面,使用taglib指令,导入标签库

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

prefix:前缀,任意取名,规范名:core标签库:c 比如: 使用前缀区分html标签

core所有的标签名:

uri:对应jstl标签的url,固定写法,导入jstl标签库,选择的是jsp/jst的标签库

3、直接使用jstl标签,(条件成立的情况下才显示所包裹的标签)

if标签:

tips:没有else标签,也没有else if标签

choose标签:(相当于java中的Switch分支语句)

        = 90}">

               

优秀

       

        = 80}">

               

良好

       

        = 60}">

               

及格

       

       

               

不及格

       

foreach标签:for循环

fori循环:下列循环从0开始到9结束 step表示循环后i+2

${i}

增强for循环:循环admins集合中的对象的属性

${admin.id}

${admin.username}

${admin.password}

注意:for循环:有一个varStatus="变量",得到for循环的的循环状态对象

forEach标签还有一个属性:varStatus,这个属性用来指定接收"循环状态"的变量名,

例如:,这时就可以使用vs这个变量来获取循环的状态了。

count:int类型,当前以遍历元素的个数;第几次循环,从1开始;

index:int类型,当前元素的下标,是否为第一个元素;

first:boolean类型,是否为第一个元素;

last:boolean类型,是否为最后一个元素;

 

二、分页查询的实现

  • 前端传递请求参数

解析:

1、页码(数据类型为整型)

2、页容量:每页显示多少行(数据类型为整型,有的项目可以不需要传递,后台给的默认值)

3、具体实现步骤:(具体代码如下)

1、新建一个index.jsp页面、在查询所有用户a标签按钮链接发送Servlet

2、在编写一个list.jsp页面、用于展示查询结果

 index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

首页/css/bootstrap.min.css" rel="stylesheet">

欢迎您:${admin.username}
/LogoutServlet">退出
/user/queryByPage" style="text-decoration:none;font-size:33px">查询所有用户信息

list.jsp:


<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


用户信息管理系统/css/bootstrap.min.css" rel="stylesheet">


用户信息列表

<%-- 遍历分页后的记录 --%><%-- <%– 查询全部不分页 –%>--%>
编号姓名性别年龄籍贯QQ邮箱操作
${s.count}${user.name}${user.gender}${user.age}${user.address}${user.qq}${user.email}修改 删除
  • 响应给前端的数据

解析:

1、总记录数:查询总条数 sql语句:select count(1) ...

2、当前页码:当前显示第几页 请求参数

3、总页数:计数得来,根据总记录数与页容量求出来的

总页数 = 总记录数%页容量==0?总记录数/页容量:总记录数/页容量+1

4、当前页记录(集合),当前页面显示的数据:sql:select * from ... limit 序号,页容量

序号=(页码-1)*页容量

tips:java面向对象,封装,把5个数据封装成一个对象:分页实体类 Page

特别注意:Dao类的一个方法控制再只执行一条sql语句

5、实现步骤:(具体实现看代码注释)

5.1、新建一个vo(viewObject包)存放视图实体类、并创建Page分页实体类

5.2、编写分页查询的Servlet方法:queryByPage()

5.3、编写UserinfoService与UserinfoDao中的queryByPage()方法

5.4、启动项目测试

 Userinfo 实体类:

package com.fs.user.pojo;/*** @author 14491* @version 1.0.0* @description 用户信息实体类* @date 2022/10/20 18:43*/
public class Userinfo {private Long id;private String name;private String gender;private Long age;private String address;private String email;private String qq;public Userinfo() {}public Userinfo(Long id, String name, String gender, Long age, String address, String email, String qq) {this.id = id;this.name = name;this.gender = gender;this.age = age;this.address = address;this.email = email;this.qq = qq;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public Long getAge() {return age;}public void setAge(Long age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}@Overridepublic String toString() {return "Userinfo{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +", address='" + address + '\'' +", email='" + email + '\'' +", qq='" + qq + '\'' +'}';}
}

Page分页实体类:

package com.fs.user.vo;import java.util.ArrayList;
import java.util.List;/*** @author 14491* @version 1.0.0* @description 分页实体类* @date 2022/10/24 22:31*/
public class Page {private int currentPage;// 当前页码private int pageSize;// 页容量private int count;// 总记录数private int totalPages;// 总页数// 使用范型是为了这个分页类能够被复用,而不需要一个分页页面,新建一个分页实体类private List recodes = new ArrayList<>();// 当前页记录public Page() {}// 新建一个当前页码与页容量的初始化构造方法public Page(int currentPage, int pageSize) {this.currentPage = currentPage;this.pageSize = pageSize;}public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}// 应由总记录数/页容量得来public int getTotalPages() {int page = this.count / pageSize;return this.count % this.pageSize == 0 ? page : page + 1;}// 总页码数应该是通过查询数据库得来的,所以不提供set方法/*public void setTotalPages(int totalPages) {this.totalPages = totalPages;}*/public List getRecodes() {return recodes;}public void setRecodes(List recodes) {this.recodes = recodes;}@Overridepublic String toString() {return "Page{" +"currentPage=" + currentPage +", pageSize=" + pageSize +", count=" + count +", totalPages=" + totalPages +", recodes=" + recodes +'}';}
}

BeanFactory工具类:

package com.fs.user.util;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;/*** @author 14491* @version 1.0.0* @description 工厂模式创建对象* @date 2022/10/21 16:27*/
public class BeanFactory {static Properties props = new Properties();static {// 加载bean.propertiesInputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");try {// 加载到Properties集合中去props.load(in);} catch (IOException e) {e.printStackTrace();}}/*** 产生一个实现类对象*/public static  T createBean(Class clazz){// 获取接口类名String simpleName = clazz.getSimpleName();// 接口对应得实现类全限定名String className = props.getProperty(simpleName);try {// 得到实现类的Class对象 进而使用反射创建实现类对象Class clazz1 = Class.forName(className);return  (T)clazz1.newInstance();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return null;}
}

bean.properties配置文件:

AdminDao =com.fs.user.dao.impl.AdminDaoImpl
AdminService = com.fs.user.service.impl.AdminServiceImpl
UserinfoService =com.fs.user.service.impl.UserinfoServiceImpl
UserinfoDao =com.fs.user.dao.impl.UserinfoDaoImpl

UserServlet:

package com.fs.user.Servlet;import com.fs.user.pojo.Userinfo;
import com.fs.user.service.UserinfoService;
import com.fs.user.util.BeanFactory;
import com.fs.user.vo.Page;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;@WebServlet(name = "UserServlet", value = "/user/*")
public class UserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1、设置编码格式request.setCharacterEncoding("UTF-8");response.setContentType("text/html,charset=UTF-8");// 2、获取到请求的真实url 选择不同的方法// request.getPathInfo() 在servlet的url使用*通配符才有效String path = request.getPathInfo();if ("/queryAll".equals(path)){queryAll(request,response);}else if ("/delete".equals(path)){delete(request,response);}else if ("/update".equals(path)){update(request,response);}else if ("/add".equals(path)){add(request,response);}else if ("/queryByPage".equals(path)){queryByPage(request,response);}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}private void queryAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1、调用Service去调用daoUserinfoService userinfoService = BeanFactory.createBean(UserinfoService.class);List userinfos = userinfoService.queryAll();// 2、把数据存在域中request.setAttribute("userinfos",userinfos);// 3、使用转发传输数据request.getRequestDispatcher("/list.jsp").forward(request,response);}private void delete(HttpServletRequest request, HttpServletResponse response){}private void update(HttpServletRequest request, HttpServletResponse response){}private void add(HttpServletRequest request, HttpServletResponse response){}private void queryByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1、设置默认的页数int currentPageInt = 1;String currentPage = request.getParameter("currentPage");if (currentPage !=null && !currentPage.isEmpty()){// 前端传递页码,把String类型转化为Int类型currentPageInt = Integer.parseInt(currentPage);}// 2、设置默认的页容量int pageSizeInt = 3;String pageSize = request.getParameter("pageSize");if (pageSize !=null && !pageSize.isEmpty()){// 前端传递页码,把String类型转化为Int类型pageSizeInt = Integer.parseInt(pageSize);}// 3、调用Service层UserinfoService userinfoService = BeanFactory.createBean(UserinfoService.class);Page pages = userinfoService.queryByPage(currentPageInt,pageSizeInt);// System.out.println(pages.getTotalPages());// 4、把page对象存在request域中request.setAttribute("pb",pages);// 5、转发到list.jsp页面request.getRequestDispatcher("/list.jsp").forward(request,response);}
}

 UserinfoService接口:

package com.fs.user.service;import com.fs.user.pojo.Userinfo;
import com.fs.user.vo.Page;import java.util.List;/*** @author 14491* @version 1.0.0* @description TODO* @date 2022/10/24 20:29*/
public interface UserinfoService {/*** 查询所有用户信息* @return*/List queryAll();/*** 分页查询的实现* @param currentPageInt* @param pageSizeInt* @return*/Page queryByPage(int currentPageInt, int pageSizeInt);
}

UserinfoServiceImpl 实现类:

package com.fs.user.service.impl;import com.fs.user.dao.UserinfoDao;
import com.fs.user.pojo.Userinfo;
import com.fs.user.service.UserinfoService;
import com.fs.user.util.BeanFactory;
import com.fs.user.vo.Page;import java.util.List;/*** @author 14491* @version 1.0.0* @description 用户信息展示方法实现类* @date 2022/10/24 20:30*/
public class UserinfoServiceImpl implements UserinfoService{// 调用dao层连接数据库UserinfoDao userinfoDao = BeanFactory.createBean(UserinfoDao.class);@Overridepublic List queryAll() {return userinfoDao.queryAll();}@Overridepublic Page queryByPage(int currentPageInt, int pageSizeInt) {// 调用dao层连接数据库Page page = new Page<>(currentPageInt, pageSizeInt);page.setCount(userinfoDao.queryCount());page.setRecodes(userinfoDao.selectByPage(currentPageInt,pageSizeInt));return page;}
}

 UserinfoDao接口:

package com.fs.user.dao;import com.fs.user.pojo.Userinfo;import java.util.List;/*** @author 14491* @version 1.0.0* @description TODO* @date 2022/10/20 18:47*/
public interface UserinfoDao {// 添加用户信息int addUserinfo(Userinfo userinfo);/*** 查询所有用户信息* @return*/List queryAll();/*** 获取总记录数* @return*/int queryCount();/*** 获取分页后的当前页记录* @param currentPageInt* @param pageSizeInt* @return*/List selectByPage(int currentPageInt, int pageSizeInt);
}

UserinfoDaoImpl实现类:

package com.fs.user.dao.impl;import com.fs.user.dao.UserinfoDao;
import com.fs.user.pojo.Userinfo;
import com.fs.user.util.JDBCUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;/*** @author 14491* @version 1.0.0* @description TODO* @date 2022/10/20 18:49*/
public class UserinfoDaoImpl implements UserinfoDao {@Overridepublic int addUserinfo(Userinfo userinfo) {String sql = "insert into tb_userinfo (name,gender,age,address,email,qq) values(?,?,?,?,?,?)";return JDBCUtil.executeUpdate(sql, userinfo.getName(), userinfo.getGender(), userinfo.getAge(), userinfo.getAddress(), userinfo.getEmail(), userinfo.getQq());}@Overridepublic List queryAll() {// 查询所有并且按照年龄升序排列String sql = "SELECT * FROM tb_userinfo order by age";return JDBCUtil.executeQuery(sql,Userinfo.class);}@Overridepublic int queryCount() {String sql = "SELECT count(1) FROM tb_userinfo";Connection conn = null;PreparedStatement psmt = null;ResultSet rs = null;try {conn = JDBCUtil.getConnection();psmt = conn.prepareStatement(sql);rs = psmt.executeQuery();rs.next();return rs.getInt(1);} catch (SQLException e) {e.printStackTrace();}finally {JDBCUtil.close(rs,psmt,conn);}return 0;}@Overridepublic List selectByPage(int currentPageInt, int pageSizeInt) {String sql = "SELECT * FROM tb_userinfo order by age LIMIT ?,?";return JDBCUtil.executeQuery(sql,Userinfo.class,(currentPageInt-1)*pageSizeInt,pageSizeInt);}
}

结构目录:

运行结果:

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...