这篇文章主要为大家详细介绍了JSP实现分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了JSP实现分页的具体代码,供大家参考,具体内容如下
咱们在浏览网页的时候,当一个页面的数据不足以展示完全所有的内容,一般都涉及到分页,下一页的功能该怎么实现呢?首先我们来分析一下:
那么直接上代码:
这里需要备注一下,本次的代码是在对三层优化之后进行操作的,所以我先把数据访问层的重构代码贴出来:
包装组织三层。DButil
导入Java。SQL。连接;
导入Java。SQL。司机经理;
导入Java。SQL。准备好的声明;
导入Java。SQL。结果集;
导入Java。SQL。SQL异常;
导入组织。三层。实体。学生;
公共类DButil
{
public static final String driver=' com。MySQL。CJ。JDBC。'驱动程序';
公共静态最终字符串URL=' JDBC:MySQL://localhost:3306/zxy?'使用SSL=false服务器时区=UTF-8使用SSL=false服务器时区=GMT ';
公共静态最终字符串用户名=' root
公共静态最终字符串密码=' zxy170518
公共静态连接connection=null//链接数据库
公共静态预准备语句pstmt=null//执行结构化查询语言语句
公共静态结果集rs=空
公共静态连接getConnection()引发SQLException,ClassNotFoundException
{
Class.forName(驱动程序);
返回司机经理。getconnection(URL,用户名,密码);
}
public static int getTotalCount(字符串sql)
{
int count=0;
尝试
{
pstmt=createpreparestement(SQL,null);
RS=PS TMT。执行查询();
if(rs.next())
{
计数=卢比。getint(1);
}
}catch(SQLException e)
{
e。printstacktrace();
}catch(ClassNotFoundException e)
{
e。printstacktrace();
}catch(异常e)
{
e。printstacktrace();
}最后
{
closeAll(连接、pstmt、RS);
}
返回计数;
}
公共静态预准备语句createpreparestement(字符串SQL,Object[] obj)抛出ClassNotFoundException,SQLException
{
pstmt=getConnection().准备语句(SQL);
if(obj!=空)
{
for(int I=0;iobj.length我)
{
pstmt.setObject(i 1,obj[I]);//进行更新动作
}
}
返回pstmt
}
公共静态布尔更新sql(字符串SQL,Object[] obj)
{
尝试
{
pstmt=createpreparestement(SQL,obj);
int计数=PS TMT。执行update();
if(count0)
{
返回真实的
}
其他
{
返回错误的
}
} catch(ClassNotFoundException e){
//TODO自动生成的捕捉块
e。printstacktrace();
返回错误的
} catch (SQLException e) {
//TODO自动生成的捕捉块
e。printstacktrace();
返回错误的
}最后
{
closeAll(连接、pstmt、RS);
}
}
公共静态结果集FindSQL(字符串SQL,Object[] obj)
{
尝试
{
pstmt=createpreparestement(SQL,obj);
RS=PS TMT。执行查询();
返回RS;
}catch(ClassNotFoundException e)
{
e。printstacktrace();
返回RS;
} catch (SQLException e) {
//TODO自动生成的捕捉块
e。printstacktrace();
返回RS;
}catch(异常e)
{
e。printstacktrace();
返回RS;
}
}
公共静态void closeAll(连接连接,PreparedStatement pstmt,ResultSet rs)
{
尝试
{
如果(连接!=null);
联系。close();
if(pstmt!=null);
pstmt。close();
如果(rs!=null);
RS。close();
} catch (SQLException e) {
//TODO自动生成的捕捉块
e。printstacktrace();
}catch(异常e)
{
e。printstacktrace();
}
}
}
基本上就是普通的数据库操作功能,很好懂,就不多解释了;
对于数据访问层的道:
public int getTotalCount()//查询数据总数
{
string SQL=' select count(1 from student);
返回dbutil。gettotalcount(SQL);
}
public list studenbypage(int current page,int pageSize)//currentPage:当前页数;页面大小页面所能容纳的最大数据量
{
string SQL=' select * from student limit?';
object[]obj={当前页面* pageSize,pageSize };
list students=new ArrayList();
结果集rs=DButil .FindSQL(sql,obj);
尝试{
while(rs.next())
{
学生学生=新学生(rs.getInt(1),rs.getString(2),rs.getString(3),rs。getint(4));
学生. add(学生);
}
} catch (SQLException e) {
//TODO自动生成的捕捉块
e。printstacktrace();
}catch(异常e) {
//TODO自动生成的捕捉块
e。printstacktrace();
}
返校生;
}
对于业务逻辑层:
服务器:
public int getTotalCount()
{
返回学生道。gettotalcount();
}
公共列表学生findstudenbypage(int current page,int pageSize)
{
返回学生道。findstudenbypage(当前页面,pageSize);
}
对于视图层的后台代码:
Servlet:
包装组织。三。小型应用程序
导入Java。io。io异常;
导入Java。util。列表;
导入javax。servlet。servlet异常;
导入javax。servlet。http。http servlet
导入javax。servlet。http。http servlet请求;
导入javax。servlet。http。http servlet响应;
导入组织三层。实体。page _ S;
导入组织。三层。实体。学生;
导入组织三层。服务器。学生_服务器;
公共类findStudentByPage扩展HttpServlet {
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException {
学生_服务器学生=新学生_服务器();
//int current page=2;
Page _ S PAG=new Page _ S();
字符串tmp=请求。getparameter(“当前页”);
if(tmp==null)//判断是否为第一次进行访问
{
tmp=" 0
}
int sum=学生。gettotalcount();
PAG。settotalcount(sum);
int当前页面=整数。parse int(tmp);
pag.setCurrentPage(当前页面);
字符串tmp 2=请求。getparameter(' choose ');
if(tmp2==null)//默认一页3个内容
{
tmp 2=" 3
}
int pageSize=整数。parse int(tmp 2);
pag.setPageSize(页面大小);
列出学生学生=学生。findstudstudentbypage(当前页面,pageSize);
PAG . set学生(学生);
request.setAttribute('pag ',PAG);
请求。getrequestdispatcher(' index。JSP’).转发(请求、响应);
系统输出打印(学生);
系统。出去。打印(总和);
}
受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException {
doGet(请求,响应);
}
}
还有一个实体类:页面:
包装组织。三层实体;
导入Java。util。列表;
公共类Page_S {//为了不出现于重名,改了一下
私有内部当前页面
private int pageSize//页面大小,即页面数据个数
私有int totalCount//总数据
private int totalPage//总页数
私人名单学生学生;
公共页面(){
}
public Page_S(int currentPage,int pageSize,int totalCount,int totalPage,ListStudent students) {
这个。当前页面=当前页面;
this.pageSize=pageSize
这个。总计数=总计数;
这个。总页数=总页数;
this .学生=学生;
}
public int getCurrentPage() {
返回当前页面;
}
public void setCurrentPage(int current page){
这个。当前页面=当前页面;
}
public int getPageSize() {
返回页面大小
}
public void setPageSize(int pageSize){
this.pageSize=pageSize
这个。总页数=这个。总数% this。pagesize==0?this.totalCount/this.pageSize:this.totalCount/this.pageSize 1;
}
public int getTotalCount() {
返回总数
}
public void setTotalCount(int total count){
这个。总计数=总计数;
}
public int getTotalPage() {
返回总页数
}
公共void设置总页面(int total page){
这个。总页数=总页数;
}
公共列表学生获取学生(){
返校生;
}
public void set学生(列出学生学生){
this .学生=学生;
}
}
最后贴上index.jsp:
% @个页面导入='java.util.List'%
% @个页面导入='org .'三层实体学生' %
% @个页面导入='org .'三层实体页面' %
% @ page language=' Java ' content type=' text/html;charset=UTF-8 '
页面编码='UTF-8'%
!文档类型超文本标记语言
超文本标记语言
头
meta charset='UTF-8 '
标题学生信息管理/标题
/头
身体
表格边框=1px
tr
泰国(泰国)学号/th
泰国(泰国)姓名/th
泰国(泰国)性别/th
泰国(泰国)操作/th
/tr
%
Page _ S pagg=(Page _ S)request . get attribute(' PAG ');
for(学生学生:pagg.getStudents())
{
%
tr
tha href=' FindStudentById _ Servlet?uid=%=student . getid()% ' %=student . getid()%/a/th
th%=student.getName() %/th
th%=student.getSex() %/th
tha href='DeleteStudent_Servlet?uid=%=student . getid()% ' Delete/a/th
/tr
%
}
%
/表格
A href='add.jsp '已添加/a
%
If(pagg.getCurrentPage()==0)//当用户在首页时
{
%
a href='findStudentByPage?Page=%=pagg.getcurrentpage () 1% '下一页/a
a href='findStudentByPage?当前页=%=pagg.gettotalpage ()-1% '最后一页/a
%
} else if(pagg . getcurrentpage()==pagg . gettotal page()-1)//当用户在最后一页时
{
%
a href='findStudentByPage?Page=0 '主页/a
a href='findStudentByPage?当前页面=%=pagg.getcurrentpage ()-1% '上一页/a
%
}else//当用户在中间页面时
{
% a href='findStudentByPage?Page=0 '主页/a
a href='findStudentByPage?Page=%=pagg.getcurrentpage () 1% '下一页/a
a href='findStudentByPage?当前页面=%=pagg.getcurrentpage ()-1% '上一页/a
a href='findStudentByPage?当前页=%=pagg.gettotalpage ()-1% '最后一页/a
%
}
%
英国铁路公司
/body
/html
看一下效果图:
首先看数据库内容:
然后是头版:
下一页:
最后,最后一页:
一般描述:
首先是函数的描述,第一步是计算数据总量,然后默认容量设置为3。最后,在jsp代码中加入了与用户交互的功能,也就是让用户选择一个页面应该有多少内容(因为我写的这个有点bug,就先不贴了,可以完美实现后再更新)。之后对前端数据进行打包。这个函数需要什么数据?首先,数据总量是多少?然后你必须存储全部数据内容,对吗?那么页面大小是需要的吧?那么,用户页面的页面位置是多少呢?最后一个是总数据量和页面大小计算出来的总页数吧?所以总共需要记录五个属性值,所以把它们打包成一个JavaBean,前面的代码已经贴出来了。最后,我想提一下,如果我第一次访问页面,我应该有一些属性值为null,这将报告null指针异常,所以我必须做一些小的处理。哪些?比如用户第一次访问,系统无法接收到用户当前页面的页面值,需要做出判断。(此处代码)如果用户第一次访问,那么会给一个默认值0,也就是第一页,这个小问题就解决了。类似这样的其他问题还有,当用户选择页面的内容时,也需要给一个默认值,否则指针会是空白的。然后,对于web.xml文件的内容设置,要把主页设置成一个具有分页功能的Servlet,因为每次翻页或者第一次访问,虽然都是在index.jsp,但是都需要请求并转发每次动作后获得的新内容,从而实现更新,否则程序会报错。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。