bbs小项目整理(六)(消息发布)

1.消息的发布

通过页面表单提交数据,页面表单代码如下(这里插入一个fckeditor网页编辑器作为输入文本域)

<form action="/bbs/Publish" method="post">
<p>
 消息标题: <input type="text" name="title" size="156"/>
</p> <p> 消息内容: <FCK:editor instanceName="content" basePath="/fckeditor" toolbarSet="myToolbar" height="300" width="970"></FCK:editor> </P> <p align="center"> <input type="submit" value="提交"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="重置" /> </p> </form>

页面提交数据后,后台的业务逻辑就要进行相应的处理和前面的user相似,采用简单工厂模式处理业务逻辑

现在com.congbbs.dao中建立一个借口类提供处理业务的方法

package com.congbbs.dao;import com.congbbs.javabean.Message;
public interface MessageDao {   
    //添加消息
    public void addMessage(Message message);

}

然后再com.congbbs.dao.imple中创建一个实现类来实现该接口的方法

package com.congbbs.dao.imple;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;import com.congbbs.dao.MessageDao;
import com.congbbs.javabean.Message;import com.congbbs.util.DbConn;

public class MessageDaoImpl implements MessageDao {

    //插入一条消息
    @Override
    public void addMessage(Message message) {
     //通过工具类获得数据库的链接 Connection conn
= DbConn.getConnection();
     //编写sql语句 String sql
= "insert into tb_message(messageTitle, messageContent,userID, publishTime)"+ "values(?,?,?,?)"; PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); ps.setString(1, message.getMessageTitle()); //将传过来的数据对应装配到sql语句中 ps.setString(2, message.getMessageContent()); ps.setInt(3, message.getUserID()); ps.setTimestamp(4, new Timestamp(message.getPublishTime().getTime())); // 获取当前操作的时间 ps.execute(); //将数据提交到数据库中 } catch (Exception e) { e.printStackTrace(); }finally { //关闭相应的数据连接对象 DbConn.close(ps); DbConn.close(conn); } } }

在com.congbbs.factory创建相应的工厂类如下:(用户工厂类打创建方式是相似的作用也是一样)

package com.congbbs.factory;

import com.congbbs.dao.MessageDao;
import com.congbbs.dao.imple.MessageDaoImpl;

public class MessageDaoFactory {
    public static MessageDao getMessageDaoInstance(){
        return new MessageDaoImpl();
    }
}

接下来就是通过servlet将表单提交的数据接收并调用相应的业务逻辑处理方法进行处理

package com.congbbs.servlet;

import java.io.IOException;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.congbbs.dao.MessageDao;
import com.congbbs.factory.MessageDaoFactory;
import com.congbbs.javabean.Message;
import com.congbbs.javabean.User;

public class Publish extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");     //设置request请求的编码
        response.setCharacterEncoding("UTF-8");    //设置response相应的编码
        response.setContentType("text/html; charset=UTF-8");   //告知浏览器该页面的解析格式和编码
        String title = request.getParameter("title");    //接收表单提交的数据,这里的"title"要了表单中的name属性一致
        String content = request.getParameter("content"); //同理
        ServletContext servletContext = getServletContext();   //获得servlet内置的上下文对象
        RequestDispatcher dispatcher = null;    //定义分发对象
        User user = (User)request.getSession().getAttribute("user");  //获取登录时提交在session中的用户对象数据
        //进行简单的验证,将信息反馈回页面
        if(user == null){
            request.setAttribute("error", "要发布消息必须先登录!!");
            dispatcher = servletContext.getRequestDispatcher("/jsp/publish.jsp");  //转发回原界面
        }else {
            if(title == null || "".equals(title)){
                request.setAttribute("error", "必须要输入消息标题!!");
                dispatcher = servletContext.getRequestDispatcher("/jsp/publish.jsp");
            }else{
                if(content == null || "".equals(content)){
                    request.setAttribute("error", "不能发布空消息!!!");
                    dispatcher = servletContext.getRequestDispatcher("/jsp/publish.jsp");
                }else {
                    Message message = new Message();      //通过数据验证后,将数据装配到一个message对象中传给后台
                    message.setUserID(user.getUserID());
                    message.setMessageTitle(title);
                    message.setMessageContent(content);
                    message.setPublishTime(new Date());
                    
                    MessageDao messageDao = MessageDaoFactory.getMessageDaoInstance();  //获得message业务处理的实例
                    messageDao.addMessage(message);   //调用插入方法
                    dispatcher = servletContext.getRequestDispatcher("/GetMessageList");  //插入成功转发到显示消息的servlet进行查询显示
                }
            }
        }
        dispatcher.forward(request, response);  //跳转页面
    }

}

进行相应的简单测试,在com.congbbs.test包中创建简单的测试方法进行测试,看看业务逻辑是否能正确的插入数据

@org.junit.Test
    public void testAddMessage(){
        MessageDao messageDao = MessageDaoFactory.getMessageDaoInstance();
        Message message = new Message();
        message.setMessageTitle("测试信息");
        message.setMessageContent("插入成功");
        message.setUserID(Integer.parseInt("10086"));
        message.setPublishTime(new Date());
        
        messageDao.addMessage(message);
        System.out.println("插入成功。。。。。。。。。");
    }

看看数据库后台,看看是否成功插入数据,接下来就是分页查询并显示消息列表了

原文地址:https://www.cnblogs.com/qingcong/p/5833416.html