请问带有数字页码的分页有关问题

请教带有数字页码的分页问题
  <%   
            int pagesize = 5;//每页显示记录数   
            int liststep = 4;//最多显示分页页数   
            int pages = 1;//默认显示第一页   
            if (request.getParameter("pages") != null) {   
                pages = Integer.parseInt(request.getParameter("pages"));//分页页码变量   
            }   
          int count = PageDao.getmaxpagecount();//假设取出记录总数   
            int pagescount = (int) Math.ceil((double) count / pagesize);// 
            if (pagescount < pages) {   
                pages = pagescount;//如果分页变量大总页数,则将分页变量设计为总页数   
            }   
            if (pages < 1) {   
                pages = 1;//如果分页变量小于1,则将分页变量设为1   
            }   
            int listbegin = (pages - (int) Math.ceil((double) liststep / 2));//从第几页开始显示分页信息   
            if (listbegin < 1) { //当前页-(总显示的页列表数/2)   
                listbegin = 1;   
            }   
            int listend = pages + liststep / 2;//分页信息显示到第几页//当前页+(总显示的页列表数/2)   
            if (listend > pagescount) {    
                listend = pagescount + 1;   
            }   
        %>   

        <table align="center">   

            <tr>   
                <th>图书编号  </th>   
                <th> 图书名称   </th>   
                <th> 出版社 </th>   
                <th>作者</th>   
                <th> 价格 </th>   
            </tr>   
            <%   
                List<Book> list = PageDao.getAllPageInfo(pages);   
                Iterator<Book> it = list.iterator();   
                while (it.hasNext()) {   
                 Book b = it.next();
            %>   
            <td><%=b.getId()%></td>    
            <td><%=b.getBookname()%></td>   
            <td><%=b.getBookpublish()%></td>   
            <td><%=b.getBookauthor()%></td>   
            <td><%=b.getBookprice()%></td>   
            <%   
                out.println("<tr>");   
                }   
            %>   
        </table>   
        <table align="center">   
            <tr>   
              <%   
                    //<显示分页信息   
                  
                    //<显示上一页   
                    if (pages > 1) {   
                        out.println("<td><a href=?pages=" + (pages - 1)+ ">上一页</a></td>");}//>显示上一页    
                    //<显示分页码   
                 for (int i = listbegin; i < listend; i++) {   
                        if (i != pages) {//如果i不等于当前页   
                            out.println("<td><a href=?pages=" + i + ">[" + i   
                                    + "]</a></td>");   
                        } else {   
                            out.println("<td>[" + i + "]</td>");   
                        }   
                    }//显示分页码>  
                    
                    //<显示下一页   

                    if (pages != pagescount) {   
                        out.println("<td><a href=?pages=" + (pages + 1) + ">下一页</a></td>");   

                    }//>显示下一页   

                    //>显示分页信息   
                %>   
            </tr>   
        </table>
   
页码结果是:
在第一页时显示:[1][2]
点击第2页时显示[1][2][3]
点击第3页时显示[1][2][3][4]
点击第4页时显示[2][3][4][5]
以后都显示4个页码了。感觉有点怪怪的,能不能固定显示4页码?显示不完时最好带有省略号?谢谢!!
------解决思路----------------------
网上找,好多这方面的资料
------解决思路----------------------
你这个最好自己写一个分页辅助类。然后页面传参数就好了。你在页面判断超过多少显示多少页。其余用。。。表示