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

news2024/11/19 9:27:58

摘要

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

所用技术

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

后端:SpringBoot+Spring-Data-Jpa

安全控件:SpringSecurity

页面采用:Thymeleaf

项目管理:Maven

基本功能

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

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

部分代码展示

@Controller
@RequestMapping(value="/blog")
public class BlogsController extends CommonController<Blogs, Integer, BlogsForm> {
	@Autowired
	private BlogsSerive blogService;
	@Autowired
	private SystemDataService dataService;
	@Autowired
	private UserUtils userUtils;
	@Autowired
	private CommentService commentService;
	
	@Override
	public void manage(ModelMap map) {
		map.put("user", userUtils.getUser());
		super.manage(map);
	}

	@Override
	public 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);
	}

	@Override
	public 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")
	@ResponseBody
	public 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")
	@ResponseBody
	public 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")
	@ResponseBody
	public 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")
	@ResponseBody
	public 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")
	@ResponseBody
	public 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;
			
			@Override
			public 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;
			
			@Override
			public 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")
	@ResponseBody
	public 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;
			
			@Override
			public 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")
	@ResponseBody
	public 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.coloradmin.cn/o/1210597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Live800:客服中心必备的7种客户服务原则

在现代商业社会中&#xff0c;客户服务已经成为企业竞争的重要因素之一。提供高质量的客户服务可以帮助企业赢得客户的忠诚度和信任&#xff0c;从而推动企业的发展。客服中心是企业与客户之间的桥梁&#xff0c;对于客户服务的质量要求更高。为了提高客服中心的服务质量&#…

冰点还原精灵Deep Freeze for mac:Mac用户的最佳系统保护选择

你是否曾在Mac上安装软件后&#xff0c;发现系统性能下降&#xff0c;或者某些应用程序无法正常运行&#xff1f;这些问题可能让你感到困扰&#xff0c;但幸运的是&#xff0c;有一个解决方案可以帮你解决这些问题——Faronics Deep Freeze for mac。 Deep Freeze for mac是一…

【fbtft】如何添加fbtft驱动

获取lcd ic的datasheet&#xff0c;或者直接找到其他平台&#xff08;linux&#xff0c;stm32&#xff0c;esp32&#xff09;的驱动 我用的是合宙的esp32驱动&#xff0c;注意是c语言的&#xff0c;合宙上层用lua封装了&#xff0c;需要找到sdk源码。 源码路径&#xff1a; …

解决Python中使用requests库遇到的身份验证错误

在使用requests库进行HTTP请求时&#xff0c;用户遇到了一个AuthenticationRequired&#xff08;身份验证必须&#xff09;的错误。然而&#xff0c;当使用urllib.request.urlopen执行相同的操作时&#xff0c;却能够成功。同时&#xff0c;用户提供了自己的系统信息&#xff0…

哔哩哔哩自动引流软件的运行分享,以及涉及到技术与核心代码分享

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 大家好&#xff0c;我是一名专注于自动引流软件研发的技术专家。今天&#xff0c;我将与大家分享自动引流软件涉及到的技术与核心代码&#xff0c;希望能为大家提供一些有价值的参…

论文笔记——BiFormer

Title: BiFormer: Vision Transformer with Bi-Level Routing AttentionPaper: https://arxiv.org/pdf/2303.08810.pdfCode: https://github.com/rayleizhu/BiFormer 一、前言 众所周知&#xff0c;Transformer相比于CNNs的一大核心优势便是借助自注意力机制的优势捕捉长距离…

Kohana框架的安装及部署

Kohana框架的安装及部署 tipsKohana安装以及部署1、重要文件作用说明1.1 /index.php1.2 /application/bootstrap.php 2、项目结构3、路由配置3.1、隐藏项目入口的路由3.2、配置默认路由3.3、配置自定义的路由(Controller目录下的控制器)3.4、配置自定义的路由(Controller/direc…

java排序算法之桶排序

图解 桶排序&#xff08;Bucket sort&#xff09;是一个排序算法&#xff0c;它的主要思想是将需要排序的数据分到有限数量的桶里。每个桶里的数据再进行单独的排序&#xff0c;最后按照顺序将每个桶里的数据依次取出&#xff0c;即可完成排序。 桶排序的具体实现可以分为以下几…

软件项目验收测试计划

验收测试计划 1.基本信息 2.项目成果及验收要求 2.1项目成果 2.2验收要求 1、满足业务风险控制法律法规要求。 3.验收组织 4.产品交付 5.产品安装 5.1环境要求 5.2数据库配置 5.3程序配置 6.验收测试方案 6.1测试 依据 6.2测试要求 6.3测试方法 6.4测试工作流程 6.5测试通过准则…

Spring 只用一招,就摆脱被垃圾回收的命运,拯救了自己

SpringBoot ApplicationContext 会被 JVM 当成垃圾对象&#xff0c;然后回收掉吗&#xff1f; 最近五阳哥在复习JVM 垃圾回收的知识&#xff0c;被别人问到这个问题&#xff0c;我心里感到一惊&#xff0c;如果Spring 被回收掉&#xff0c;Spring管理的bean全部会被回收&#…

dubbo服务超时导致的异常

今天服务器启动项目时&#xff0c;页面刷新报错&#xff1a; 查看日志时报错信息为&#xff1a; 解决&#xff1a; 在对应服务的配置文件中配置dubbo超时时间&#xff1a; 随后问题得到解决&#xff0c;特此记录

【Linux】初识网络

目录 背景 协议 什么是协议 协议分层 OSI七层模型 TCP/IP模型 网络协议栈与 OS 的关系 网络传输 局域网中直接通信 数据的封装与分用 局域网通信原理 数据碰撞 跨路由器进行远端通信 IP的介绍 传输演示 背景 &#x1f9ca;一开始&#xff0c;计算机都是一台台独…

【Proteus仿真】【Arduino单片机】HC-SR04超声波测距

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、HC-SR04超声波传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示超声波检测距离。 二、软件设计 …

禁止chrome浏览器将HTTP协议强转成HTTPS

操作步骤 1.在浏览器中输入chrome://flags/ 2.在搜索框中输入upgrade&#xff0c;找到HTTPS Upgrades&#xff0c;将default改成disabled。 3.重启chrome浏览器即可生效。

QQ录制视频保存到哪了?位置一览,让你轻松找回

现如今&#xff0c;录制视频成为我们日常生活和工作的一部分。qq是中国最流行的社交媒体平台之一&#xff0c;许多用户使用qq录屏功能来记录重要时刻。但是&#xff0c;很多人不知道qq录制视频保存到哪了。本文将深入研究qq录制视频功能&#xff0c;以帮助您了解如何存储和管理…

关于跨域问题的个人理解

我也工作蛮多年了&#xff0c;期间既做过前端也做过后端。对于跨域问题&#xff0c;究竟是由前端程序员还是后端程序员来解决&#xff0c;我在不同的时期有不同的理解。现在&#xff0c;我更倾向于认为跨域问题应该由前端程序员来解决&#xff0c;即使在解决跨域问题的过程中涉…

流量分析(5.5信息安全铁人三项赛数据赛题解)

黑客通过外部的web服务器攻击到企业内部的系统中&#xff0c;并留下了web后门&#xff0c;通过外部服务器对内部进行了攻击。 目录 黑客攻击的第一个受害主机的网卡IP地址 黑客对URL的哪一个参数实施了SQL注入 第一个受害主机网站数据库的表前缀(加上下划线 例如abc_) 第一…

Linux中at命令添加一次性任务

1、工作原理 功能&#xff1a;在某个时间点&#xff0c;执行一次命令。 特点&#xff1a;任务是用户隔离的。 条件&#xff1a;必须要保证atd进程存在。 ps -ef |grep atd 原理&#xff1a;atd进程循环遍历队列里的任务&#xff0c;有则按顺序执行任务&#xff0c;没有&#x…

2023湖南省赛

​​​​​​连接 目录 A:开开心心233 B:Square Game C:室温超导 F:necklace J:radius K:tourist 补题中&#xff0c;会给出大部分代码 A:开开心心233 签到题 &#xff0c;无论二分还是解方程还是直接for循环枚举都能直接通过啦 signed main() {ios_base::sync_with_s…

计算机毕业设计项目选题推荐(免费领源码)PHP+MySQL在线网络教育平台66984

目 录 摘要 1 绪论 1.1 课题背景 1.2意义 1.3HTML介绍 1.4JavaScript 运行模式 1.5css3工作原理 1.6论文结构与章节安排 2 在线网络教育平台分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 3 2.2.2数据修改流程 4 2.2.3数据删除流程 4 2.3 系统功能分析 …