⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 displaymessageprocessor.java

📁 Java Web开发详解.书中例子的源代码(JSPlesson)
💻 JAVA
字号:
package org.sunxin.guestbook.controller;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

import org.sunxin.guestbook.*;
import org.sunxin.guestbook.beans.*;

public class DisplayMessageProcessor implements Processor
{
    public void perform(HttpServletRequest req,
                          HttpServletResponse resp,
                          ServletContext sc)
        throws IOException, ServletException,GuestbookException
    {
        GuestbookDB gstDB = (GuestbookDB)sc.getAttribute("gstdb");
        ResultSet rs=gstDB.getMessages();

        try
        {
            if(null==rs)
            {
                throw new GuestbookException("系统出错");
            }
            //移动游标到结果集的最后一行。
            rs.last();
            //得到当前行的行数,也就得到了数据库中留言的总数。
            int rowCount = rs.getRow();
            if (rowCount == 0)
            {
                StringBuffer sb=new StringBuffer(128);
                sb.append("<page name=\"guestbook\">");
                sb.append("<guestbook>");
                sb.append("<link>");
                sb.append("<firstpage>第一页</firstpage>");
                sb.append("<prevpage>上一页</prevpage>");
                sb.append("<nextpage>下一页</nextpage>");
                sb.append("<lastpage>最后页</lastpage>");
                sb.append("</link>");
                sb.append("</guestbook>");
                sb.append("</page>");
                req.setAttribute("page", sb.toString());
                return;
            }
            String strCurPage = req.getParameter("page");
            //表示当前显示的页数。
            int curPage;
            if (strCurPage == null || "".equals(strCurPage))
                curPage = 1;
            else
                curPage = Integer.parseInt(strCurPage);
            //定义每页显示的留言数。
            int countPerPage = 5;

            //计算显示所有留言需要的总页数。
            int pageCount = (rowCount + countPerPage - 1) / countPerPage;

            //移动游标到结果集中指定的行。如果显示的是第一页,curPage=1,
            //游标移动到第1行。
            rs.absolute( (curPage - 1) * countPerPage + 1);

            StringBuffer sb=new StringBuffer(1024);
            sb.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
            sb.append("<page name=\"guestbook\">");
            sb.append("<guestbook>");
            sb.append("<link>");

            //如果是第1页,则显示不带链接的文字,如果不是第1页,
            //则给用户提供跳转到第一页和上一页的链接。
            if(curPage==1)
            {
                sb.append("<firstpage>第一页</firstpage>");
                sb.append("<prevpage>上一页</prevpage>");
            }
            else
            {
                sb.append("<firstpage>");
                sb.append("<a href=\"index.jsp?page=1\">第一页</a>");
                sb.append("</firstpage>");
                sb.append("<prevpage>");
                sb.append("<a href=\"index.jsp?page="+(curPage-1)+"\">上一页</a>");
                sb.append("</prevpage>");
            }
            //如果当前页是最后一页,则显示不带链接的文字,如果不是最后一页,
			//则给用户提供跳转到最后一页和下一页的链接。
            if(curPage==pageCount)
            {
                sb.append("<nextpage>下一页</nextpage>");
                sb.append("<lastpage>最后页</lastpage>");
            }
            else
            {
                sb.append("<nextpage>");
                sb.append("<a href=\"index.jsp?page=" + (curPage + 1) +
                          "\">下一页</a>");
                sb.append("</nextpage>");
                sb.append("<lastpage>");
                sb.append("<a href=\"index.jsp?page=" + pageCount +
                          "\">最后页</a>");
                sb.append("</lastpage>");
            }
            sb.append("</link>");
            int i=0;

            //得到ResultSetMetaData对象,用于获取数据库表结构的信息。
            ResultSetMetaData rsMetaData=rs.getMetaData();
            //得到结果集中列的总数。
            int fieldCount=rsMetaData.getColumnCount();

            sb.append("<record>");

            //以循环的方式取出每页要显示的数据,因为在前面针对要显示的页数,
            //调用了rs.absolute((curPage-1)*countPerPage+1);
            //所以是从游标所在的位置取出当前页要显示的数据。
            while(i<countPerPage && !rs.isAfterLast())
            {
                sb.append("<row>");
                for(int j=1;j<=fieldCount;j++)
                {
                    //得到列的名字。
                    String columnName=rsMetaData.getColumnName(j);
                    sb.append("<field name=\""+columnName.toLowerCase()+"\">");
                    if(5==j)
                    {
                        Timestamp ts=rs.getTimestamp("gst_time");
                        long lms=ts.getTime();
                        Date date=new Date(lms);
                        Time time=new Time(lms);
                        sb.append(date+" "+time);
                    }
                    else
                        sb.append(rs.getString(j));
                    sb.append("</field>");
                }
                sb.append("</row>");
                i++;
                rs.next();
            }
            rs.close();
            sb.append("</record>");
            sb.append("</guestbook>");
            sb.append("</page>");
            req.setAttribute("page", sb.toString());
        }
        catch (SQLException sx)
        {
            throw new ServletException("系统出错");
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -