zoukankan      html  css  js  c++  java
  • 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("插入成功。。。。。。。。。");
        }

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

  • 相关阅读:
    我的 vs code 中setting 设置
    创建Vue cli 脚手架中遇到的空格,函数问题的解决
    C#与.Net的关系
    c#可以开发哪些类型的应用程序
    json注解使用(jackson与fastjson)
    MySQL优化:如何避免回表查询
    二叉树基础知识总结
    Redis,Memcache,MongoDb的特点
    MySQL的InnoDB存储引擎为什么要用自增的主键?
    分布式事务atomikos使用
  • 原文地址:https://www.cnblogs.com/qingcong/p/5833416.html
Copyright © 2011-2022 走看看