小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用JDOM設計簡單的JSP+XML的系統(tǒng)留言板

 鳳舞天煌 2006-12-14
使用JDOM設計簡單的JSP+XML的系統(tǒng)留言板
 
   
    JDOM是一個開源項目,是完全利用純Java技術開發(fā)的,全稱為(Java Document Object Model)可在http://www.上下載其包文件。下載完成后,將Build文件下面的jdom.jar添加classpath類路徑以及tomcat的common/lib下,即可完成jdom的配置。
    JDOM主要包含了5個包,分別為org.JDOM、org.JDOM.input、org.JDOM.output、org.JDOM.adapters、org.JDOM.transform,作為我設計留言板主要使用到了org.JDOM、org.JDOM.input、org.JDOM.output這三個包。input包主要負責生成一個文檔,一般用于文檔的創(chuàng)建。output包主要用于文檔轉換輸出,而jdom包下面則是包含了所有可能應用到的數(shù)據(jù)類型,比如(Document、Element、Namespace等等)。
    首先,我們建立一個簡單的xml文件。文件名可為message.xml
<?xml version="1.0" encoding="UTF-8"?>
<infoList>
<info>
  <username>alexsander</username><!--保存的是發(fā)言者姓名-->
  <title>請問?</title><!--保存標題-->
  <date>Tue Jun 06 14:27:54 CST 2006</date><!--保存留言時間-->
  <information>你好,你是什么地方的人啊?</information><!--保存信息內(nèi)容-->
  <manager>系統(tǒng)管理員</manager><!--保存回復人姓名-->
  <message>暫無回復</message><!--回復內(nèi)容-->
</info>
</infoList>
PS:從這里我們可以看出xml文件具有很強的樹型結構。
然后我們就可以編寫一個JSP(bbs.jsp)頁面來顯示其中的內(nèi)容:(以下頁面有點混亂,可使用JavaBean封裝某些操作,注意首次進入頁面時候,必須是"bbs.jsp?Page=1",或者其他頁數(shù)也可以,否則會報NullPointExcepton異常)

<%@page contentType="text/html;charset=gb2312"%>
<%@page language="java" import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<%
  Element root,info;
  String file="E:\\message.xml";//盤符可以自己設定,不過要的是絕對路徑。
  StringBuffer s=new StringBuffer();//保存HTML格式
  List li;
  int P1=1,P2=1;
  int i=0,Page=1,num=0,PageSize=5,totalPage=0,totalRecord=0,
  Page=Integer.parseInt(request.getParameter("Page"));
  if(Page<=0)Page=1;
    /*@--------------------*/
    /**P1,P2控制分頁顯示**/
     /*@--------------------*/
  
try{
  SAXBuilder sb=new SAXBuilder();//實例化SAXBuilder類,用來操作文檔
  Document doc=sb.build(new FileInputStream(file));//構造一個文檔,使用文件輸入流讀取。
  root=doc.getRootElement();//獲得根元素
  li=root.getChildren();//獲得所有的下一級孩子結點
  if(li.size()%PageSize==0)totalPage=li.size()/PageSize;/*li.size()是指孩子結點的個數(shù)*/
  else
  totalPage=(int)Math.floor(li.size()/PageSize)+1;

  if(Page<=1)P1=1;
  else P1=Page-1;//P1控制向前翻頁

  if(Page>=totalPage)
   P2=totalPage;
  else P2=Page+1;//P2控制向后翻頁
<!--------------------------------------------------------------->
 if(Page==1)Page=totalPage;
else if(Page==totalPage)Page=1;
else Page=totalPage-1;
     /*……………………*/
     /**……使得數(shù)據(jù)逆序讀出……**/
     /*……………………*/
if(Page>=totalPage)
{Page=totalPage;
num=li.size()-(Page-1)*PageSize;
i=(Page-1)*PageSize+num-1;
 }
else{
i=(Page-1)*PageSize+4;}//通過以上轉換,xml文檔的最后一條記錄會被顯示為留言板的第一條記錄
for(;i>=(Page-1)*PageSize;i--){
  info=(Element)li.get(i);/*獲得第i個孩子結點,通過getChildText(String)可以實現(xiàn)讀取該結點具體一個下級結點的數(shù)據(jù)內(nèi)容*/
  s.append("<tr><td><table border align=‘center‘ cellspading=‘1‘ width=‘80%‘><tr><td width=‘20%‘>"+info.getChildText("username")+"</td>");
  s.append("<td width=‘50%‘>"+info.getChildText("title")+"</td>");
  s.append("<td>"+info.getChildText("date")+"</td></tr>");
  s.append("<tr><td colspan=‘3‘>"+info.getChildText("information")+"</td></tr>");
  s.append("<tr><td colspan=‘3‘>"+info.getChildText("manager")+":</td></tr>");
  s.append("<tr><td colspan=‘3‘>"+info.getChildText("message")+"</td></tr></table></td></tr><br>");
 }    }
catch(Exception e){
out.println(e); }%>
<html><head><title>系統(tǒng)留言板</title></head>
<body>
<div align="center" valign="top">
<table width="60%" background="picture/beijing1.jpg" valign="top">
<tr  bgcolor="#C9c900"><td align="center" bgcolor="#FFCC00">系統(tǒng)留言板</td></tr></table><a href="xtly.htm">發(fā)表留言</a><br>
    <%=s%>
    </div><div align="center">
    <table><tr><td><a href="bbs.jsp?Page=<%=P1%>" style="text-decoretion:none">上一頁</a></td>
    <td><a href="bbs.jsp?Page=<%=P2%>" style="text-decoretion:none">下一頁</a></td></tr></table></div></body></html>
以上為為用戶顯示留言板的內(nèi)容。 
 
  
下面是如何發(fā)表留言,首先用frontPage做一個發(fā)表留言的HTML(xtly.htm)靜態(tài)頁面,必須要求輸入留言者姓名、留言標題、留言內(nèi)容,然后將數(shù)據(jù)傳送到實現(xiàn)發(fā)表留言的JSP(addbbs.jsp)頁面,
<%@page contentType="text/html;charset=gb2312"%>
<%@page language="java" import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<%
   String msg="";
   String file="E:\\message.xml";
   Element root,info;
   List li;
  try{
  Date d=new Date();//獲得當前系統(tǒng)時間
  request.setCharacterEncoding("gb2312");
  String username=request.getParameter("t1");
    String title=request.getParameter("t2");
 String information=request.getParameter("t3");
 //  /username=new String(username.getBytes("iso-8859-1"),"gb2312");
 SAXBuilder sb=new SAXBuilder();//實例化SAXBuilder對象
 Document doc=sb.build(new FileInputStream(file));
 root=doc.getRootElement();
  li=root.getChildren();
  //@………………
 Element newInfo=new Element("info");//新建一個二級結點
 Element el=new Element("username");//新建該二級結點的子結點
 el.setText(username);//設置該子結點的內(nèi)容
 newInfo.addContent(el);//將子結點添加到二級結點下
 el=new Element("title");
 el.setText(title);
 newInfo.addContent(el);
 el=new Element("date");
 el.setText(d.toString());
 newInfo.addContent(el);
 el=new Element("information");
 el.setText(information);
 newInfo.addContent(el);
 el=new Element("manager");
 el.setText("系統(tǒng)管理員:");
 newInfo.addContent(el);
 el=new Element("message");
 el.setText("暫無回復");
  newInfo.addContent(el);
 li.add(newInfo);//將該二級結點追加到所有二級結點的后面
  //---------------------
 String s=" ";//這里可以定義生成的文檔格式,首行縮進
 boolean newLines=true;//是否為新的一行
 XMLOutputter outer=new XMLOutputter();//輸出類
 outer.output(doc,new FileOutputStream(file));//輸出文檔
 msg+="恭喜你,你的留言已經(jīng)發(fā)送成功!";
out.println(msg);
 String url="3;url=‘bbs.jsp?Page=1‘";
 response.setHeader("REFRESH",url);
 }catch(Exception e){}
 %> 
 
由于是系統(tǒng)留言板,所有回復都要求是系統(tǒng)管理員的回復,所以當提交新留言的時候,將系統(tǒng)管理員的回復都暫時設置為:暫無回復。
當系統(tǒng)管理員登陸時候,可將"s.append("<form action=‘222.jsp?num="+i+"‘ method=‘post‘><td><input type=‘submit‘ value=‘回復‘></td></form></tr></table></td></tr><br>");"
添加到顯示留言板內(nèi)容的bbs.jsp中,不過要先刪除原來的</table>結束標記??梢栽O置成兩個頁面,一個是系統(tǒng)管理員登陸(bbsgl.jsp,必須是"bbsgl.jsp?Page=1",或者其他頁數(shù)也可以,否則會報NullPointExcepton異常))的頁面,一個是普通留言者進入(bbs.jsp)的頁面。在bbsgl.jsp中,每當在某條留言后面點到回復該留言的時候,自動將代表該條記錄的二級結點在xml文檔中的序號通過url參數(shù)傳遞到下一個頁面中。
    當在bbsgl.jsp中點到“回復”,即回復該留言的時候,就進入到222.jsp。只顯示該條留言,并且只有管理員回復一項(即:暫無回復)可以被更改。
下面是222.jsp:
<%@page contentType="text/html;charset=gb2312"%>
<%@page language="java" import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<%
request.setCharacterEncoding("gb2312");
int num=Integer.parseInt(request.getParameter("num"));/*獲得欲回復留言的二級結點在xml中的序號*/
StringBuffer s=new StringBuffer();
    Element root,info;
    List li;
    String file="E:\\message.xml";
    SAXBuilder sb=new SAXBuilder();
    Document doc=sb.build(file);
    root=doc.getRootElement();
    li=root.getChildren();
    info=(Element)li.get(num);
    String username=String.valueOf(info.getChildText("username"));
   String title=String.valueOf(info.getChildText("title"));
    String date=String.valueOf(info.getChildText("date"));
  String information=String.valueOf(info.getChildText("information"));
  String manager=String.valueOf(info.getChildText("manager"));
 String message=String.valueOf(info.getChildText("message"));
     s.append("<form action=‘111.jsp?num="+num+"‘ method=‘post‘><table border align=‘center‘ cellspading=‘1‘ width=‘80%‘><tr><td width=‘20%‘>"+username+"</td>");
     s.append("<td width=‘50%‘>"+title+"</td>");
     s.append("<td>"+date+"</td></tr>");
     s.append("<tr><td colspan=‘3‘>"+information+"</td></tr>");
     s.append("<tr><td colspan=‘3‘>"+manager+":</td></tr>");
     s.append("<tr><td colspan=‘3‘><textarea  name=t1 rows=‘8‘ cols=‘50‘>"+message+"</textarea></td></tr>");
     s.append("<tr><td colspan=‘3‘><input type=‘submit‘ value=‘修改‘></td></tr></table></form><br>");
     %>
       <html>
       <body>
        <font size=10 color=red>請保證回復的嚴謹性</font>
        <hr color="blue">
       <%=s%>
       </body>
       </html>
點擊“修改”,進入到111.jsp
    111.jsp是具體操作管理員回復的。
<%@page contentType="text/html;charset=gb2312"%>
<%@page language="java" import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<%
request.setCharacterEncoding("gb2312");
String message=request.getParameter("t1");//管理員的回復
int num=Integer.parseInt(request.getParameter("num"));/*取得上頁面?zhèn)鬟f進來的欲修改的結點的序號*/
Element root,info;
StringBuffer s=new StringBuffer();
   List li;
   String file="E:\\message.xml";
   SAXBuilder sb=new SAXBuilder();//構造器
   Document doc=sb.build(new FileInputStream(file));
   root=doc.getRootElement();
   li=root.getChildren();
   info=(Element)li.get(num);//獲得欲修改的二級結點
   Element child=info.getChild("message");
   child.setText(message);
   XMLOutputter outp=new XMLOutputter();//定義輸出類的引用
   outp.output(doc,new FileOutputStream(file));//輸出
   out.println("數(shù)據(jù)修改成功!!");
   out.println("三秒后自動返回瀏覽頁面!");
   String url="3;url=‘bbsgl.jsp?Page=1‘";//自動刷新到bbsgl.jsp
   response.setHeader("REFRESH",url);%> 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多