Jsp——分页「建议收藏」

(29) 2023-06-23 12:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Jsp——分页「建议收藏」,希望能够帮助你!!!。

为什么需要分页?

因为我们要把数据库成千上万条的数据一页一页的展现给用户,而不是长短不一的展示给用户,这就是需要分页的原因。

分页的servlet

package com.zking.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.zking.dao.NewsDao;
import com.zking.entity.News;

/** * 分页数据加载界面 * @author 14916 * */
public class LoadDataServlet extends HttpServlet{ 
   

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

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
   
		try { 
   
// 1.设置编码
			req.setCharacterEncoding("utf-8");
			resp.setContentType("text/html;charset=utf-8");
			
// 定义当前页面变量 
		int pageIndex = 1;//默认展示第一页的数据 
// 获取前台传来的页码变量
		String myPageIndex = req.getParameter("pageIndex");
		
		
// 把从前台获取的页码myPageIndex赋给当前页码pageIndex
		if(null != myPageIndex) { 
   
			pageIndex = Integer.parseInt(myPageIndex);
		}

		//调用模糊查询方法获取数据
		NewsDao nd = new NewsDao();
		
// 2.获取内置对象
		PrintWriter out = resp.getWriter();
		HttpSession session = req.getSession();  
		
		//获取前台传来的模糊查询关键字
		String str = req.getParameter("str");
		if(null == str) { 
   
			str = "";
		}
		
		//调用分页的方法 
		List<News> listNews = nd.query(pageIndex,str);
// 把获取的数据集合listnews 保存到request作用域里
		req.setAttribute("listNews", listNews);
// 把当前页码pageIndex保存到 request作用域里
		req.setAttribute("pageIndex", pageIndex);
		//把模糊查询关键字保存到request作用域里面
		req.setAttribute("str", str);
		
		
// 使用转发转发到amdin.jsp里
		req.getRequestDispatcher("/admin/admin.jsp").forward(req,resp);
		} catch (Exception e) { 
   
		e.printStackTrace();
		}
	}
}

分页需要的方法(dao包)

/** * 求news表里面数据可展示的总页码 * @return str 模糊查询字段的数据有几条 * @throws Exception */
	public int getMaxPage(String str) throws Exception{ 
   
		con = DBhelper.getCon();
		sql = "select count(0) from news where title like '%"+str+"%'";
		ps = con.prepareStatement(sql);
		rs = ps.executeQuery();
		if(rs.next()) { 
   
			maxPage = rs.getInt(1) / 5 ;
			if(rs.getInt(1)%5!=0) { 
   
				maxPage ++;
			}
		}
		DBhelper.closeObj(con, ps, rs);
		return maxPage;
	}
/** * 模糊查询分页的方法,每页最多展示五条数据 * @param pageIndex 当前页码 * @param str 模糊查询关键字 * @return * @throws Exception */
	public List<News> query(int pageIndex,String str) throws Exception{ 
   
		int pageSize=5;//页大小
		int start = (pageIndex-1)*pageSize+1;//每页开始数据条数
		int end = pageIndex * pageSize;//每页结束的数据条数
		listNews = new ArrayList<>();
		con = DBhelper.getCon();
		//我使用的是Oracle
		sql = "select * from (select a.*,rownum myid from news a where a.title like '%"+str+"%')b where myid between ? and ?";
		ps = con.prepareStatement(sql);
		ps.setInt(1, start);
		ps.setInt(2, end);
		rs = ps.executeQuery();
		while(rs.next()) { 
   
			news = new News(rs.getInt("nid"),rs.getInt("sid"),rs.getString("title"),rs.getString("author"),rs.getString("summary"),rs.getString("content"),null);
			listNews.add(news);
		}
		DBhelper.closeObj(con, ps, rs);
		return listNews;
	}	
	

分页的客户端界面(我写的是后端)

这些都是主界面的核心代码

<%
NewsDao nd = new NewsDao();
request.setCharacterEncoding(“utf-8”);
//获取request作用域里面的模糊查询关键字
String str = request.getAttribute(“str”).toString();
//获取news表里面可以展示的总页码
int maxPage = nd.getMaxPage(str);
//获取request作用域里面的listNews数据
List listNews = (List)request.getAttribute(“listNews”);
//获取request作用域里面保存的当前页码变量
int pageIndex = Integer.parseInt(request.getAttribute(“pageIndex”).toString());
%>

<a href="<%=request.getContextPath()%>/loadDataServlet.do?str=<%=str %>&pageIndex=1">首页</a>
//这里可以看到我在下一页和上一页使用了三元运算符;
<a href="<%=request.getContextPath()%>/loadDataServlet.do?str=<%=str %>&pageIndex=<%=pageIndex>1?pageIndex-1:1 %>">上一页</a>
 	当前页数:[<%=pageIndex %>/<%=maxPage %>]&nbsp; 
 	<a href="<%=request.getContextPath()%>/loadDataServlet.do?str=<%=str %>&pageIndex=<%=pageIndex<maxPage?pageIndex+1:maxPage%>">下一页</a>
 	<a href="<%=request.getContextPath()%>/loadDataServlet.do?str=<%=str %>&pageIndex=<%=maxPage%>">末页</a> </p>

分页最终展现结果

Jsp——分页「建议收藏」_https://bianchenghao6.com/blog__第1张
Jsp——分页「建议收藏」_https://bianchenghao6.com/blog__第2张

整个分页的核心代码是

我是使用Oracle的伪列取个别名(myid)并且给news(新闻表)也取一个别名为(a)

int pageIndex;//当前页面
nt pageSize;//每页最多能展示几条数据的
int maxPage;//最大页码
int start = (pageIndex-1)*pageSize+1;//每页开始数据条数(上一页)
int end = pageIndex * pageSize;//每页结束的数据条数 (下一页)

sql = “select * from (select a.*,rownum myid from news a where a.title like '%”+str+"%’)b where myid between ? and ?";

上一篇

已是最后文章

下一篇

已是最新文章

发表回复