基于JAVA SpringBoot和HTML美食网站博客程序设计

摘要

        美食网站是一个提供各种美食信息和食谱的网站,旨在帮助用户发现、学习和分享美食。旨在探讨美食网站在现代社会中的重要性和影响。随着互联网的普及,越来越多的人开始使用美食网站来获取各种美食信息和食谱。这些网站不仅提供了方便快捷的搜索功能,还为用户提供了分享和交流的平台。随着移动互联网的发展,美食网站应该更加注重用户体验和个性化服务,提供更加精准的推荐和定制化的功能。同时,美食网站也应该加强与餐饮业的合作,推动餐饮业的创新和发展。总之,美食网站为用户提供了一个全面了解和学习美食的平台,帮助他们发现新的食谱、餐厅和烹饪技巧,享受美食带来的乐趣。

所用技术

前端:LayUI、JQuery、HTML5+CSS3、Ajax

后端:SpringBoot+Spring-Data-Jpa

安全控件:SpringSecurity

页面采用:Thymeleaf

项目管理:Maven

基本功能

拥有管理员和普通用户两种角色;

注册、登录、发美食博客、查看美食博客、美食博客审核(管理员)、个人资料设置、密码修改、权限修改(管理员)等。

部分代码展示

@Controller
@RequestMapping(value="/blog")
public class BlogsController extends CommonController<Blogs, Integer, BlogsForm> {@Autowiredprivate BlogsSerive blogService;@Autowiredprivate SystemDataService dataService;@Autowiredprivate UserUtils userUtils;@Autowiredprivate CommentService commentService;@Overridepublic void manage(ModelMap map) {map.put("user", userUtils.getUser());super.manage(map);}@Overridepublic void edit(BlogsForm form, ModelMap map) throws InstantiationException, IllegalAccessException {map.put("sf", dataService.findByDictionariesCode("SJZD_BKFL"));map.put("type", dataService.findByDictionariesCode("SJZD_WZLX"));super.edit(form, map);}@Overridepublic Object save(BlogsForm form) {System.out.println(form.getText()+"=========");form.setUser(userUtils.getUser());SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {Blogs model = new Blogs();String name = userUtils.getName();Integer id = form.getId();if(id != null) {model = blogService.findById(id);model.setUpdateDate(sdf.format(new Date()));model.setUpdateName(name);}else {form.setCreateDate(sdf.format(new Date()));form.setCreateName(name);model.setUpdateDate(sdf.format(new Date()));model.setUpdateName(name);}BeanUtils.copyProperties(form, model,"id");blogService.save(model);Integer id2;if(form.getId() != null) {id2 = form.getId();}else {id2 = blogService.findByUserNicknameAndUpdateDate(name, model.getUpdateDate()).getId();}return new AjaxResult(id2+"");} catch (Exception e) {return new AjaxResult(false,"数据保存失败");}}/*** 访问页面* @param id* @param map*/@RequestMapping(value="/visit")public void visit(Integer id, ModelMap map) {map.put("blog", blogService.findById(id));map.put("comment", commentService.findByBlogId(id));}/*** 访问页面数据* @param id* @return*/@RequestMapping(value="/blogText")@ResponseBodypublic Object blogText(Integer id) {return blogService.findById(id).getText();}@RequestMapping(value="/audit")public void audit(ModelMap map) {}@RequestMapping(value="/indexBlog")public void indexBlog() {}/*** 同意* @param id* @return*/@RequestMapping(value="/consent")@ResponseBodypublic Object consent(Integer id) {try {Blogs blogs = blogService.findById(id);blogs.setBlogStatic("审核通过");blogService.save(blogs);return new AjaxResult("同意成功");} catch (Exception e) {return new AjaxResult(false,"同意失败");}}/*** 拒绝* @param id* @return*/@RequestMapping(value="/refuse")@ResponseBodypublic Object refuse(Integer id, String jy) {try {Blogs blogs = blogService.findById(id);blogs.setBlogStatic("已拒绝");blogs.setSuggest(jy);blogService.save(blogs);return new AjaxResult("拒绝成功");} catch (Exception e) {return new AjaxResult(false,"拒绝失败");}}@RequestMapping(value="/fysj")@ResponseBodypublic Object fysj(Integer page, BlogsForm form) {Sort sort=Sort.by(Sort.Direction.DESC, "updateDate");Pageable pageable = PageRequest.of(page-1, 10, sort);Page<Blogs> blog;Specification<Blogs> spec = buildSpec2(form);blog = blogService.findAll(spec, pageable);return FlowloadUtils.buildResult(blog);}@RequestMapping(value="/fysj2")@ResponseBodypublic Object fysj2(Integer page, BlogsForm form) {Sort sort=Sort.by(Sort.Direction.DESC, "updateDate");Pageable pageable = PageRequest.of(page-1, 10, sort);Page<Blogs> blog;Specification<Blogs> spec = buildSpec3(form);blog = blogService.findAll(spec, pageable);return FlowloadUtils.buildResult(blog);}private Specification<Blogs> buildSpec3(BlogsForm form) {Specification<Blogs> specification = new Specification<Blogs>() {private static final long serialVersionUID = 1L;@Overridepublic Predicate toPredicate(Root<Blogs> root, CriteriaQuery<?> query, CriteriaBuilder cb) {HashSet<Predicate> rules=new HashSet<>();Predicate difficultylevel = cb.equal(root.get("blogStatic"), "审核通过");rules.add(difficultylevel);return cb.and(rules.toArray(new Predicate[rules.size()]));}};return specification;}private Specification<Blogs> buildSpec2(BlogsForm form) {Specification<Blogs> specification = new Specification<Blogs>() {private static final long serialVersionUID = 1L;@Overridepublic Predicate toPredicate(Root<Blogs> root, CriteriaQuery<?> query, CriteriaBuilder cb) {HashSet<Predicate> rules=new HashSet<>();SysUser user = userUtils.getUser();Predicate difficultylevel = cb.equal(root.get("user").get("id"), user.getId());rules.add(difficultylevel);return cb.and(rules.toArray(new Predicate[rules.size()]));}};return specification;}@RequestMapping(value="/page2")@ResponseBodypublic HashMap<String, Object> page2(ModelMap map, DataGridParam param, BlogsForm form) {Sort sort=Sort.by("id");Pageable pabeable = param.getPageable(sort);Specification<Blogs> spec = buildSpec1(form);Page<Blogs> page = blogService.findAll(spec, pabeable);return DataGridUtils.buildResult(page);}private Specification<Blogs> buildSpec1(BlogsForm form) {Specification<Blogs> specification = new Specification<Blogs>() {private static final long serialVersionUID = 1L;@Overridepublic Predicate toPredicate(Root<Blogs> root, CriteriaQuery<?> query, CriteriaBuilder cb) {HashSet<Predicate> rules=new HashSet<>();Predicate difficultylevel = cb.like(root.get("blogStatic"), "%待审核%");rules.add(difficultylevel);return cb.and(rules.toArray(new Predicate[rules.size()]));}};return specification;}/*** 评论*/@RequestMapping(value="/comment")@ResponseBodypublic Object comment(String comment, Integer id) {try {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Comment model = new Comment();model.setText(comment);model.setUser(userUtils.getUser());model.setBlog(blogService.findById(id));model.setRead2(false);model.setCreateDate(sdf.format(new Date()));commentService.save(model);return new AjaxResult("评论成功");} catch (Exception e) {return new AjaxResult(false,"评论失败");}}
}

演示视频

基于JAVA SpringBoot和HTML美食网站博客程序

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

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

相关文章

SpringBoot配置数据库密码加密的方法

由于系统安全的考虑,配置文件中不能出现明文密码的问题,本文就给大家详细介绍下springboot配置数据库密码加密的方法,下面话不多说了,来一起看看详细的介绍吧,需要的朋友可以参考下 1.导入依赖 <!--数据库密码加密--> <dependency><groupId>com.github.uli…

17. Series.dt.month-提取日期数据中的月份信息

【目录】 文章目录 17. Series.dt.month-提取日期数据中的月份信息1. 知识回顾-创建一个Series对象2. 知识回顾-pd.to_datetime()将数据转换为pandas中的日期时间格式3. 实例化类相关知识4. Series.dt.month是什么&#xff1f;5. 如何使用Series.dt.month&#xff1f;6. Series…

iApp祁天社区UI成品源码 功能齐全的社区应用

iApp祁天社区UI成品源码是一个非常实用的资源&#xff0c;提供了完整的源代码&#xff0c;可以帮助您快速搭建一个功能齐全的社区应用。 这个源码具有丰富的UI设计&#xff0c;经过精心调整和优化&#xff0c;确保用户体验流畅而舒适。它不仅具备基本的社区功能&#xff0c;如…

轮播图(多个一起轮播)

效果图 class MainActivity : Activity(), Runnable {private lateinit var viewPager: ViewPagerprivate lateinit var bannerAdapter: BannerAdapterprivate val images ArrayList<Int>() // 存储图片资源的列表private val handler Handler() // 用于定时发送消息…

基于 selenium 实现网站图片采集

写在前面 有小伙伴选题&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对…

基于SSM的学生疫情信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Ubuntu 22.04 LTS ffmpeg mp4 gif 添加图片水印

ffmpeg编译安装6.0.1&#xff0c;参考 Ubuntu 20.04 LTS ffmpeg gif mp4 互转 许编译安装ffmpeg &#xff1b;解决gif转mp4转换后无法播放问题-CSDN博客 准备一个logo MP4添加水印 ffmpeg -i 2.mp4 -vf "movielogo.png[watermark];[in][watermark]overlayx10:y10[out]&…

大功率电源芯片WD5030L

电源管理芯片作为现代电子设备中最关键的元件之一&#xff0c;直接影响着设备的性能和效率。而大功率电源芯片作为电源管理芯片中的一种&#xff0c;其性能和应用领域更加广泛。本文将介绍一款具有宽VIN输入范围、高效率和多种优良性能的大功率电源芯片WD5030L&#xff0c;并探…

通付盾Web3专题 | KYT/AML:Web3合规展业的必要条件

与传统证券一样&#xff0c;基于区块链技术发展出来的虚拟资产交易所经历了快速发展而缺乏有效监管的行业早期。除了科技光环加持的各种区块链项目方、造富神话之外&#xff0c;交易所遭到黑客攻击、内部偷窃作恶、甚至经营主体异常而致使投资人血本无归的案例亦令人触目惊心。…

STM32 I2C详解

STM32 I2C详解 I2C简介 I2C&#xff08;Inter IC Bus&#xff09;是由Philips公司开发的一种通用数据总线 两根通信线&#xff1a; SCL&#xff08;Serial Clock&#xff09;串行时钟线&#xff0c;使用同步的时序&#xff0c;降低对硬件的依赖&#xff0c;同时同步的时序稳定…

udp多点通信-广播-组播

单播 每次只有两个实体相互通信&#xff0c;发送端和接收端都是唯一确定的。 广播 主机之间的一对多的通信所有的主机都可以接收到广播消息(不管你是否需要)广播禁止穿过路由器&#xff08;只能做局域网通信&#xff09;只有UDP可以广播广播地址 有效网络号全是1的主机号 192.1…

酷开系统 酷开科技,将家庭娱乐推向新高潮

在当今数字化时代&#xff0c;家庭娱乐已经成为人们日常生活中不可或缺的一部分。如果你厌倦了传统的家庭娱乐方式&#xff0c;想要一种全新的、充满惊喜的娱乐体验&#xff0c;那么&#xff0c;不妨进入到酷开科技的世界&#xff0c;作为智能电视行业领军企业&#xff0c;酷开…

Dubbo协议详解

前言特点应用场景Dubbo协议示例Dubbo协议的不足拓展 前言 Dubbo协议是一种高性能、轻量级的开源RPC框架&#xff0c;主要设计目的是解决分布式系统中服务调用的一些常见问题&#xff0c;例如服务负载均衡、服务注册中心、服务的远程调用等。它支持多种语言&#xff0c;例如Jav…

Day10—SQL那些事(特殊场景的查询)

文章目录 1、只想查一个字段却不得不左连接好多张表2、左连接的时候只想取最后一条数据 1、只想查一个字段却不得不左连接好多张表 只想查一个字段却不得不左连接好多张表&#xff0c;而且因为左连接的表太多还导致查出来的数据重复 原先的sql SELECTsph.po_num,chh.visa_ex…

向量以及矩阵

0.前言 好了那我们新的征程也即将开始&#xff0c;那么在此呢我也先啰嗦两句&#xff0c;本篇文章介绍数学基础的部分&#xff0c;因为个人精力有限我不可能没一字一句都讲得非常清楚明白&#xff0c;像矩阵乘法之类的一些基础知识我都是默认你会了&#xff08;还不会的同学推…

Nas搭建webdav服务器并同步Zotero科研文献

无需云盘&#xff0c;不限流量实现Zotero跨平台同步&#xff1a;内网穿透私有WebDAV服务器 文章目录 无需云盘&#xff0c;不限流量实现Zotero跨平台同步&#xff1a;内网穿透私有WebDAV服务器一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zote…

认识Tomcat

文章目录 什么是tomcat&#xff1f;tomcat的使用tomcat的下载tomcat的目录结构tomcat的启动在tomcat上部署页面通过浏览器访问部署的页面 学习servlet的原因 什么是tomcat&#xff1f; 盖棺定论&#xff1a;Tomcat是一个HTTP服务器。 我们接下来要长期学习的东西都是关于前后…

Python框架篇(2):FastApi-参数接收和验证

提示: 如果想获取文章中具体的代码信息&#xff0c;可在微信搜索【猿码记】回复 【fastapi】即可。 1.参数接收 1.1 路径参数(不推荐) 1.代码清单 在app/router下&#xff0c;新增demo_router.py文件,内容如下: from fastapi import APIRouterrouter APIRouter( prefix&qu…

SpringCloud微服务:Nacos的集群、负载均衡、环境隔离

目录 集群 在user-service的yml文件配置集群 启动服务 负载均衡 order-service配置集群 设置负载均衡 当本地集群的服务挂掉时 访问权重 环境隔离 1、Nacos服务分级存储模型 一级是服务&#xff0c;例如userservice 二级是集群&#xff0c;例如杭州或上海 …

【自动化测试】基于Selenium + Python的web自动化框架!

一、什么是Selenium&#xff1f; Selenium是一个基于浏览器的自动化工具&#xff0c;她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分&#xff1a;Selenium IDE、Selenium WebDriver 和Selenium Grid&#xff1a;  1、Selenium IDE&…