文章目录
一、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.点击下一页即跳转到下一页,但是由于此时数据库中只有五条信息,只能分两页,故点击两次下一页,也会出提示