javabean servlet jsp实现分页功能代码解析
前端实现用厉格瑞实现分页,感觉用框架确实简单,闲着无聊,模拟着狮虎的分页界面实现了一遍(只要是功能,样式什么无视)
这里用基础的三层架构servlet jsp实现,思路很简单,把所有分页相关信息写入到一个佩吉比恩类里面服务返回这个豆类,每次分页查询时都从该豆里查找信息。只是其中的细节问题比较繁琐,如边界处理(前端和后台边界都要处理),下拉框跳转后要显示当前页等等
这是厉格瑞实现的分页样式(实现过程我的上一篇博客有写://www .JB 51。net/article/92850。htm)
模拟实现过程:
目录结构
数据库(mysql)
模型层,一个数据库对应的模型(博客),还有一个页面Bean(BlogPage)
导入Java。SQL。日期;公共类博客{私有int id私有int类别_ id私有字符串标题;私有字符串内容;私有创建日期_时间;//getter和作曲者方法@将公共字符串重写为String(){ return ' Blog[id=' id ',category_id=' category_id ',title=' title ',content=' content ',created _ time=' created _ time ']';} } public class BlogPage { private ListBlog页面记录;//每页记录private int pageno//当前页private int pagenostart每页开始索引私有int页面大小=5;//每页多少数据private int totalrecord/总记录数private int totalpage//总页数public BlogPage(int pageno,int total record){//page no total record都可以当做已有信息这个。总记录=总记录;//计算总页数总页数=(总记录%页面大小==0)?总记录/页面大小:总记录/页面大小1;//pageno的边界处理如果(页码=1)这。页码=1;否则如果(页码=总页数)这。页码=总页数;还有这个。页码=页码;//计算每页开始索引,即每页第一个数据的索引,用于分页查询pagenostart=(这个。页码-1)*页面大小;} public int getPagenostart(){ return pagenostart;} public void setagenostart(int page nosart){ this。page nostart=page nostart} public list blog get page record(){ return page record;} public void setPagerecord(ListBlog页面记录){ this。页面记录=页面记录;} public int getpage no(){返回页码;} public void setageno(int page no){ this。页码=页码;} public int get page size(){ return page size;} public void SetPageSize(int page size){ this。页面大小=页面大小;} public int getTotalrecord(){返回总记录;} public void setTotalrecord(int total record){ this。总记录=总记录;} public int getTotalpage(){ return total page;} public void setTotalpage(int total page){ this。总页数=总页数;}}dao层
JDBCUtil封装了jdbc的连接和释放操作
公共类JDBC util {私有静态String URL=' JDBC :我的SQL ://localhost :3306/blogs _ stu ';私有静态字符串用户名=" root私有静态字符串密码=' ';静态{尝试{类。FOrname(' com。MySQL。JDBC。驱动程序');} catch(异常e){ e . print stack trace();} }公共静态连接getConnection(){ Connection conn;尝试{ conn=drivermanager。获取连接(网址、用户名、密码);返回conn } catch(SQLException e){ e . printstacktrace();}返回null}公共静态无效释放(结果集,准备状态,连接连接){如果!=null){ try { RS。close();} catch(SQLException e){ e . printstacktrace();} } if(ps!=null){尝试{ PS。close();} catch(SQLException e){ e . printstacktrace();} } if(conn!=null){ try { conn . close();} catch(SQLException e){ e . printstacktrace();} } }}
公共类BlogDao { //每页的记录,传入每页开始索引和每页大小用于分页,即限制的两个参数(mysql分页用limit)公共listbog getpage记录(int page nostar,int page size){ Connection conn=jdbcutil。getconnection();PreparedStatement PS=NullResultSet RS=null字符串sql='从博客限制中选择*?';list blog list=new ArrayList blog();请尝试{ PS=conn . PrepareStatement(SQL);ps.setInt(1,pagenostart);ps.setInt(2,页面大小);RS=PS。execute query();而(RS。next()){ Blog Blog=new Blog();博客。setid(RS。GetInt(' id ');博客。setCaTEgOry _ id(RS。getint(' CaTEgOry _ id ');博客。settitle(RS。getString(' title ');博客。setcontent(RS。getString(' content ');博客。setcreated _ time(RS。get date(' created _ time ');名单。添加(博客);}返回列表;} catch(SQLException e){ e . printstacktrace();}最后{ JDBCUtil.release(rs,ps,conn);}返回null} //总记录数public int getTotal(){ Connection conn=jdbcutil。getconnection();PreparedStatement PS=NullResultSet RS=null尝试{ ps=conn.prepareStatement('从博客中选择计数(*)');RS=PS。execute query();if(RS。next()){ return RS。GetInt(1);} } catch(SQLException e){ e . printstacktrace();}最后{ JDBCUtil.release(rs,ps,conn);}返回0;} }服务层
公共类博客服务{ blog Dao blog Dao=new blog Dao();//返回佩吉比恩,所有分页需要的信息都去佩吉比恩里查找公共博客页面查找页面记录(int page no){ int total record=blog Dao。gettotal();博客页面博客页面=新博客页面(页码,总记录);listbog list=blog Dao。getpage记录(博客页面。getpage nostart()、博客页面。getpage size());blogpage.setPagerecord(列表);返回blogpage}}servlet类
@WebServlet('/BlogSplitServlet ')公共类BlogSplitServlet扩展了httpersvlet { public void doGet(httpersvletrequest请求,HttpServletResponse响应)抛出ServletException,IOException { request。setcharacter encoding(' UTF-8 ');回应。setcontenttype(' text/html;charset=utf-8 ');字符串页面nostr=请求。GetParameter('页码');//首次访问servletpagenostr为null,给一个初始值,即默认访问第一页int页码=1;if(page noster!=空)页码=整数。par sent(page nostr);blog ServiCe=new blog ServiCe();博客页面博客页面=服务。查找页面记录(页码);request.setAttribute('blogPage ',博客页面);请求。get request dispatcher('/blog page。JSP ').转发(请求、响应);} public void doPost(HttpServletrequest请求,HttpServletResponse响应)抛出ServletException,IOException { doGet(请求,响应);}}这样所有的分页信息就封装到佩吉比恩里了
jsp实现只需要将佩吉比恩里的信息取出来就行了
下面给出我的jsp实现(模拟厉格瑞)
% @ page语言=' Java ' ContentType=' text/html;charset=utf-8 '页面编码=' utf-8 ' % % % @页面导入=' Java。乌提尔。*,型号.博客,模特博客页面“%!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN ' ' http://www .w3。org/TR/HTML 4/松散。DTD ' HTML hearteta http-equiv=' Content-Type ' Content=' text/HTML;字符集=utf-8 '标题在此插入标题/title脚本类型=' text/JavaScript '窗口。onload=function(){//保证挑选的选择权与当前页显示一致选择=文档。getelementbyid(' select ');页码=' $ { BlogPage。第{ 0 }页;选择选项[第一页]。selected=' selected}//选择下拉列表跳转function selectjump(){ var页码=select。selectedindex 1;窗户。位置。href=' http://localhost/jspPageSplit/BlogSplitServlet?pageno=' pageno}//文本跳转,在布尔事件,输入框失去焦点是发生函数文本跳转(){ var页码=文档。getelementbyid(' text ').价值;窗户。位置。href=' http://localhost/jspPageSplit/BlogSplitServlet?page no=' page no }/script/head body % blog page blog page=(blog page)请求。GetAttribute('博客页面');listbog列表=博客页面。getpage record();//尾页填充空白行,若不填充,尾页表格tr行数与前面不一致很难看if(列表。大小()。博客页面。getpage size()){ for(int I=list。size();我博客。getpage size();I)列表。add(null);} % div style=' width : 50%;高度: 400像素表格边框='1 '单元格间距='0 '宽度='100%' bgcolor='#CEF0C5' tr高度='40px' tdid/tdtd标题/tdtd内容/tdtd创建时间/td /tr % for(博客博客:列表){ if (blog!=null){ % tr高度=' 50px ' TD宽度=' 10% ' %=blog。getid()%/TD TD宽度=' 20% ' %=blog。gettitle()%/TD TD TD width=' 40% ' %=blog。getcontent()%/TD TD TD宽度=' 30% ' %=blog。getcreated _ time()%/TD/tr!-尾页空白行填充-% } else { % tr高度=' 50px ' TD宽度=' 10% '/TD TD TD宽度=' 20% '/TD TD宽度=' 40% '/TD TD TD宽度=' 30% '/TD/tr % } } %/table div style='高度:50 px背景-颜色: # 4b 7b 3;线高: 40px!-选择下拉框-select id=' select ' % for(int I=1;I=博客页面。gettotalpage();I){ % option onclick=' selectjump()' %=I %/option % } %/选择一个href=' $ { page context。请求。上下文路径}/BlogSplitServlet?页码=1 '首页/a a href=' $ { page context。请求。上下文路径}/BlogSplitServlet?页码=%=博客页面。getpage no()-11?博客页面。getpage no()-: blogpage。getpage no()-1% '上一页/a输入类型=' text ' id=' text ' size=' 1px ' value=' $ { blog page。bulr=' text jump()'/$ { blog page }上的第{ 0 }页。总页数} a href=' $ { page context。请求。上下文路径}/BlogSplitServlet?页码=%=博客页面。getpage no()。1个博客页面。gettotalpage()?博客页面。getpage no(): blogpage。getpage no()% 1 '下一页/a a href=' $ { page context。请求。上下文路径}/BlogSplitServlet '?页码=%=BlogPage。getTotalPage()% '尾页/a div style=' float : right;' 显示从${blogPage.pagenostart 1}到$ { blogpage。页码==blogpage。总页数?博客页面。totalrecord : blogpage。页面大小},共${blogPage.totalrecord}条。每页显示${blogPage.pagesize}条/div /div /div/body/html这是最后的样子,样式粗略的调了下,功能跟厉格瑞默认的分页一模一样
将JSP中代码改为标签(JSTL,需引入相应的冲突包)并将JSP中的尾页补白放在小型应用程序中后
小型应用程序中加入
//尾页填充空白行,若不填充,尾页表格tr行数与前面不一致很难看listbog列表=博客页面。getpage record();if(列表。大小()。博客页面。getpage size()){ for(int I=list。size();我博客。getpage size();I)列表。add(null);} blogPage.setPagerecord(列表);jsp页面
% @ page语言=' Java ' ContentType=' text/html;charset=utf-8 '页面编码=' utf-8 ' % % % @页面导入=' Java。乌提尔。*,型号.博客,模特. BlogPage " % @ taglib uri=" http://Java。星期日com/JSP/jstl/core "前缀="c %!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN ' ' http://www .w3。org/TR/HTML 4/松散。' DTD ' HTML标题在此插入标题/title脚本类型=' text/JavaScript '/select下拉列表跳转function selectjump(){ var select=document。getelementbyid(' select ');var页码=选择。selectedindex 1;窗户。位置。href=' http://localhost/jspPageSplit/BlogSplitServlet?pageno=' pageno}//文本跳转,在布尔事件,输入框失去焦点时发生函数文本跳转(){ var页码=文档。getelementbyid(' text ').价值;窗户。位置。href=' http://localhost/jspPageSplit/BlogSplitServlet?page no=' page no }/script/head body div style=' width : 50%;高度: 400像素表格边框='1 '单元格间距='0 '宽度='100%' bgcolor='#CEF0C5' tr高度='40px' tdid/tdtd标题/tdtd内容/tdtd创建时间/TD/tr c : foreach items=' $ { BlogPage。如果测试=' $ { c!=null}' tr高度='50px' td宽度='10%'${c.id}/td td宽度='20%'${c.title}/td td宽度='40%'${c.content}/td td宽度=' 30% ' $ { c . created _ time }/TD/tr/c 3360 if!-尾页空白行填充-c : if测试=' $ { c==null } ' tr高度=' 50px ' TD宽度=' 10% '/TD TD TD宽度=' 20% '/TD TD宽度=' 40% '/TD TD TD TD宽度=' 30% '/TD/tr/c : if/c : foreach/table div style=' height 336050 px;背景-颜色: # 4b 7b 3;线高: 40px!-选择下拉框-select id=' select ' c : foreach begin=' 1 ' end=' $ { blog page。总页数} ' var=' I '选项值=' $ { I } ' onclick=' selectjump()' $ { blog page。页码==我?selected=' selected ' ' : ' ' } $ { I }/option/c : foreach/select a href=' $ { page context。请求。上下文路径}/BlogSplitServlet?页码=1 '首页/a a href=' $ { page context。请求。上下文路径}/BlogSplitServlet?pageno=${blogPage.pageno-11?博客页面。第:页博客页面。'第1页' '上一页/a输入类型=' text ' id=' text ' size=' 1px ' value=' $ { blog page。bulr=' text jump()'/$ { blog page }上的第{ 0 }页。总页数} a href=' $ { page context。请求。上下文路径}/BlogSplitServlet?页码=$ {博客页面。第1页博客页面。总页数?博客页面。第:页博客页面。第{ 1 }页下一页/a a href=' $ { page context。请求。上下文路径}/BlogSplitServlet?pageno=${blogPage.totalpage} '尾页/a div style=' float : right;' 显示从${blogPage.pagenostart 1}到$ { blogpage。页码==blogpage。总页数?博客页面。totalrecord : blogpage。页面大小},共${blogPage.totalrecord}条。每页显示${blogPage.pagesize}条/div /div /div/body/html实际运用中可以根据需求编写jsp页面,但是后台代码基本是通用的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:javabean servlet jsp实现分页功能代码解析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。