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="提交"/> <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小项目整理(六)(消息发布)相关推荐
- bbs小项目整理(八)(总结、源码分享)
前面的几个模块基本上完成了,剩下的几个模块操作过程基本相似. 这里就不在赘述了:直接上源代码吧. 百度网盘:链接:http://pan.baidu.com/s/1b6UaGA 密码:s1di GItH ...
- Python Day 70 利用Django框架做的一个bbs小项目
##项目开发流程 #1.项目需求分析产品经理+架构师+开发经理/组长 去到客户的公司谈需求(博弈的过程) #2.项目架构设计 架构师设计(数据库(主库:MySQL,从库:redis,mongodb), ...
- 美食杰项目(六)发布菜谱
目录 前言 具体效果 实现的具体功能 代码思路 主要引入的element ui的具体样式 相关代码 总结: 前言 本节给大家讲的是美食杰项目的发布菜谱的主要功能和具体样式,希望我的代码能够帮助到你,也 ...
- vue小项目整理—main.js(一)
1.在main.js中引入vue-router插件(引用组件地址)和vue-resource(为了使用外部json数据)插件. import vueRouter from 'vue-router' i ...
- 微信小程序(一)初步,包括(初步了解微信小程序,小程序项目结构,小程序宿主环境,发布与上线等)
文章目录 前言 一 微信小程序 1. 小程序与普通网页开发的区别 2. 注册小程序开发帐号 3. 安装开发者工具 4. 创建小程序项目 5. 查看项目效果 6. 主界面的 5 个组成部分 二 项目结构 ...
- Django小项目简单BBS论坛
开发一个简单的BBS论坛 项目需求: 1 整体参考"抽屉新热榜" + "虎嗅网" 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用 ...
- 我的MVVM 开源小项目已发布~
前言 前几篇文章中,我们学习了许多Jetpack架构组件,虽说每个架构组件都是相互协调使用的,但是相信还是有很多人不知道如何搭建一个Jetpack的项目,不知道网络请求该放在什么地方,或者说其他的开源 ...
- 适合普通人的冷门小项目:公众号文章批量采集下载导出整理
今天分享一个比较冷门的小项目(又一个闷声发财的小项目) 项目:公众号文章批量下载服务: 这个项目普通人就可以操作,只要稍微学习一下就可以了,我自己也研究了下,还是比较容易上手的哈!就是赚个信息差的小项 ...
- GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...
原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...
- 2017 Github优秀开源项目整理
所有项目整理到一张思维导图: http://chenhaoact.com/github-project-recommend.html github项目地址(每周更新,欢迎star): https:// ...
最新文章
- 60亿击败1750亿、验证胜过微调:OpenAI发现GPT-3解决数学题,并非参数越大越好...
- springboot + elasticsearch
- 【TensorFlow】tf.concat的用法
- c# 操作excle
- Avalonia跨平台入门第七篇之RadioButton的模板
- 因为不想「被绿」,美国年轻人只想和 iPhone 聊天
- VMware与 Device/Credential Guard 不兼容.
- 使用yum更新补丁包
- Acer4552G双硬盘
- 转载:50有用的JavaScript和jQuery技术和插件
- Android7.0(Android N)适配教程,心得
- 2021年美容师(高级)考试及美容师(高级)考试题
- 根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)
- android微信右滑删除,Android实现微信侧滑删除当前页面
- 如何专业查看视频/音频/图片信息
- 备受全球瞩目的「USDT集体索赔案」来龙去脉|全文译本
- 前端小白-HTML简介
- oracle 查询指定时间范围
- 违规对店铺综合质量评分、个性化推荐影响 以及标题 、修改sku的影响
- CSS 常用语法与盒模型分析
热门文章
- c语言怎么把数字倒过来_c语言中如何实现输入一个整数实现倒序输出
- 基于京东家电商品知识图谱的自动问答系统(二) -- IDEA搭建开发环境
- python读取excel_Python简单读取Excel示例
- c++ 队列_RabbitMQ的死信与延迟队列,你真的会用吗?
- 深度之眼-科赛网二分类大赛入门之路
- 前端笔记—第4篇CSS基础知识2
- mysql 动态游标 , 实际上不要使用, 因为两个人同时执行会删除了其中一个人的数据...
- codeforces 455D Serega and Fun
- x-pack 功能介绍及配置传输层安全性(TLS / SSL)
- SpringBoot使用WEB进阶