jsp分页功能实现两种方法,jsp分页技术,JSP实现分页效果

jsp分页功能实现两种方法,jsp分页技术,JSP实现分页效果

这篇文章主要为大家详细介绍了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,但是都需要请求并转发每次动作后获得的新内容,从而实现更新,否则程序会报错。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

jsp分页功能实现两种方法,jsp分页技术,JSP实现分页效果