?? displaymessageprocessor.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 + -