图片 292

关于java web的笔记2018-01-12

<%//说明count是总的记录的条数
//page是用户提交的参数,用于控制分页的,允许的值是正整数,负整数
int i=count/15; //总页,每页显示15条记录
int j=i/10; //总的大页 ,没10个页面分一大页
//Page 显示的页面
int StartPage;
//int HrefPage;
if (Page<0) Page=0-Page*10; //10页分一次
StartPage=Page/10; //10页分一次
out.print (“[共有”+i+”页]”);
//out.print (“共有”+j+”屏”);
//out.print (“显示第”+Page+”页”);
//out.print (“StartPage=”+StartPage);
if (StartPage>0)
out.print (“|<a
href=”connectmysql.jsp?page=-“+Integer.toString(StartPage-1)+””>前10页</a>”);
for (int k=0;k<10;k++)
{ int p=StartPage*10+k;
if (p>i) break;
if (p==Page)
out.print (“|第”+Integer.toString(p+1)+”页”);
else
out.print (“|<a
href=”connectmysql.jsp?page=”+p+””>第”+Integer.toString(p+1)+”页</a>”);
}
if (StartPage<j)
out.print (“|<a
href=”connectmysql.jsp?page=-“+Integer.toString(StartPage+1)+””>后10页</a>”);
out.print (“|”);
%>

昨天看到一篇《纯JSP分页代码》的文章,是用于mysql,稍微修改下,用于Sqlserver2005/2008,没有异常处理。没有考虑性能等。

需求:1、写一个商品类,有商品编号、商品名称、商品分类、商品单价属性。2、写一个商品条目信息类,有商品和数量两个属性,有商品总价格方法。
3、写一个购物车类,有添加商品方法、查看订单信息,删除商品,修改商品,清空购物车,求购物车中所有商品总金额方法。4、写一个测试类,测试上述方法。
商品类:
[java] view plain copy
public class Product {
private int productId;// 商品编号
private String productName;// 商品名称
private String category;// 商品分类
private double price;// 单价

现将代码贴出,以供初学者参考:

public Product() {// 无参构造
super();
}

注:邀月使用环境Eclipse 3.4.2+Tomcat 6.18+Sqlserver2005 sp3调试成功。

public Product(int productId, String productName, String category,
double price) {
super();
this.productId = productId;
this.productName = productName;
this.category = category;
this.price = price;
}

页面pagelistDemo.jsp内容:

public String toString() {
return “Product [productId=” + productId + “, productName=”

图片 1图片 2Code
图片 3<%@ page language=”java” contentType=”text/html; charset=UTF-8″
图片 4    pageEncoding=”UTF-8″%>
图片 5<%
图片 6    //连接字符串
图片 7    String url = “jdbc:sqlserver://” + Globals.Server
图片 8            + “;databaseName=” + Globals.DbName;
图片 9    Class.forName(Globals.driverName).newInstance();
图片 10    Connection connection = DriverManager.getConnection(url,
图片 11            Globals.username, Globals.pwd);
图片 12    Statement statement = connection.createStatement();
图片 13
图片 14    //每页显示记录数
图片 15    int PageSize = 10;
图片 16    int StartRow = 0; //开始显示记录的编号
图片 17    int PageNo = 0;//需要显示的页数
图片 18    int CounterStart = 0;//每页页码的初始值
图片 19    int CounterEnd = 0;//显示页码的最大值
图片 20    int RecordCount = 0;//总记录数;
图片 21    int MaxPage = 0;//总页数
图片 22    int PrevStart = 0;//前一页
图片 23    int NextPage = 0;//下一页
图片 24    int LastRec = 0;
图片 25    int LastStartRecord = 0;//最后一页开始显示记录的编号
图片 26
图片 27    //获取需要显示的页数,由用户提交
图片 28图片 29    if (request.getParameter(“PageNo”) == null) 图片 30{ //如果为空,则表示第1页
图片 31图片 32        if (StartRow == 0) 图片 33{
图片 34            PageNo = StartRow + 1; //设定为1
图片 35        }
图片 36图片 37    } else 图片 38{
图片 39        PageNo = Integer.parseInt(request.getParameter(“PageNo”)); //获得用户提交的页数
图片 40        StartRow = (PageNo – 1) * PageSize; //获得开始显示的记录编号
图片 41    }
图片 42
图片 43    //因为显示页码的数量是动态变化的,假如总共有一百页,则不可能同时显示100个链接。而是根据当前的页数显示
图片 44    //一定数量的页面链接
图片 45
图片 46    //设置显示页码的初始值!!
图片 47图片 48    if (PageNo % PageSize == 0) 图片 49{
图片 50        CounterStart = PageNo – (PageSize – 1);
图片 51图片 52    } else 图片 53{
图片 54        CounterStart = PageNo – (PageNo % PageSize) + 1;
图片 55    }
图片 56
图片 57    CounterEnd = CounterStart + (PageSize – 1);
图片 58%>
图片 59<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “;
图片 60
图片 61<%@page import=”net.data.util.Globals”%>
图片 62<%@page import=”java.sql.ResultSet”%>
图片 63<%@page import=”java.sql.DriverManager”%>
图片 64<%@page import=”java.sql.Connection”%>
图片 65<%@page import=”java.sql.Statement”%>
图片 66<element>
图片 67<html>
图片 68<head>
图片 69<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
图片 70<title>分页显示记录</title>
图片 71<link rel=”stylesheet” href=”style.css” type=”text/css”>
图片 72</head>
图片 73<%
图片 74    //获取总记录数
图片 75    ResultSet rs = statement
图片 76            .executeQuery(“select count(P_ID) from product”);
图片 77    rs.next();
图片 78    RecordCount = rs.getInt(1);
图片 79
图片 80    //取特定页数的数据
图片 81    String strColumn = ” P_ID,P_Name,LoginID,modTime,P_SingleIntro “;
图片 82    String strTable = ” Product “;
图片 83    String strSort = ”  p_ID desc “;
图片 84    String PKID = “P_ID”;
图片 85    String strSql = “”;
图片 86    String strWhere = “”;
图片 87    String START_ID = Integer.toString((PageNo – 1) * PageSize + 1);
图片 88    String END_ID = Integer.toString(PageNo * PageSize);
图片 89    strSql = ” SELECT ” + strColumn
图片 90            + ” FROM (SELECT ROW_NUMBER() OVER(ORDER BY ” + strSort
图片 91            + “) AS rownum,” + strColumn + ”  FROM ” + strTable
图片 92            + ” WITH(NOLOCK) ” + strWhere
图片 93            + “) AS D  WHERE rownum BETWEEN ” + START_ID + ” AND “
图片 94            + END_ID + ” ORDER BY ” + strSort;
图片 95    rs = statement.executeQuery(strSql);
图片 96
图片 97    //获取总页数
图片 98    MaxPage = RecordCount % PageSize;
图片 99图片 100    if (RecordCount % PageSize == 0) 图片 101{
图片 102        MaxPage = RecordCount / PageSize;
图片 103图片 104    } else 图片 105{
图片 106        MaxPage = RecordCount / PageSize + 1;
图片 107    }
图片 108%>
图片 109<body class=”UsePageBg”>
图片 110<table width=”100%” border=”0″ class=”InternalHeader”>
图片 111    <tr>
图片 112        <td width=”24%”><font size=4>分页显示记录</font></td>
图片 113        <td width=”76%”><font size=4><%=”总共” + RecordCount + “条记录 – 当前页:” + PageNo + “/”
图片 114                    + MaxPage%></font></td>
图片 115    </tr>
图片 116</table>
图片 117
图片 118<br>
图片 119<table width=”100%” border=”0″ class=”NormalTableTwo”>
图片 120    <tr>
图片 121        <td class=”InternalHeader”>记录序号</td>
图片 122        <td class=”InternalHeader”>数据标识号</td>
图片 123        <td class=”InternalHeader”>产品名称</td>
图片 124        <td class=”InternalHeader”>作者</td>
图片 125        <td class=”InternalHeader”>提交时间</td>
图片 126        <td class=”InternalHeader”>简介</td>
图片 127    </tr>
图片 128
图片 129    <%
图片 130        long i = 1;
图片 131图片 132        while (rs.next()) 图片 133{
图片 134            long bil = i + (PageNo – 1) * PageSize;
图片 135    %>
图片 136    <tr>
图片 137        <td class=”NormalFieldTwo”><%=bil%></td>
图片 138        <td class=”NormalFieldTwo”><%=rs.getString(1)%></td>
图片 139        <td class=”NormalFieldTwo”><%=rs.getString(2)%></td>
图片 140        <td class=”NormalFieldTwo”><%=rs.getString(3)%></td>
图片 141        <td class=”NormalFieldTwo”><%=rs.getString(4)%></td>
图片 142        <td class=”NormalFieldTwo”><%=rs.getString(5)%></td>
图片 143    </tr>
图片 144    <%
图片 145        i++;
图片 146        }
图片 147    %>
图片 148</table>
图片 149<br>
图片 150<table width=”100%” border=”0″ class=”InternalHeader”>
图片 151    <tr>
图片 152        <td>
图片 153        <div align=”center”>
图片 154        <%
图片 155            out.print(“<font size=4>”);
图片 156            //显示第一页或者前一页的链接
图片 157            //如果当前页不是第1页,则显示第一页和前一页的链接
图片 158图片 159            if (PageNo != 1) 图片 160{
图片 161                PrevStart = PageNo – 1;
图片 162                out.print(“<a href=pagelistDemo.jsp?PageNo=1>第一页 </a>: “);
图片 163                out.print(“<a href=pagelistDemo.jsp?PageNo=” + PrevStart
图片 164                        + “>前一页</a>”);
图片 165            }
图片 166            out.print(“[“);
图片 167
图片 168            //打印需要显示的页码
图片 169图片 170            for (int c = CounterStart; c <= CounterEnd; c++) 图片 171{
图片 172图片 173                if (c < MaxPage) 图片 174{
图片 175图片 176                    if (c == PageNo) 图片 177{
图片 178图片 179                        if (c % PageSize == 0) 图片 180{
图片 181                            out.print(c);
图片 182图片 183                        } else 图片 184{
图片 185                            out.print(c + ” ,”);
图片 186                        }
图片 187图片 188                    } else if (c % PageSize == 0) 图片 189{
图片 190                        out.print(“<a href=pagelistDemo.jsp?PageNo=” + c + “>” + c
图片 191                                + “</a>”);
图片 192图片 193                    } else 图片 194{
图片 195                        out.print(“<a href=pagelistDemo.jsp?PageNo=” + c + “>” + c
图片 196                                + “</a> ,”);
图片 197                    }
图片 198图片 199                } else 图片 200{
图片 201图片 202                    if (PageNo == MaxPage) 图片 203{
图片 204                        out.print(c);
图片 205                        break;
图片 206图片 207                    } else 图片 208{
图片 209                        out.print(“<a href=pagelistDemo.jsp?PageNo=” + c + “>” + c
图片 210                                + “</a>”);
图片 211                        break;
图片 212                    }
图片 213                }
图片 214            }
图片 215
图片 216            out.print(“]”);
图片 217            ;
图片 218
图片 219图片 220            if (PageNo < MaxPage) 图片 221{ //如果当前页不是最后一页,则显示下一页链接
图片 222                NextPage = PageNo + 1;
图片 223                out.print(“<a href=pagelistDemo.jsp?PageNo=” + NextPage
图片 224                        + “>下一页</a>”);
图片 225            }
图片 226
图片 227            //同时如果当前页不是最后一页,要显示最后一页的链接
图片 228图片 229            if (PageNo < MaxPage) 图片 230{
图片 231                LastRec = RecordCount % PageSize;
图片 232图片 233                if (LastRec == 0) 图片 234{
图片 235                    LastStartRecord = RecordCount – PageSize;
图片 236图片 237                } else 图片 238{
图片 239                    LastStartRecord = RecordCount – LastRec;
图片 240                }
图片 241
图片 242                out.print(“:”);
图片 243                out.print(“<a href=pagelistDemo.jsp?PageNo=” + MaxPage
图片 244                        + “>最后一页</a>”);
图片 245            }
图片 246            out.print(“</font>”);
图片 247        %>
图片 248        </div>
图片 249        </td>
图片 250    </tr>
图片 251</table>
图片 252<%
图片 253    rs.close();
图片 254    statement.close();
图片 255    connection.close();
图片 256%>
图片 257</body>
图片 258</html>
图片 259

  • productName + “, category=” + category + “, price=” + price
  • “]”;
    }

 

public int getProductId() {
return productId;
}

 用到的类文件:Globals.java

public void setProductId(int productId) {
this.productId = productId;
}

图片 260图片 261Code
图片 262图片 263/** *//**
图片 264 * 
图片 265 */
图片 266package net.data.util;
图片 267
图片 268图片 269/** *//**
图片 270 * @author Administrator
图片 271 *
图片 272 */
图片 273图片 274public class Globals 图片 275{
图片 276    public static String username=”sa”;
图片 277    public static String pwd=”sa”;
图片 278    public static String DbName=”TestData”;
图片 279    //public static String Server=”192.168.30.6″;
图片 280    public static String Server=”192.168.44.2:1433″;
图片 281    public static String Port=”1433″;
图片 282    
图片 283    public static String driverName=”com.microsoft.sqlserver.jdbc.SQLServerDriver”;
图片 284//    public static String connectionURL {
图片 285//        
图片 286//            return “jdbc:sqlserver://”+Server+”:”+Port+”;databaseName=”+DbName;
图片 287//    }
图片 288
图片 289
图片 290}
图片 291

public String getProductName() {
return productName;
}

 

public void setProductName(String productName) {
this.productName = productName;
}

效果如图:

public String getCategory() {
return category;
}

图片 292 

public void setCategory(String category) {
this.category = category;
}

 

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

}
商品条目信息类:
[java] view plain copy
public class ProductItem {
private Product product;//购买的商品
private int count;//商品数量
public double totalMoney(){//小计
double price=product.getPrice();//获取商品单价
return price*count;
}

public ProductItem() {
super();
}

public ProductItem(Product product, int count) {
super();
this.product = product;
this.count = count;
}

public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}

}

购物车类:
[java] view plain copy
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class ShoppingCart {//购物车
//key:商品编号 value:商品条目
private Map<Integer,ProductItem> map=new
LinkedHashMap<Integer,ProductItem>();

public void addProduct(Product p){//添加商品
int productId=p.getProductId();
if(map.containsKey(productId)){
ProductItem productItem=map.get(productId);
productItem.setCount(productItem.getCount()+1);
}else{
map.put(productId, new ProductItem(p,1));
}
}
public void showAll(){//查看订单信息
Collection<ProductItem> productItems = map.values();
Iterator<ProductItem> iterator = productItems.iterator();
while(iterator.hasNext()){
ProductItem productItem = iterator.next();
Product product = productItem.getProduct();
System.out.println(“商品编号:”+product.getProductId()+”,商品名称:”
+product.getProductName()+”,单价:”+product.getPrice()+”,数量:”+productItem.getCount()
+”,小计:”+productItem.totalMoney());
}
}
public boolean deleteProduct(int productId){//删除商品
if(map.containsKey(productId)){
map.remove(productId);
return true;
}
return false;
}
public boolean modifyProduct(int productId,int count){//修改
if(map.containsKey(productId)){
if(count>=1){
ProductItem productItem = map.get(productId);
productItem.setCount(count);
return true;
}else if(count==0){//删除
deleteProduct(productId);
return true;
}
}
return false;
}

public void clearCart(){//清空购
map.clear();
}

public double totalAllMoney(){//

double total=0;
Collection<ProductItem> productItems = map.values();
Iterator<ProductItem> iterator = productItems.iterator();
while(iterator.hasNext()){
ProductItem productItem = iterator.next();
double money=productItem.totalMoney();
total+=money;
}
return total;
}
}

jsp=html中写java代码
jsp中的内容就是对应着java中的内容,最终要编译成class文件
把jsp页面中的html排版标签输出到浏览器:out.write(“<br>”);//是一个字符输出流输出的
jsp中的java代码是如何执行的:jsp中的java代码被原封不动地被翻译到了servlet的service方法中
服务器在调用jsp时,会给jsp传递的对象:request,response,pageContext,config,session,page,out
指令是给服务器用的,告诉服务器应当如何对待jsp页面
<%@include file=”/a.jsp”%>
动作指令:
<jsp:include page=”/a.jsp”>
</jsp:include>
请求转发,指向被转发的页面
<jsp:forward page=”/a.jsp”>
<%–传递请求参数,供其他标签使用–%>
<jsp:param name=”a” value=”123″></jsp:param>
<jsp:param name=”b” value=”456″></jsp:param>
</jsp:forword>
Statement:代表SQL语句,向数据库发送并执行SQL语句
ResultSet executeQuery(String
sql):仅仅执行数据库的查询操作,返回查询的结果集
int executeUpdate(String sql):执行DML,返回影响操作数据记录的行数
int num = stmt.executeUpdate(“update users set id=’111′”);
boolean execute(String
sql):执行sql语句,如果有返回值则返回true,没有返回值返回false
遍历的结果集打印到控制台没有鸟用,应该封装到JavaBean中
List<Users> user = new ArrayList<Users>();
while(rs.next()){
Users u = new Users();
u.setId(rs.getInt(“id”));
u.setName(rs.getString(“name”));
u.setEmail(rs.getString(“email”));
u.setBirthday(rs.getDate(“birthday”));
user.add(u);
}
jdbc的编码规范和工具类的抽取
1.编写配置文件dbcpfg.properties
2.工具类:JdbcUtil.java,直接拿来用
3.编写自己的代码
Connction conn = null;
Statment stmt = null;
ResultSet rs = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.createStatement();
// your code
}catch(Exception e){
throw new RuntimeException(e);
}finally{
JdbcUtil.release(rs, stmt, conn);
}

JDBC的CRUD
public void myAdd(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.createStatement();
// 添加没有结果集
stmt.executeUpdate(“insert into users(iname, password, email, birthday)
values (‘tom’,’123′, ‘boshi.cn’,’1990-02-10′)”);
}catch(Exception e){
throw new RuntimeException(e);
}finally{
JdbcUtil.release(null, stmt, conn);
}
}
public void myDel(){
Connction conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.createStatement();
// 删除没有结果集
stmt.executeUpdate(“delete from users where id=’12′”);
}catch(Exception e){
throw new RuntimeException(e);
}finally{

JdbcUtil.release(rs, stmt, conn);
}
}
public void myModify(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.createStatement();
stmt.executeUpdate(“update users set name=’deng’ where id = 111”);//
id是整数,不用引号
}catch(Exception e){
throw new RuntimeException(e);
}finally{
JdbcUtil.release(null,stmt,conn);
}
}
// 从user中获取数据
public void mySave(User user){
Connection conn = null;
PreparedStatement stmt = null;
try{
conn = JdbcUtil.getConnection();
// 预编译指令
stmt = conn.PrepareStatement(“insert into users(name, pass, email)
values (?,?,?,?)”);
stmt.setString(1, user.getName());//
1代表预编译指令中的第一个问号,之后一次类推
stmt.setString(2, user.getPass());
stmt.setString(3, user.getEmail());
stmt.executeUpdate();
}catch(Exception e){
throw new RuntimeException(e);
}finally{
JdbcUtil.release(null,stmt,conn);
}
}
分页
select * from customer limit 0,10
对客户信息的查询结果集进行分页
// 设计page类,封装与分页有关的信息
public class Page{
private int pageSize = 10; // 每页显示的记录条数
private List records; // 每页显示的记录,dao传过来
private int pageNum=1; // 当前页码,由用户传进来
private int totalPage; // 总共的页数,计算出来

private int pageIndex; // 每页开始记录的索引,计算出来
private int totalRecords; // 总共的记录个数,dao传过来
public Page(int pageNum, int totalRecords){
this.pageNum = pageNum;
this.totalRecords = totalRecords;
// 计算总页数
this.totalPage =
totalRecords%page/Size==0?totalRecords/page/Size:totalRecords/page/Size+1;
// 当前页的开始记录索引
this.pageIndex = (pageNum-1)*pageSize;
}
}
// dao中的方法
// 获取记录的总条目数
int getTotalRecordsNum();
//
根据索引查询分页记录,pageIndex:开始查询的位置;size:每页显示的记录条数
List<Customer> findPageRecords(int pageIndex, int size);

// dao 实现
public int getTotalRecordsNum(){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.PrepareStatement(“select count(*) from Customer”);
rs = stmt.executeQuery();
if(rs.next()){
return rs.getInt(1);
}
}catch(Exception e){
throw new RuntimeException(e);
}finally{
JdbcUtil.release(null,stmt,conn);
}
}
//
每一个记录为一个对象,把记录保存起来就是要把这些对象存起来.当前页的索引,每页显示的索引个数
public List<Customer> findPageRecords(int offset, int size){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.PrepareStatement(“select * from Customer”);
rs = stmt.executeQuery();// 保存了所有的记录
List<Customer> cs = new ArrayList<Customer>();
// 迭代把这些东东取出来
while(rs.next()){
Customer customer = new Customer();
customer.setId(rs.getInt(“id”));
customer.setName(rs.getString(“name”));
customer.setPassword(rs.getString(“password”));
customer.setEmail(rs.getString(“email”));
customer.setBirthday(rs.gteDate(“birthday”));
cs.add(customer);
}
return cs;

}catch(Exception e){
throw new RuntimeException(e);
}finally{
JdbcUtil.release(null,stmt,conn);
}
}

// 根据用户查询的页码,返回有关该页面数据的page对象
Page fingPage(String pageNum);
实现:
public Page findPage(String num){
private int pageNum = 1;// 默认值1
if(num!=null){
pageNum = Integer.parseInt(num);
}
// 从dao获取总的记录
int pageRecords = dao.getTotalRecordsNum();
// 目前有的数据,当前页码;总记录。建立一个Page对象
Page page = new Page(pageNum,pageRecords);//
该对象已经初始化了,包含了所有的信息
// 获取记录数据
List<Customer> cs =
dao.findPageRecords(page.getPageIndex(),page.getPageSize());
// 大方向是一个list
page.setRecords(cs);
return page;

}

// 改造servlet
public void showAllCustomers(HttpServleRequest request,
HttpServletResponse response){
// 获取用户要看的页码
String pageNum = request.getParameter(“num”);
Page page = s.findPage(pageNum);
request.setAttribute(“page”,page);
// 让其在别的页面显示出来
request.getRequestDispacther(“/abc/1.jsp”).forward(request,response);

}

${param.name}等价于request.getParameter(“name”);//
用于服务器从浏览器或客户端取数据
${requestScope.name}等价于request.getAttribute(“name”); //
服务器传递结果到页面,在页面获取服务器保存的值

<c:forEach items=”${userList}” var=”user” varStatus=”status”
begin=”0″ end=”${userList.size}” step=”1″>

</c:forEach>

改造jsp页面
<c:forEach items=”${page.records}” var=”c” varStatus=”vs”>
<tr class=”${vs.index%2==0?’odd’:’even’}”>
<td>
<input tyep=”checkbox” name=”ids” value=”${c.id}”
</td>
<td>
${c.name}
</td>
<td>
${c.email}
</td>
<td>
${{c.birthday}
</td>
<td>
<a
href=”${pageContext.request.contextPath}/servlet/Controller?op=editCustoerUI&customerId=${c.id}”>修改</a>
<a href=”javaScript:deleOne(‘${c.id}’)”>删除</a>
</td>
</tr>
<c:forEach>
分页:
第${page.pageNum}页  总共${page.totalPage}页  
<a
href=”${pageContext.request.contextPath}/servlet/Controller?op=showAllCustomers&num=${page.pageNum-1<1?1:page.pageNum-1}”>上一页</a>
<a
href=”${pageContext.request.contextPath}/servlet/Controller?op=showAllCustomers&num=${page.pageNum+1>page.totalPage?page.totalPage:page.pageNum+1}”>下一页</a>

jstl标签
<c:forEach items=”${userList}” var=”user” varStatus=”status”
begin=”0″ end=”${userList.size}” step=”1″ >
//循环体
<c:out value=”${status.index}”></c:out>
<c:out value=”${status.count}”></c:out>
<c:out value=”${ user.name }”></c:out>
<c:out value=”${ user.age }”></c:out>
</c:forEach>

参数说明:
1)items:是集合,用EL表达式;
2)var:变量名,存放items各个项 ,代表集合中每一条数据
3)varStatus: 显示循环状态的变量,有一下几个属性:
①index:从0开始; 显示当前迭代的索引值
②count:元素位置,从1开始;
显示当前迭代显示的行位置,通过配合判断语句,实现给奇、偶行着不同的色,以进行分区
③first:如果是第一个元素则显示true;
④last:如果是最后一个元素则显示true;
4)begin:循环的初始值(整型);
5)end: 循环结束(整型);
6)step:步长,循环间隔的数值(整型);

发表评论

电子邮件地址不会被公开。 必填项已用*标注