在IDEA中实现学生信息的分页二

一、jsp文件

1.index.jsp

<%
    String path = request.getContextPath();
    pageContext.setAttribute("path",path);
%>
<html>
<body>
<a href="${path}/kangjingwen/listView.do">KangJingWen</a>
</body>
</html>

2.listStudent.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    String path = request.getContextPath();
    request.setAttribute("path",path);
%>
<html>
    <head>
        <title>Title</title>
        <script src="${path}/js/jquery-3.3.1.js"></script>
        <script>
            var pageNo = 1;
            var pageTotal = 0;

            function up() {
                if(pageNo==1){
                    alert("这是第一页");
                    return;/*如果是第一页或者最后一页直接结束方法*/
                }
                pageNo--;/*更新页数*/
                pagin();/*进行分页*/
            }

            function down() {
                if(pageNo==pageTotal){
                    alert("这是最后一页");
                    return;
                }
                pageNo++;
                pagin();
            }

            function pagin() {
                var object = {
                    url:"${path}/kangjingwen/listFrag.do?pageNo="+pageNo,/*传入当前页数*/
                    success:function (data) {
                        $("#paginFrag").empty();/*先清空数据,不然获取到的学生列表会一次一次叠加上去*/
                        $("#paginFrag").append(data);/*将获取到的data数据放入id为paginFrag的div中*/
                        pageTotal = $("#pageTotal").val();/*获取总页数,能知道什么时候到达了最后一页并作出反应*/
                    }
                };
                $.ajax(object);
            }
        </script>
    </head>
    <body onload="pagin()"><%--onload方法执行pagin()方法在页面加载出来的同时将信息返回到页面上--%>
        <div id="paginFrag"></div>
        <input type="button" onclick="up()" value="上一页">
        <input type="button" onclick="down()" value="下一页">
    </body>
</html>

3.listFragStudent.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: kjw
  Date: 2019/7/29
  Time: 18:29
  To change this template use File | Settings | File Templates.
--%>
<table width="100%" border="1">
    <thead>
    <tr>
        <th>id</th><th>name</th><th>mobile</th><th>address</th>
    </tr>
    </thead>
    <tbody>
    <c:forEach var="student" items="${students}" varStatus="state"><%--注意:var和items标签一定要有--%>
        <tr>
            <td>${state.index+1}</td>
            <td>${student.name}</td>
            <td>${student.mobile}</td>
            <td>${student.address}</td>
        </tr>
    </c:forEach>
    </tbody>
</table>
<input type="hidden" id="pageTotal" value="${pageTotal}"><%--通过EL表达式获取到总页数--%>

二、java代码

1.I…Dao接口

package com.jd.kangjingwen.dao;

public interface IKangJingWenDao {

    Object[] select(int pageNo);
}

2.I…Service接口

package com.jd.kangjingwen.service;

public interface IKangJingWenService {

    Object[] select(int pageNo);
}

3.Dao层

package com.jd.kangjingwen.dao;

import com.jd.vo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;

import java.sql.ResultSet;
import java.sql.SQLException;

@Component
public class KangJingWenDao implements IKangJingWenDao{

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public Object[] select(int pageNo) {
        Object [] data = new Object[2];
        int pageSize = 3;
        String sql = "select count(id) from student";
        int total = jdbcTemplate.queryForObject(sql,Integer.TYPE);
        int pageTotal = total%pageSize==0?total/pageSize:total/pageSize+1;
        data[0] = pageTotal;

        sql ="select * from student limit "+(pageNo-1)*pageSize+","+pageSize;
        data[1] = jdbcTemplate.query(sql, new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
                String id = rs.getString("id");
                String name = rs.getString("name");
                String mobile = rs.getString("mobile");
                String address = rs.getString("address");
                return new Student(id,name,mobile,address);
            }
        });
        return data;
    }
}

4.Service层

package com.jd.kangjingwen.service;

import com.jd.kangjingwen.dao.IKangJingWenDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service

public class KangJingWenService implements IKangJingWenService{

    @Autowired
    private IKangJingWenDao kangJingWenDao;

    public  Object[] select(int pageNo){
        return kangJingWenDao.select(pageNo);
    }
}

5.Controller层

package com.jd.kangjingwen;

import com.jd.kangjingwen.service.IKangJingWenService;
import com.jd.vo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller
@RequestMapping("/kangjingwen")
public class KangJingWenController {

    @Autowired
    private IKangJingWenService kangJingWenService;

    @RequestMapping("/listView.do")/*规范性:ReqestMapping中value的值最好与方法名一致*/
    public String listView(){
        return "kangjingwen/listStudent";/*由于我们这里把所有的页面都放在WEB-INF文件夹下,故要通过请求转发来获取*/
    }

    @RequestMapping("/listFrag.do")
    public String listFrag(Map<String,Object> map,int pageNo){
        Object [] data = kangJingWenService.select(pageNo);
        map.put("pageTotal",data[0]);
        map.put("students",data[1]);
        return "kangjingwen/listFragStudent";
    }
}

三、搭建Tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到此Tomcat就配置好了

四、分析

1.输入网址“localhost:8080”回车,默认打开index.jsp页面
在这里插入图片描述
2.点击页面上的链接
此时在所有用@RequestMapping注解标注的方法中自动寻找路径为“${path}/kangjingwen/listView.do”(${path}为绝对路径)并执行其中的方法
3.找到后执行方法,即通过请求转发跳转到/WEB-INF/view/kangjingwen/listStudent.jsp
4.由于该页面的Body标签上执行了οnlοad=“pagin()”样式及其样式属性
在listStudent.jsp加载出来的同时执行完pagin方法
5.pagin方法:再次在用@RequestMapping注解标注的方法中寻找路径${path}/kangjingwen/listFrag.do,并将当前页数传入
6.执行代码,调用表面上调用的是Service接口中的方法实际上使用的是Service层中的select方法(上转型对象)
7.Service层中这句话return kangJingWenDao.select(pageNo);表面上调用的是Dao接口中的方法实际上使用的是Dao层中的select方法(上转型对象)
8.Dao层将数据返回到Service层,Service层再将数据返回到Controller层,Controller层再将数据返回到页面上,即将数据放入id为paginFrag的div标签中
9.显示出页面信息
在这里插入图片描述
10.由于当前位于第一页,此时点击上一页
在这里插入图片描述
11.点击下一页即跳转到下一页,但是由于此时数据库中只有五条信息,只能分两页,故点击两次下一页,也会出提示
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值