利用forum框架进行论坛社区接口的开发

       forum框架无疑是创建论坛最快捷最简便的方法,但是我在开发的需求中,却需要在另外的后台管理页面进行论坛社区创建,所以我总结如下:

       对于我们的论坛来说,版面是已经存在的,而我需要在每个版面下面任意的创建版区,考虑到日后版面的增加以及代码的重用性,我写了个名为creat-forum.properties的配置文件,内容为:

        forum-id-3=3
        forum-id-4=4
        forum-id-5=5

        既表示版面所对应的id.另外需要把创建论坛的返回结果以xml的形式返回.对此,我编写了抽象类,AbstractServlet.class

package com.ouou.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public abstract class AbstractServlet extends HttpServlet
{

    private static final long serialVersionUID = 0x2a5b6a49b3d6997L;
    public AbstractServlet()
    {
    }

    public void init()
        throws ServletException
    {
        super.init();
    }

    public void service(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
        throws ServletException, IOException {
 }

    public Document createDocument()
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        try
        {
            builder = factory.newDocumentBuilder();
        }
        catch(ParserConfigurationException e)
        {
            e.printStackTrace();
        }
        return builder.newDocument();
     }

    public void showResult(HttpServletResponse response, String result)
    {
        Document doc = createDocument();
        Element element = doc.createElement("Result");
        org.w3c.dom.Text text = doc.createTextNode(result);
        element.appendChild(text);
        doc.appendChild(element);
        showXML(response, doc);
     }

    public void showResult(HttpServletResponse response, String result, String reason)
    {
        Document doc = createDocument();
        Element rootnode = doc.createElement("return");
        doc.appendChild(rootnode);
        Element element = doc.createElement("Result");
        org.w3c.dom.Text text = doc.createTextNode(result);
        element.appendChild(text);
        rootnode.appendChild(element);
        element = doc.createElement("Reason");
        text = doc.createTextNode(reason);
        element.appendChild(text);
        rootnode.appendChild(element);
        showXML(response, doc);
     }

    protected void showXML(HttpServletResponse response, Document doc)
    {
        try
        {
            response.setHeader("Cache-Control", "no-cache");
            response.setHeader("Cache-Control", "no-store");
            response.setDateHeader("Expires", 0L);
            response.setHeader("Pragma", "no-cache");
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.transform(new DOMSource(doc), new StreamResult(response.getOutputStream()));
        }
        catch(TransformerException e)
        {
            e.printStackTrace();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
     }

 }

具体的代码实现如下:

package com.ouou.servlet;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jivesoftware.forum.Forum;
import com.jivesoftware.forum.ForumCategoryNotFoundException;
import com.jivesoftware.forum.database.DbForumFactory;
import com.jivesoftware.forum.ForumCategory;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.*;


  public class CreateForumServlet extends AbstractServlet {

   private static final long serialVersionUID = 1L;
    private static final Log logger = LogFactory.getLog(CreateForumServlet.class);
    private static final String CONTENT_TYPE = "text/xml;charset=utf-8";
    private static final String PREFIX_STR = "Def_Forum_Cat_";
    private Properties prop;
  
    public void init(ServletConfig config) throws ServletException{
     prop = new Properties();
      try{
          java.io.InputStream  is = Thread.currentThread().getContextClassLoader().getResourceAsStream("creat-  forum.properties");
            prop.load(is);
        }catch(IOException e){
         logger.error(e);
            e.printStackTrace();
        }
    }
   
   
    public void service(HttpServletRequest request,HttpServletResponse reponse)throws  IOException,ServletException
 {
     reponse.setContentType(CONTENT_TYPE);
     
     ForumCategory forumCategory=null;
     String returnVal = "0";
     String returnStr = "fail";
     long typevalue = 0l;
        String typename = request.getParameter("typename");
       
        try{
            if(typename != null){
                typevalue=Long.parseLong(prop.getProperty(PREFIX_STR+typename));
            }
            String forumname=request.getParameter("forumname");
            String forumdescription=request.getParameter("forumdescription");
            if(forumname == null || forumname.trim().equals("")){
             throw new Exception("The forumname must't be empty");
            }
            if(forumdescription == null){
             forumdescription = "";
            }
            //得到DbDorumFactory的一个实例对象dbforumFactory
            DbForumFactory  dbforumFactory =DbForumFactory.getInstance();
            try{
                //得到此分类的对象,其中此分类id为根据配置文件得到的值
              forumCategory=dbforumFactory.getForumCategory(typevalue);
            }
          catch(ForumCategoryNotFoundException e)
          {
           throw new Exception("The category of the forum is not exits");
          }
            //判断论坛是否已经在此分类下存在
          if(!(isCreatForum(forumname,forumCategory))){
                Forum newForum=dbforumFactory.createForum(forumname,forumdescription,forumCategory);
                returnVal = "1";
                returnStr = "success";
            }else{
             returnStr = "The forum is aready exits!";
            }//此论坛已经存在,创建失败
                     
        }catch(Exception e){
         e.printStackTrace();
         logger.error(e);
         returnStr = e.getMessage();
        }
       
        showResult(reponse,returnVal,returnStr);
        
 }
   
   
    //判断论坛是否已经在此分类下存在
 public static boolean isCreatForum(String name, ForumCategory forumCategory){
        Iterator iterator=forumCategory.getForums();
     while(iterator.hasNext()){
      Forum forum=(Forum)iterator.next();
   if(forum.getName().equals(name))
       return true;
     }
  return false;
 }

  }

      最后,把配置文件放到classes目录下面,并在web-inf下面配置CreateForumServlet,既可实现所要求的功能.

     当然,这也是我不成熟的代码,没有考虑在版面不存在的情况下,创建版面的功能,在此,希望得到更多朋友的指导.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值