开发基于SpringBoot和BootStrap的全栈论坛网站(四):完成问题发布功能

news/2024/5/9 21:34:07/文章来源:https://javayz.blog.csdn.net/article/details/103043298

如果你对这个项目感兴趣,可以从头看起:

开发基于SpringBoot和BootStrap的全栈论坛网站(一):准备阶段

开发基于SpringBoot和BootStrap的全栈论坛网站(二):后端人员如何快速使用BootStrap

开发基于SpringBoot和BootStrap的全栈论坛网站(三):登陆注册以及cookies的功能完成

做完登陆注册功能后先不急着做首页,因为我想的是首页能展示已经发布的问题信息,所以先做一个问题发布功能,前端还是使用BootStrap写,通过官网的组件和布局编写页面。源码会放在文末,源码的开发进度会快于这篇博客。

(一)搭建问题发布页面:

文章页面的搭建和之前文章的搭建过程类似,无非就是心里想好一个布局,然后在BootStrap官网看看有没有合适的,用上去即可,最终界面如下:

虽然并不是很好看,但是至少还看得过去吧,附上html代码:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"><!--引入thymeleaf-->
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>内容发布平台</title><link rel="stylesheet" href="css/bootstrap.min.css"/><link rel="stylesheet" href="css/publish.css"/><!-- 可选的 Bootstrap 主题文件(一般不用引入) --><link rel="stylesheet" href="css/bootstrap-theme.min.css">
</head>
<body class="body">
<nav class="navbar navbar-default"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="#">少掉下巴的社区</a></div><form class="navbar-form navbar-left"><div class="form-group"><input type="text" class="form-control" placeholder="搜索内容"></div><button type="submit" class="btn btn-default">搜索</button></form><ul class="nav navbar-nav navbar-right"><li th:if="${session.user == null}"><a href="/login">登陆</a></li><li class="dropdown" th:if="${session.user} != null"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">我 <span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">消息中心</a></li><li><a href="#">个人资料</a></li><li><a href="#">退出登陆</a></li></ul></li></ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid -->
</nav>
<div class="container-fluid main"><div class="row"><div class="col-lg-9 col-md-12 col-sm-12 col-ss-12"><h2><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>  发起问题  </h2><hr><form action="/publish" method="post"><div class="form-group"><label for="title">问题标题</label><input type="text" class="form-control" th:value="${title}" id="title" name="title"></div><div class="form-group"><label for="description">问题补充</label><textarea class="form-control" name="description" id="description" th:text="${description}" cols="20" rows="18"></textarea></div><div class="form-group"><label for="tag">添加标签</label><input type="text" class="form-control" id="tag" th:value="${tag}"  name="tag"></div><button type="submit" class="btn btn-success success" style="float: right">提交</button><span class="alert alert-danger" role="alert" th:text="${error}" th:if="${error}!= null"></span></form></div><div class="col-lg-3 col-md-12 col-sm-12 col-ss-12"><h3>发起问题指南</h3><h4>问题标题:请用简洁的标题描述发布的问题</h4><h4> 问题补充:详细描述问题的内容</h4><h4>选择标签:选择一个或多个合适的标签</h4></div></div>
</div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="js/bootstrap.min.js"></script>
</body>
</html>

CSS的代码publish.css大家可以去文末的源代码处看。

(二)发布问题的数据库搭建

在数据库方面,我希望一个问题有以下几个属性:问题id、标题、描述、创建人的id、评论数、观看数、点赞数、标签、创建时间,基于此,我搭建了下面这个数据库:

CREATE TABLE `question` (`id` int(11) NOT NULL AUTO_INCREMENT,`title` varchar(50) NOT NULL,`description` text NOT NULL,`createid` int(11) NOT NULL,`comment_count` int(11) NOT NULL DEFAULT '0',`view_count` int(11) NOT NULL DEFAULT '0',`like_count` int(11) NOT NULL DEFAULT '0',`tag` varchar(250) NOT NULL,`createtime` bigint(20) NOT NULL,PRIMARY KEY (`id`)
) 

还是和之前一样,创建question实体类

public class Question {private int id;private String title;private String description;private int createid;private int comment_count;private int view_count;private int like_count;private String tag;private long createtime;//忽略getter and setter 方法
}

(三)后端处理逻辑

创建publishController,分别写GetMapping和PostMapping注解,表示当浏览器传来的数据是get和post时调用各自的方法。后端处理的整体逻辑如下:当用户输入完问题点击提交之后,问题标题,描述,标签通过post传给publishController,接着publishController将这些数据上传到数据库。在这里还需要注意一些小问题,比如问题标题输入为空就不应该提交成功。了解这些之后,可以写代码了:

@Controller
public class publishController {@Resourceprivate UserMapper userMapper;@Resourceprivate QuestionMapper questionMapper;@GetMapping("/publish")public String publish(){return "publish";}@PostMapping("/publish")public String publishquestion(@RequestParam("title")String title,@RequestParam("description")String description,@RequestParam("tag")String tag,HttpServletRequest request,Model model){model.addAttribute("title",title);model.addAttribute("description",description);model.addAttribute("tag",tag);//防止输入的问题为空if(title==null || title==""){model.addAttribute("error","标题不能为空");return "publish";}if(description==null || description==""){model.addAttribute("error","描述不能为空");return "publish";}if(tag==null || tag==""){model.addAttribute("error","标签不能为空");return "publish";}//获取当前登陆用户的信息User user=null;Cookie[] cookies=request.getCookies();for (Cookie cookie:cookies){if(cookie.getName().equals("token")){String token=cookie.getValue();user=userMapper.findBytoken(token);}}//将问题上传到数据库Question question=new Question();question.setTitle(title);question.setDescription(description);question.setTag(tag);question.setCreateid( user.getId());question.setCreatetime(System.currentTimeMillis());questionMapper.createquestion(question);return "redirect:/index";}
}

在mapper文件夹下创建QuestionMapper,用来处理数据库的交互:

@Mapper
public interface QuestionMapper {@Select("insert into question(title,description,createid,tag,createtime) values (#{title},#{description},#{createid},#{tag},#{createtime})")void createquestion(Question question);@Select("select * from question;")List<Question> list();
}

(四)测试

这样一个文章发布功能就完成了,整体也还算简单,我们测试一下:

直接点提交显示标题不能为空

描述为空则显示描述不能为空,全部填完之后点击提交后,查看数据库信息:

最后附上源代码:

github代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_715431.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发基于SpringBoot和BootStrap的全栈论坛网站(五):完成首页展示以及分页功能

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(六):完成个人中心、问题详情和问题编辑

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(七):完成回复和二级回复功能

论坛的搭建即将进入尾声&#xff0c;完成回复功能后只剩最后一个大功能&#xff1a;通知。然后就是对页面的精修和一些bug的修复&#xff0c;这些不会通过博客来展示&#xff0c;历史博客记录可以看我的实战项目专辑&#xff0c;在这里也不放链接了。 对一个论坛网站来说&…

开发基于SpringBoot和BootStrap的全栈论坛网站(八):完成回复通知的功能

当有人回复了你的问题时&#xff0c;肯定需要有通知能让我们看到&#xff0c;今天就来完成最后一个大功能--回复通知。具体的效果如下&#xff1a; 当有未读通知时&#xff0c;在导航栏上会显示未读通知的数量&#xff0c;点进去后能看到未读的信息&#xff0c;点击每条未读信息…

如何更改PHPCMS网站后台标题(title)

打开PHPCMS安装目录&#xff0c;选择phpcms 然后选择Languages目录&#xff0c;打开。 打开目录后&#xff0c;选择zh-cn目录&#xff0c;选择admin.lang.php用editPlus打开&#xff0c;将第九行后面的引号中的内容换成你想要改变的网站后台标题&#xff0c;保存文件 转载于:ht…

查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了

&#xff08;一&#xff09;概述 今天是国考出准考证的时间&#xff0c;刚好女朋友也要报名了这次考试&#xff0c;作为合格的男朋友当然是要在第一时间将准考证信息下载下来。结果到了半夜12点之后&#xff0c;整个官网一直处于无法连接、502、503、接口报错等各种问题。到了…

搜索引擎登录,网站分类目录登录地址

搜索引擎登录入口 google 如果你的网站是新发布的&#xff0c;或是访问量较低的网站在内容更新时&#xff0c;很有必要主动提交到Google&#xff0c;这样会使网站资料迅速更新倒Google搜索资料库&#xff0c;让用户能及时搜索到你的最新资料。 登录地址&#xff1a;http://www…

基于SpringBoot和BootStrap的全栈论坛网站(附上源码)

耗时大约三个星期不到的时间&#xff0c;把这个论坛项目基本上算是完成了&#xff0c;做这个项目最主要的目的是熟悉SpringBoot的使用&#xff0c;然后通过整个项目了解了BootStrap、Thymeleaf、editor.md等等工具的使用&#xff0c;今天就来做一下总结 &#xff08;一&#x…

一个有意思的网站

http://www.icpoline.com 上面看到一句话&#xff1a;傻的人之所以傻&#xff0c;那就在于他&#xff08;她&#xff09;不知道自己傻&#xff0c;如果他&#xff08;她&#xff09;知道自己傻&#xff0c;那他&#xff08;她&#xff09;就不傻。 所以&#xff0c;我敢断定…

网市场云建站 v4.8 增加私有模版库,开放 Mysql 配置、在线客服源码

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 网市场云建站系统&#xff0c;结合各种产品&#xff0c;将一个网站的服务器成本降低到0.1元&#xff01;打破传统建站的高成本&#xff0c;让价格不再是阻碍的门槛&#xff0c;让每个人都能有自…

高并发量网站解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 最近遇到高并发数据访问的问题&#xff0c;这篇博文讲的比较全面&#xff0c;值得一看。来源参考&#xff1a; http://blog.csdn.net/y_h_t/article/details/6322823 转载于:https://my.oschina.net/garyun/blog/602…

QQ登录网站接入功能实现--非官方文档搬运

背景 最近第一次使用QQ登录功能&#xff0c;期间遇到这种问题&#xff0c;在网上找了很多资料&#xff0c;大多都是官方的搬运&#xff0c;并没有真正的干料&#xff0c;可能是个人能力问题&#xff0c;遇到了各种麻烦&#xff0c;折腾了几天&#xff0c;最终弄好&#xff0c;…

从vancl看垂直商业网站的崛起

从vancl看垂直网站的崛起&#xff08;文&#xff1a;王英雄&#xff09;如果说2007年IT业内的几大事件&#xff0c;卖衬衣的卖火了&#xff0c;这肯定是2007年的重大事件之一。提起卖衬衣的&#xff0c;大家肯定会想到的是PPG&#xff0c;但我为什么不拿PPG做标题呐&#xff1f…

大型网站应用之海量数据和高并发解决方案总结一二

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

十年间&#xff0c;负载均衡的前沿技术层出不穷&#xff0c;令用户眼花缭乱。经常在技术网站、文档中出现的“四层负载均衡”、“七层负载均衡”字眼有什么含义?有什么区别?对客户网络有哪些不同的优化? 在大型的网站服务器集群中&#xff0c;负载均衡技术是必不可少的。使…

Flex SEO(Search engine optimization),让浏览器找到你的flash站点

Search engine optimistation 也就是让你的站点信息能被“搜索引擎”&#xff08;Google,baidu…&#xff09;搜索到。SEO总分两大类&#xff0c;white hats和black hats&#xff0c;简单讲black hats是一作弊的方法&#xff0c; 例如在meta标签中加一堆重复的关键词&#xff0…

unsharp mark 算法_Google SEO-BERT算法更新

一. BERT介绍BERT的全称为&#xff1a;Bidirectional Encoder Representations from Transformers&#xff0c;基于神经网络的自然语言处理预训练的技术。谷歌说BERT就像是一个超大的同义词系统。2019 年 10 月 25 日&#xff0c;Google 宣布 BERT 更新上线&#xff0c;正式成为…

有些网站打开一半空白_如何发一条空白的朋友圈

所谓空白的朋友圈就是一条看起来没有文字的朋友圈&#xff0c;因为发朋友圈的时候不输入文字是没法发送的。不可见字符是有文字内容的&#xff0c;只是人的肉眼看不见&#xff0c;所以相当于空白。不可见字符不可见字符就是零宽空格&#xff0c;见维基百科解释https://zh.wikip…

另类网站版式设计欣赏

另类网站版式设计欣赏 当你在创建一个新网站的时候&#xff0c;希望这些网站富有个性的版式设计能给你带来灵感。 Popmatik 这是Rob Leach设计制作的一个个人网站&#xff0c;这个网站用了一个瓶子的底图&#xff0c;网站的内容都在瓶子的这个包装纸上。 Digitalmash.com Digi…

大型网站架构系列:负载均衡详解(3)

大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09; 原文:大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09;本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结一、软件负载均衡概述 硬件负载均衡性能优越…