javaWeb_17(Ajax实现分页)

一、为什么使用Ajax

1、无刷新:

不刷新整个页面,只刷新局部

2、无刷新的好处:

只更新部分页面,有效利用带宽,提高用户体验

代码如下:

实体类:

package com.zking.entity;

import java.io.Serializable;

/**
 * 实体类:商品类
 * @author zjjt
 *
 * @date 2022年4月13日 下午8:58:56
 */
public class Goods implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 170842568495657866L;
	private int gid;
	private String gname;
	private int gprice;
	private String ginfo;
	private String gpath;
	public int getGid() {
		return gid;
	}
	public void setGid(int gid) {
		this.gid = gid;
	}
	public String getGname() {
		return gname;
	}
	public void setGname(String gname) {
		this.gname = gname;
	}
	public int getGprice() {
		return gprice;
	}
	public void setGprice(int gprice) {
		this.gprice = gprice;
	}
	public String getGinfo() {
		return ginfo;
	}
	public void setGinfo(String ginfo) {
		this.ginfo = ginfo;
	}
	public String getGpath() {
		return gpath;
	}
	public void setGpath(String gpath) {
		this.gpath = gpath;
	}
	
	public Goods() {
		// TODO Auto-generated constructor stub
	}
	public Goods(int gid, String gname, int gprice, String ginfo, String gpath) {
		super();
		this.gid = gid;
		this.gname = gname;
		this.gprice = gprice;
		this.ginfo = ginfo;
		this.gpath = gpath;
	}
	public Goods( String gname, int gprice, String ginfo, String gpath) {
		this.gname = gname;
		this.gprice = gprice;
		this.ginfo = ginfo;
		this.gpath = gpath;
	}
	

}

dao包:

package com.zking.dao;

import java.util.List;

import com.zking.entity.Goods;

import sun.net.NetworkServer;

public interface IGoodsDao {
	
	/**
	 * 模糊查询
	 * @return 集合
	 */
	public List<Goods> getAll(int pageIndex,int pageSize,String sname);
	/**
	 * 获取总行数
	 * @param str 表名等
	 * @return  行数
	 */
	public int getRows(String str);
	
	/**
	 * 单个查询
	 * @return 实体类
	 */
	public Goods getALLDg(int gid);
	
	
	/**
	 * 删除
	 * @param gid 编号
	 * @return  影响行数
	 */
	public int deleteDg(int gid);

	/**
	 * 查询全部
	 * @return 集合
	 */
	public List<Goods> getAll(int pageIndex,int pageSize);
	
}
package com.zking.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.zking.entity.Goods;
import com.zking.util.DBHelper;

public abstract class GoodsDao implements IGoodsDao{
	
	Connection con=null;
	PreparedStatement ps=null;
	ResultSet rs=null;
	

	@Override
	public List<Goods> getAll(int pageIndex,int pageSize,String sname) {
		List<Goods> ls=new ArrayList<Goods>();
		//公式 找规律
		int a=(pageIndex-1)*pageSize+1;
		int b=pageIndex*pageSize;
		try {
			con=DBHelper.getCon();
			String sql="select * from( \r\n" + 
					"select a.*,rownum as rid from ( \r\n" + 
					"select * from goods where gname like '%"+sname+"%'  \r\n" + 
					") a \r\n" + 
					") b where b.rid between ? and ?";
			ps=con.prepareStatement(sql);
			//给占位符赋值
			ps.setInt(1, a);
			ps.setInt(2, b);
			rs=ps.executeQuery();
			while(rs.next()) {
				Goods g=new Goods();
				g.setGid(rs.getInt(1));
				g.setGname(rs.getString(2));
				g.setGprice(rs.getInt(3));
				g.setGinfo(rs.getString(4));
				g.setGpath(rs.getString(5));
				ls.add(g);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		return ls;
	}


	@Override
	public int getRows(String str) {
		int n=0;
		try {
			con=DBHelper.getCon();
			String	sql="select count(*) from "+str;
			ps=con.prepareStatement(sql);
			rs=ps.executeQuery();
			if(rs.next()) {
				n=rs.getInt(1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		return n;
	}


	@Override
	public Goods getALLDg(int gid) {
		Goods g=null;
			try {
				con=DBHelper.getCon();
				String sql="select * from goods where gid="+gid;
				ps=con.prepareStatement(sql);
				rs=ps.executeQuery();
				if(rs.next()) {
					g=new Goods();
					g.setGid(rs.getInt(1));
					g.setGname(rs.getString(2));
					g.setGprice(rs.getInt(3));
					g.setGinfo(rs.getString(4));
					g.setGpath(rs.getString(5));
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally {
				DBHelper.myClose(con, ps, rs);
			}
			return g;
		
	}


	@Override
	public int deleteDg(int gid) {
		int n=0;
		try {
			con=DBHelper.getCon();
			String sql="delete from goods where gid="+gid;
			ps=con.prepareStatement(sql);
			n=ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		return n;
	}
	
	public List<Goods> getAll(int pageIndex,int pageSize) {
		List<Goods> ls=new ArrayList<Goods>();
		//公式 找规律
		int a=(pageIndex-1)*pageSize+1;
		int b=pageIndex*pageSize;
		try {
			con=DBHelper.getCon();
			String sql="select * from( \r\n" + 
					"select a.*,rownum as rid from ( \r\n" + 
					"select * from goods   \r\n" + 
					") a \r\n" + 
					") b where b.rid between ? and ?";
			ps=con.prepareStatement(sql);
			//给占位符赋值
			ps.setInt(1, a);
			ps.setInt(2, b);
			rs=ps.executeQuery();
			while(rs.next()) {
				Goods g=new Goods();
				g.setGid(rs.getInt(1));
				g.setGname(rs.getString(2));
				g.setGprice(rs.getInt(3));
				g.setGinfo(rs.getString(4));
				g.setGpath(rs.getString(5));
				ls.add(g);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		return ls;
	}

}

biz包:

package com.zking.Biz;

import java.util.List;

import com.zking.entity.Goods;

public interface IGoodsBiz {
	
	
	public int getMax(String str, int pageSize);
	
	/**
	 * 模糊查询
	 * @return 集合
	 */
	public List<Goods> getAll(int pageIndex,int pageSize,String sname);
	/**
	 * 获取总行数
	 * @param str 表名等
	 * @return  行数
	 */
	public int getRows(String str);
	/**
	 * 单个查询
	 * @return 实体类
	 */
	public Goods getALLDg(int gid);
	
	/**
	 * 删除
	 * @param gid 编号
	 * @return  影响行数
	 */
	public int deleteDg(int gid);
	
	/**
	 * "假分页"
	 * @param pageIndex 第几页
	 * @param pageSize  每页多少条数据
	 * @return  商品集合
	 */
	//public List<Goods> getAllByPage(int pageIndex,int pageSize);

	/**
	 * 查询全部
	 * @return 集合
	 */
	public List<Goods> getAll(int pageIndex,int pageSize);
}
package com.zking.Biz;

import java.util.ArrayList;
import java.util.List;

import com.zking.dao.GoodsDao;
import com.zking.dao.IGoodsDao;
import com.zking.entity.Goods;

/**
 * 业务逻辑层
 * @author zjjt
 *
 * @date 2022年4月13日 下午9:00:48
 */
public class GoodsBiz implements IGoodsBiz{
	
	
	/**
	 * "假"分页: 先一次性全部拿到内存 每次都从内存拿值
	 * "真"分页:每次都去数据库拿值   between ? and ?
	 * 
	 * 真:
	 * 1-5
	 * 6-10
	 * 公式:(pageIndex-1)*pageSize+1-------pageIndex*pageSize
	 * 
	 * 假:
	 * 0-4
	 * 5-9
	 * 公式:(pageIndex-1)*pageSize-----pageIndex*pageSize
	 * 
	 * 
	 */
	
	
	//调用数据库访问层
	IGoodsDao igd=new GoodsDao() {
		
	};
	
	
	
	/*public List<Goods> getAllByPage(int pageIndex,int pageSize){
		List<Goods> newls=new ArrayList<Goods>();
		int a=(pageIndex-1)*pageSize;
		int b=pageIndex*pageSize;
		//先一次性拿到所有的数据
		List<Goods> ls= getAll(pageIndex, pageSize);
		//循环遍历
		for(int i=a;i<=b;i++) {
			if(i>=ls.size()) {
				break;
			}
			//通过下标取商品对象
			Goods g= ls.get(i);
			//加到新集合中
			newls.add(g);
		}
		return newls;
	}
*/
	@Override
	public List<Goods> getAll(int pageIndex,int pageSize,String sname) {
		// TODO Auto-generated method stub
		return igd.getAll( pageIndex, pageSize,sname);
	}

	@Override
	public int getRows(String str) {
		// TODO Auto-generated method stub
		return igd.getRows(str);
	}

	@Override
	public Goods getALLDg(int gid) {
		// TODO Auto-generated method stub
		return igd.getALLDg(gid);
	}

	@Override
	public int deleteDg(int gid) {
		// TODO Auto-generated method stub
		return igd.deleteDg(gid);
	}
	
	@Override
	public List<Goods> getAll(int pageIndex,int pageSize) {
		// TODO Auto-generated method stub
		return igd.getAll( pageIndex, pageSize);
	}
	
	@Override
	public int getMax(String str, int pageSize) {
		int rows= igd.getRows(str);//获取总行数
		int max=rows/pageSize;//计算最大值
		if(rows%pageSize!=0) {//判断如果除不尽
			max++;//多加一页
		}
		return max;
	}

	
}

servlet包:

package com.zking.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;
import com.zking.Biz.GoodsBiz;
import com.zking.Biz.IGoodsBiz;
import com.zking.entity.Goods;

@WebServlet("/page.do")
public class PageServlet 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 {
		//设置编码方式
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=UTF-8");
		
		//获取out
		PrintWriter out = resp.getWriter();
		
		int pageIndex=1;
		int pageSize=5;
		//servlet调用biz层
		IGoodsBiz igb=new GoodsBiz();
		//接收模糊查询关键字
		String gname = req.getParameter("gname");
		if(gname==null) {
			gname="";//相当于查询全部
		}
		//获取最大页码
		int max = igb.getMax("goods where gname like '%"+gname+"%'", pageSize);
		//接收pid
		String pid = req.getParameter("pid");
		if(pid!=null) {
			pageIndex=Integer.parseInt(pid);//改变页码
		}
	    List<Goods> ls = igb.getAll(pageIndex, pageSize, gname);
		
	    
	    //定义一个map集合
	    Map<String, Object> mym=new HashMap<String, Object>();
	    //存元素(一对)
	    mym.put("pageMax", max);
	    mym.put("goodsList", ls);
	    
	    
	  //利用工具将map集合 -->json格式的对象字符串
	    String str = JSON.toJSONString(mym);
	    
	    //把响应输送到客户端=页面
	    out.write(str);
	    out.flush();
	    out.close();
		
		
		
	}
	
	
	

}

界面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入jQuery的类库 -->
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<!-- 另起一个script块 -->
<script type="text/javascript">
     //页面载入函数
      $(function(){
    	  //默认显示第一页
    	  myf('a');
      })
      //专门控制分页
      var pageIndex;
      var max;
      function myf(type){
    	  //拿到文本框的值
    	  var name=$("#gname").val();
    	 if(type=='a'){
    		 //首页
    		 pageIndex=1;
    	 }else if(type=='b'){
    		 //上一页
    		 if(pageIndex>1){
    			 pageIndex--;
    		 }else{
    			 alert("已经是第一页了");
    		 }
    	 }else if(type=='c'){
    		 //下一页
    		 if(pageIndex<max){
    			 pageIndex++;
    		 }else{
    			 alert("已经是最后一页了");
    		 }
    		
    	 }else{
    		 //末页
    		 pageIndex=max;
    	 }
    	  $.post("page.do",{pid:pageIndex,gname:name},function(data){
    		   //根据属性拿到属性值,根据键拿到值
    		   //alert(data.pageMax);max
    		   //alert(data.goodsList); 集合
    		   //把json格式的字符串解析成js的对象/对象数组
    		   //var ss=$.parseJSON(data);
    		   //alert($.type(ss));//array
    		   max=data.pageMax;
    		   var sb="<table border='1px' width='50%'>";
    		   sb+="<tr align='center'>";
    		   sb+="<td>商品序号</td>";
    		   sb+="<td>商品名称</td>";
    		   sb+="<td>商品图片</td>";
    		   sb+="</tr>";
    		   $.each(data.goodsList,function(i,g){//下标,元素
    			   sb+="<tr>";
    			   sb+="<td>"+g.gid+"</td>";
    			   sb+="<td>"+g.gname+"</td>";
    			   sb+="<td><img src='"+g.gpath+"' /></td>";
    			   sb+="</tr>";
    		   })
    		   sb+="</table>";
    		   //给div赋值
    		   $("#aa").html(sb); 
    		   //赋值当前页码&最大页码
    		   $("#xx").html(pageIndex);
    		   $("#yy").html(max);
    	  },"json");
      }
</script>
</head>
<body>
    <center>
        <div>
              商品名:<input type="text" id="gname" />
           <input type="button" value="查询" onclick="myf('a')" />   
        </div>
        <div id="aa"></div>
        <div>
              <a href="javascript:myf('a')">首页</a>
              <a href="javascript:myf('b')">上一页</a>
              <a href="javascript:myf('c')">下一页</a>
              <a href="javascript:myf('d')">末页</a>
                                     【<span id="xx"></span>/<span  id="yy"></span>】
        </div>
    </center>  
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值