JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。
下面介绍使用jstl实现的简单分页。引入的conn.jsp文件是使用jstl连接数据库文件,根据MVC的思想,JSP作为View层,只是用来负责显示操作,所以在大型项目开发中一般不推荐使用JSTL的数据库标签。
开发环境:Myeclipse10、sqlservler2005、tomcat7.0.40
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@include file="conn.jsp" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'fenye.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <div align="center"> <c:set var="pagesize" value="4" scope="page" /> <sql:query var="result1" maxRows="6" startRow="0"> select * from Table_1</sql:query> <!--记录数 --> <c:set var="number" value="${result1.rowCount}" scope="page" /> <!-- 计算分页数 --> <c:set var="pagenumber" value="${(number+pagesize-1)/pagesize}" /> <font color="blue"><c:out value="${number}" /></font> <table border="1" align="center"> <tr> <td>书名</td> <td>作者</td> <td>价格</td> <th>操作</th> </tr> <!--判断是否有信息 --> <!-- 如果类别为空 otherwise --> <c:choose> <c:when test="${empty result1.rows}"> <tr> <td colspan="4" align="center">暂时没有图书!</td> </tr> </c:when> <c:otherwise> <c:forEach items="${result1.rowsByIndex}" var="row1" begin="${param.start}" end="${param.start+pagesize-1}" > <tr> <td>${row1[0]}</td> <td>${row1[1]}</td> <td>${row1[2]}</td> <td><a href="delete.jsp?name=${row1[0]}">删除</a></td> </tr> </c:forEach> </c:otherwise> </c:choose> </table> <!--分页 --> <c:choose> <c:when test="${param.start>0}" > <a href="fenye.jsp?start=${param.start-pagesize}">上一页</a> </c:when> <c:otherwise> 上一页 </c:otherwise> </c:choose> <c:choose> <c:when test="${param.start+pagesize<number}" > <a href="fenye.jsp?start=${param.start+pagesize}">下一页</a> </c:when> <c:otherwise> 下一页 </c:otherwise> </c:choose> <!-- 显示记录数 --> 共<font color="red">${number}</font>条记录 <!-- 显示分页数 --> 共<fmt:parseNumber type="number" value="${pagenumber}" integerOnly="true" />页 </div> </body> </html>
JSTL标签连接数据库conn.jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'conn.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <sql:setDataSource url="jdbc:sqlserver://localhost:1433;databaseName=library" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" user="sa" password="123" /> </body> </html>
导出的数据库脚本:
USE [library] GO /****** 对象: Table [dbo].[Table_1] 脚本日期: 07/04/2013 14:32:03 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Table_1]( [name] [nchar](10) NOT NULL, [author] [char](10) NULL, [price] [int] NOT NULL, CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED ( [name] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF
分页实现结果如下: