结构上随便参考哪一个bbs
有用户登录,主题列表,发帖回复 。
可以在后台用一个数据库 
用bean来访问数据库
将结果集用jsp显示出来

解决方案 »

  1.   

    第一步:建立一个数据库文件,最好建两个,一个放每条留言的数据,另一条放所有留言的树形目录,也就是XML文档;
    第二步:建立你自己的类文件,存放树形目录的文档就是留言的关系树;
    第三步:完成JSP页面.
    我曾经写过的一个类文件代码,可以参考一下:
    ****************************************
    public class ForumList {
        private LinkSQL ls=null;
        private ResultSet rs=null;
        private String viewXML=null;
        private String xsl=""; //XSL解析文件
        private Document document=null;
        private int total=0;    public int getTotal(){return this.total;}    /**
         * 设置XSL解析文档字串
         * @return String
         */
        public String getxsl(){
            this.xsl="<?xml version=\"1.0\" encoding=\"gb2312\"?>"
                        +"<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" >"
                        +"<xsl:output method=\"xml\" indent=\"yes\" encoding=\"gb2312\"/>"
                        +"<xsl:template match=\"/\">"
                        +"<table width=\"98%\">"
                        +"<xsl:for-each select=\"bbs//notes|bbs//renotes|bbs//notes//renotes\">"
                        +"<tr><td><a>"
                        +"<xsl:attribute name=\"href\">content.jsp?id=<xsl:value-of select=\"id\"/></xsl:attribute>"
                        +"<xsl:attribute name=\"target\">InfoFrame</xsl:attribute>"
                        +"<xsl:value-of select=\"title\"/>"
                        +"</a></td></tr>"
                        +"</xsl:for-each>"
                        +"</table>"
                        +"</xsl:template>"
                        +"</xsl:stylesheet>";
            return this.xsl;
        }    /**
         * 从数据库里提取信息
         * @return String
         */
        public String getList(){
            StringBuffer sb=new StringBuffer();
            sb.append("<?xml version=\"1.0\" encoding=\"gb2312\"?>");
            sb.append("<bbs>");
            ls=new LinkSQL();
            ls.setsql("select groupvalue from groupTable order by groupID desc");
            try{
                this.rs=ls.getResultSet();
                while(rs.next()){
                    String s=rs.getString("groupvalue");
                    sb.append(s);
                }
            }catch(IOException ioe){ioe.printStackTrace();}
            catch(ClassNotFoundException cnfe){cnfe.printStackTrace();}
            catch(SQLException se){se.printStackTrace();}
            finally{
                try{
                    if(this.rs!=null) rs.close();
                    this.ls.closeAll();
                }catch(Exception e){e.printStackTrace();}
            }
            sb.append("</bbs>");
            return sb.toString();
        }    /**
         * XML文档以HTML形式输出
         * @return String
         * @throws Exception
         */
        public String getHtmlList(int nowpage) throws Exception{
            String xml="";
            int pageNumber=0 ,countInfo=0 ,pageTotalNumber=0 ,perNumber=10;
            xml=this.getList(); //取得XML文档内容
            StringBuffer newxml=new StringBuffer();
            newxml.append("<?xml version=\"1.0\" encoding=\"gb2312\"?>");
            newxml.append("<bbs>");
            ////////////
            javax.xml.parsers.DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            org.xml.sax.InputSource is=new InputSource(new StringReader(xml));
            javax.xml.parsers.DocumentBuilder builder=factory.newDocumentBuilder();
            this.document=builder.parse(is);
            NodeList idlist=this.document.getElementsByTagName("id");
            NodeList titlelist=this.document.getElementsByTagName("title");
            countInfo=idlist.getLength();
            pageTotalNumber=countInfo/perNumber+1;
            this.total=pageTotalNumber;
            pageNumber=nowpage;
            if(pageNumber<1) pageNumber=1;
            if(pageNumber>pageTotalNumber) pageNumber=pageTotalNumber;
            for(int i=(pageNumber-1)*perNumber;i<pageNumber*perNumber;i++){
                if(i>=countInfo) break;
                else{
                    newxml.append("<notes><id>"+idlist.item(i).getFirstChild().getNodeValue()+"</id>");
                    newxml.append("<title>"+titlelist.item(i).getFirstChild().getNodeValue()+"</title></notes>");
                }
            }
            newxml.append("</bbs>");
            System.out.println(newxml);
            ///////////
            Transformer tf=TransformerFactory.newInstance().newTransformer(
                                new javax.xml.transform.stream.StreamSource(
                                    new StringReader(this.getxsl())));
            ByteArrayOutputStream bos=new ByteArrayOutputStream();
            tf.transform(new StreamSource(new StringReader(newxml.toString()))
                        ,new StreamResult(bos)); //XSL解析XML文档并输出
            byte[] ba=bos.toByteArray();
            return new String(ba);
        }    public String updatedocument(){
            CharArrayWriter caw=new CharArrayWriter();//exporting the io into the EMS momory.
            TransformerFactory tfFactory =TransformerFactory.newInstance();
            try{
                Transformer transformer = tfFactory.newTransformer();
                DOMSource source=new DOMSource(this.document);
                StreamResult result=new StreamResult(caw);
                transformer.transform(source, result);
            }catch(TransformerConfigurationException tce){tce.printStackTrace();}
            catch(TransformerException tfe){tfe.printStackTrace();}
            char[] ba=caw.toCharArray();
            return new String(ba);//
        }    //test!!
        public static void main(String[] args) throws Exception{
            ForumList fl=new ForumList();
            fl.getHtmlList(3);
            System.out.println(fl.getTotal()+"");
        }
    }