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 {//插入一条消息
    @Overridepublic 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.Testpublic 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

bbs小项目整理(六)(消息发布)相关推荐

  1. bbs小项目整理(八)(总结、源码分享)

    前面的几个模块基本上完成了,剩下的几个模块操作过程基本相似. 这里就不在赘述了:直接上源代码吧. 百度网盘:链接:http://pan.baidu.com/s/1b6UaGA 密码:s1di GItH ...

  2. Python Day 70 利用Django框架做的一个bbs小项目

    ##项目开发流程 #1.项目需求分析产品经理+架构师+开发经理/组长 去到客户的公司谈需求(博弈的过程) #2.项目架构设计 架构师设计(数据库(主库:MySQL,从库:redis,mongodb), ...

  3. 美食杰项目(六)发布菜谱

    目录 前言 具体效果 实现的具体功能 代码思路 主要引入的element ui的具体样式 相关代码 总结: 前言 本节给大家讲的是美食杰项目的发布菜谱的主要功能和具体样式,希望我的代码能够帮助到你,也 ...

  4. vue小项目整理—main.js(一)

    1.在main.js中引入vue-router插件(引用组件地址)和vue-resource(为了使用外部json数据)插件. import vueRouter from 'vue-router' i ...

  5. 微信小程序(一)初步,包括(初步了解微信小程序,小程序项目结构,小程序宿主环境,发布与上线等)

    文章目录 前言 一 微信小程序 1. 小程序与普通网页开发的区别 2. 注册小程序开发帐号 3. 安装开发者工具 4. 创建小程序项目 5. 查看项目效果 6. 主界面的 5 个组成部分 二 项目结构 ...

  6. Django小项目简单BBS论坛

    开发一个简单的BBS论坛 项目需求: 1 整体参考"抽屉新热榜" + "虎嗅网" 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用 ...

  7. 我的MVVM 开源小项目已发布~

    前言 前几篇文章中,我们学习了许多Jetpack架构组件,虽说每个架构组件都是相互协调使用的,但是相信还是有很多人不知道如何搭建一个Jetpack的项目,不知道网络请求该放在什么地方,或者说其他的开源 ...

  8. 适合普通人的冷门小项目:公众号文章批量采集下载导出整理

    今天分享一个比较冷门的小项目(又一个闷声发财的小项目) 项目:公众号文章批量下载服务: 这个项目普通人就可以操作,只要稍微学习一下就可以了,我自己也研究了下,还是比较容易上手的哈!就是赚个信息差的小项 ...

  9. GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  10. 2017 Github优秀开源项目整理

    所有项目整理到一张思维导图: http://chenhaoact.com/github-project-recommend.html github项目地址(每周更新,欢迎star): https:// ...

最新文章

  1. 60亿击败1750亿、验证胜过微调:OpenAI发现GPT-3解决数学题,并非参数越大越好...
  2. springboot + elasticsearch
  3. 【TensorFlow】tf.concat的用法
  4. c# 操作excle
  5. Avalonia跨平台入门第七篇之RadioButton的模板
  6. 因为不想「被绿」,美国年轻人只想和 iPhone 聊天
  7. VMware与 Device/Credential Guard 不兼容.
  8. 使用yum更新补丁包
  9. Acer4552G双硬盘
  10. 转载:50有用的JavaScript和jQuery技术和插件
  11. Android7.0(Android N)适配教程,心得
  12. 2021年美容师(高级)考试及美容师(高级)考试题
  13. 根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)
  14. android微信右滑删除,Android实现微信侧滑删除当前页面
  15. 如何专业查看视频/音频/图片信息
  16. 备受全球瞩目的「USDT集体索赔案」来龙去脉|全文译本
  17. 前端小白-HTML简介
  18. oracle 查询指定时间范围
  19. 违规对店铺综合质量评分、个性化推荐影响 以及标题 、修改sku的影响
  20. CSS 常用语法与盒模型分析

热门文章

  1. c语言怎么把数字倒过来_c语言中如何实现输入一个整数实现倒序输出
  2. 基于京东家电商品知识图谱的自动问答系统(二) -- IDEA搭建开发环境
  3. python读取excel_Python简单读取Excel示例
  4. c++ 队列_RabbitMQ的死信与延迟队列,你真的会用吗?
  5. 深度之眼-科赛网二分类大赛入门之路
  6. 前端笔记—第4篇CSS基础知识2
  7. mysql 动态游标 , 实际上不要使用, 因为两个人同时执行会删除了其中一个人的数据...
  8. codeforces 455D Serega and Fun
  9. x-pack 功能介绍及配置传输层安全性(TLS / SSL)
  10. SpringBoot使用WEB进阶