Java项目:springboot电影推荐网站

news2025/7/7 9:07:32

作者主页:源码空间站2022

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

项目介绍

springboot电影推荐网站。本系统采用企业级开发标准,使用SpringBoot架构,数据访问层采用Spring Data Jpa,业务控制层采用SpringMvc,安全框架采用Shiro,实现了完整权限系统,Controller方法采用shiro注解,来实现有效的权限控制;界面采用了Easyui技术;在该项目中可以收录电影,收录电影网站,电影网站动态信息以及通过关键字查询你想要看的电影。在后台可以添加电影信息,对电影信动态的管理,电影信息管理,网站信息的管理等。

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 

6.数据库:MySql 5.7版本;

技术栈

1. 后端:SpringBoot+Spring Data Jpa+shiro

2. 前端:html+easyui+bootstrap

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 将项目中application.yml配置文件中的数据库配置改为自己的配置

3. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;

若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat,然后运行;

4. 前台运行地址:http://localhost:8085
后台运行地址:http://localhost:8085/login

管理员账户:admin  密码:123456

运行截图

 

后管界面

代码相关

电影控制器

/**
 * 电影控制器
 * @author Administrator
 *
 */
@Controller
@RequestMapping(value = "/film")
public class FilmController {

	@Resource
	private FilmService filmService;
	
	
	@Resource
	private WebSiteInfoService webSiteInfoService;
	
	/**
	 * 搜索电影 简单模糊查询
	 * @param q
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/search")
	public ModelAndView search(@Valid Film film,BindingResult bindingResult)throws Exception{
		ModelAndView mav=new ModelAndView();
		if(bindingResult.hasErrors()){
			mav.addObject("error", bindingResult.getFieldError().getDefaultMessage());
			mav.addObject("title", "首页");
	    	mav.addObject("mainPage", "film/indexFilm");
	    	mav.addObject("mainPageKey", "#f");
	    	mav.addObject("film", film);
	    	mav.setViewName("index");
		}else{
			List<Film> filmList=filmService.list(film, 1, 32);
			mav.addObject("filmList", filmList); // 最多查询32条数据
			mav.addObject("title", film.getName());
	    	mav.addObject("mainPage", "film/result");
	    	mav.addObject("mainPageKey", "#f");
	    	mav.addObject("film", film);
	    	mav.addObject("total", filmList.size());
			mav.setViewName("index");			
		}
		return mav;
	}
	
	/**
	 * 分页查询电影信息
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/list/{id}")
	public ModelAndView list(@PathVariable(value="id",required=false) Integer page)throws Exception{
		ModelAndView mav=new ModelAndView();
		List<Film> filmList=filmService.list(null, page, 20);
		Long total=filmService.getCount(null);
		mav.addObject("filmList", filmList);
		mav.addObject("pageCode",PageUtil.genPagination("/film/list", total, page, 20));
		mav.addObject("title", "电影列表");
		mav.addObject("mainPage", "film/list");
    	mav.addObject("mainPageKey", "#f");
    	mav.setViewName("index");
		return mav;
	}
	
	/**
	 * 根据id查询电影详细信息
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/{id}")
	public ModelAndView view(@PathVariable("id") Integer id)throws Exception{
		ModelAndView mav=new ModelAndView();
		Film film=filmService.findById(id);
		mav.addObject("film", film);
		mav.addObject("title", film.getTitle());
		mav.addObject("pageCode", this.genUpAndDownPageCode(filmService.getLast(id),filmService.getNext(id)));
		mav.addObject("randomFilmList", filmService.randomList(8));
		mav.addObject("webSiteInfoList", webSiteInfoService.getByFilmId(id));
    	mav.addObject("mainPage", "film/view");
    	mav.addObject("mainPageKey", "#f");
    	mav.addObject("film", film);
		mav.setViewName("index");	
		return mav;
	}
	
	/**
	 * 获取下一篇博客和下一篇博客代码
	 * @param lastBlog
	 * @param nextBlog
	 * @return
	 */
	private String genUpAndDownPageCode(Film lastFilm,Film nextFilm){
		StringBuffer pageCode=new StringBuffer();
		if(lastFilm==null || lastFilm.getId()==null){
			pageCode.append("<p>上一篇:没有了</p>");
		}else{
			pageCode.append("<p>上一篇:<a href='/film/"+lastFilm.getId()+"'>"+lastFilm.getTitle()+"</a></p>");
		}
		if(nextFilm==null || nextFilm.getId()==null){
			pageCode.append("<p>下一篇:没有了</p>");
		}else{
			pageCode.append("<p>下一篇:<a href='/film/"+nextFilm.getId()+"'>"+nextFilm.getTitle()+"</a></p>");
		}
		return pageCode.toString();
	}
	
	
	
}

后管电影控制器

/**
 * 电影Controller类
 * @author Administrator
 *
 */
@RestController
@RequestMapping(value = "/admin/film")
public class FilmAdminController {

	@Resource
	private FilmService filmService;
	
	@Resource
	private WebSiteInfoService webSiteInfoService;
	
	@Value("${imageFilePath}")
	private String imageFilePath;
	
	@Resource
	private InitSystem initSystem;
	
	/**
	 * 分页查询电影
	 * @param page
	 * @param rows
	 * @return
	 * @throws Exception
	 */
	@ResponseBody
	@RequestMapping("/list")
	public Map<String,Object> list(Film film,@RequestParam(value="page",required=false)Integer page,@RequestParam(value="rows",required=false)Integer rows)throws Exception{
		List<Film> filmList=filmService.list(film,page,rows);
		Long total=filmService.getCount(film);
		Map<String, Object> resultMap = new HashMap<>();
		resultMap.put("rows", filmList);
		resultMap.put("total", total);
		return resultMap;
	}
	
	/**
	 * 下拉框模糊查询
	 * @param name
	 * @return
	 * @throws Exception
	 */
	@ResponseBody
	@RequestMapping("/comboList")
	public List<Film> comboList(String q)throws Exception{
		if(StringUtil.isEmpty(q)){
			return null;
		}
		Film film=new Film();
		film.setName(q);
		return filmService.list(film, 1, 30); // 最多查询30条记录
	}
	
	/**
	 * 添加或者修改电影
	 * @param film
	 * @return
	 * @throws Exception
	 */
	@ResponseBody
	@RequestMapping("/save")
	public Map<String,Object> save(Film film,@RequestParam("imageFile")MultipartFile file,HttpServletRequest request)throws Exception{
		if(!file.isEmpty()){
			// 获取文件名
			String fileName = file.getOriginalFilename();
			// 获取文件的后缀名
			String suffixName = fileName.substring(fileName.lastIndexOf("."));
			String newFileName=DateUtil.getCurrentDateStr()+suffixName;
			FileUtils.copyInputStreamToFile(file.getInputStream(), new File(imageFilePath+newFileName));
			film.setImageName(newFileName);			
		}
        film.setPublishDate(new Date());
		Map<String, Object> resultMap = new HashMap<>();
		filmService.save(film);
		initSystem.loadData(request.getServletContext());
		resultMap.put("success", true);
		return resultMap;
	}
	
	/**
	 * 删除电影信息
	 * @param ids
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@ResponseBody
	@RequestMapping("/delete")
	public Map<String,Object> delete(@RequestParam(value="ids")String ids,HttpServletRequest request)throws Exception{
		String []idsStr=ids.split(",");
		Map<String, Object> resultMap = new HashMap<>();
		boolean flag=true;
		for(int i=0;i<idsStr.length;i++){
			Integer filmId=Integer.parseInt(idsStr[i]);
			if(webSiteInfoService.getByFilmId(filmId).size()>0){
				flag=false;
			}else{
				filmService.delete(filmId);								
			}
		}
		initSystem.loadData(request.getServletContext());
		if(flag){
			resultMap.put("success", true);			
		}else{
			resultMap.put("success", false);
			resultMap.put("errorInfo", "电影动态信息中存在电影信息,不能删除!");
		}
		return resultMap;
	}
	
	/**
	 * 根据id查询实体
	 * @param id
	 * @return
	 * @throws Exception
	 */
	@ResponseBody
	@RequestMapping("/findById")
	public Film findById(@RequestParam(value="id")Integer id)throws Exception{
		Film film=filmService.findById(id);
		return film;
	}
	
	/**
	 * 上传图片
	 * @param file
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/ckeditorUpload")
	public String ckeditorUpload(@RequestParam("upload")MultipartFile file,String CKEditorFuncNum)throws Exception{
		// 获取文件名
        String fileName = file.getOriginalFilename();
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        String newFileName=DateUtil.getCurrentDateStr()+suffixName;
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(imageFilePath+newFileName));
        
		StringBuffer sb=new StringBuffer();
		sb.append("<script type=\"text/javascript\">");
		sb.append("window.parent.CKEDITOR.tools.callFunction("+ CKEditorFuncNum + ",'" +"/static/filmImage/"+ newFileName + "','')");
		sb.append("</script>");
		
		return sb.toString();
	}
	

	
}

如果也想学习本系统,下面领取。回复:040springboot

 

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

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

相关文章

工具(二):Nginx 扩展 OpenResty

OpenResty 介绍OpenResty 原理Nginx 模块Nginx的 lua插载点案例 配置模板nginx.conf通过Lua找到静态文件 — 商品页通过Lua 获取 redis 只返回 — 库存test 其他Demo MysqlOps.luaRedisExtOps.luaredisOps.lua 辅助工具类说明 自动生成静态页FTP 工具 Nginx_有5大优点&#x…

职场经验:游戏测试的主要工作及主要流程

01 游戏测试主要内容 1、功能测试 功能测试是游戏测试中最常见的模式&#xff0c;主要测试方法为黑盒测试 功能测试主要用来验证功能是否符合需求设计 功能测试主要考虑正确性&#xff0c;而不考虑游戏底层结构及代码错误 功能测试通常从界面着手开始测试&#xff0c;尽量…

【架构师(第五十一篇)】 服务端开发之技术方案设计

接口设计 把 server 端当做一个黑盒&#xff0c;它将如何与前端通讯&#xff1f; 功能范围 B 端&#xff0c;用户注册&#xff0c;作品管理&#xff0c;模板管理编辑器&#xff0c;单个作品的内容获取&#xff0c;修改&#xff0c;预览和发布 功能拆分 用户信息相关作品管…

线上牛奶配送

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 基于Java的线上牛奶配送系统的设计与实现 风网站前台&#xff1a;网站介绍、联系我们、公告信息、套餐类型、牛奶套餐、…

Linux-4 文件管理

Linux-4 文件管理 文件管理概述 谈到Linux文件管理&#xff0c;首先我们需要了解的是&#xff0c;我们要对文件做些什么事&#xff1f;其实无非就是对一个文件进行创建&#xff0c;复制&#xff0c;移动&#xff0c;查看&#xff0c;编辑&#xff0c;压缩&#xff0c;查找&am…

自己个人拥有一个可以支付功能的网站?当然可以了!保姆级演示!

文章目录前提条件演示应用申请开通和配置应用创建应用配置代码开发后端实例前端代码实例源码前提条件 这是必要条件&#xff01;&#xff01;&#xff01; 这是必要条件&#xff01;&#xff01;&#xff01; 这是必要条件&#xff01;&#xff01;&#xff01; 开通当面付&am…

人脸检测和对齐算法MTCNN

1. 概述 人脸识别在实际的生活中有着广泛的应用&#xff0c;得益于深度学习的发展&#xff0c;使得人脸识别的准确率得到大幅度提升。然而&#xff0c;为了做好人脸识别&#xff0c;第一步需要做的是对人脸检测&#xff0c;主要是通过对图片分析&#xff0c;定位出图片中的人脸…

Java项目:springboot网上点餐系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 功能介绍 SpringBoot在线订餐系统项目。主要功能说明&#xff1a; 分为两个角色&#xff0c;餐厅老板、普通用户 餐厅老板可以登录&#xff0c;注册&…

质量不错的蓝牙耳机有哪些?2023年值得选购的四款蓝牙耳机

现如今&#xff0c;蓝牙耳机越多人使用&#xff0c;不同于有线耳机&#xff0c;蓝牙耳机更为方便&#xff0c;没有线束的困扰&#xff0c;走到哪也不用带上手机一起&#xff0c;特别便利。然而&#xff0c;随着蓝牙耳机市场的旷大&#xff0c;各种类型各种样式的耳机五花八门&a…

C++ 实现并查集结构

前言 并查集一般用于多元素&#xff0c;多集合的查找问题&#xff1b; 听说很有用&#xff0c;但是平时好像确实没有怎么见过。。 leetcode典型例题&#xff1a;岛屿数量 一、原理 其实并查集的每个小集合就是一张有向图&#xff0c;只不过是所有子节点指向父节点的图结构。…

认证鉴权对于 API 网关的重要性

认证鉴权作为 API 网关不可或缺的能力&#xff0c;已然成为用户在选型 API 网关时考量的重要因素之一。 作者钱勇&#xff0c;API7.ai 开发工程师&#xff0c;Apache APISIX Committer 在当下云原生越发成熟的环境下&#xff0c;API 网关最核心的功能可以概括为&#xff1a;连接…

高品质蓝牙耳机排行榜,值得入手的四款蓝牙耳机分享

2023年即将到来&#xff0c;还有哪些蓝牙耳机值得大家购买呢&#xff1f;蓝牙耳机在我们日常生活中发挥着很大作用。无论是听歌还是通话&#xff0c;又或者是运动健身、玩游戏等&#xff0c;都常见大家使用。同样也伴随着蓝牙耳机市场的壮大&#xff0c;五花八门的耳机层出不穷…

【C语言进阶】进来抄作业,完善你的通讯录(软工期末大作业可用)

目录 &#x1f970;前言&#x1f970;&#xff1a; 一、输入合法性检测&#x1f920;&#xff1a; ①.对“ 联系方式 ”的合法性检测&#xff1a; ②.对“年龄”进行合法性检测&#xff1a; 二、字典排序&#x1f911;&#xff1a; 三、反馈优化&#x1f92f;&#xff1a; …

Python 圣诞树代码

一、前言 1.本章将会讲解Python编程 实现圣诞树效果&#xff01; 2.圣诞节介绍 基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节&#xff0c;天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期&#xff0c;《圣经》并无记载。公元336年罗马教会开始在12月25日过此节。12月25日…

现在转行计算机如49年入国军?

阿里&#xff0c;腾讯等互联网大厂最近不太安宁&#xff0c;裁员消息频出&#xff0c;无风不起浪&#xff0c;裁员年年有&#xff0c;今年特别多。于是不少打算入行或者已经入行计算机的同学开始担忧&#xff0c;如今入行计算机&#xff0c;怎么有点49年入国军的赶脚&#xff1…

Android面试题及答案整理(2023最新版)持续更新中......

倒霉的时候总会想起福祸相依&#xff0c;但你会发现倒霉起来没完没了&#xff0c;就是看不到传说中的“福” 年初被裁了&#xff0c;我会安慰自己&#xff0c;此处不留爷自有留爷处&#xff0c;然后踏入找工作的行列&#xff1b;没有面试邀请&#xff0c;我会告诉自己&#xf…

倒在转“码”路上的文科生,文科生也能转行做IT吗?

近期&#xff0c;一篇《倒在转“码”路上的文科生》火了。 这也让关于“文科转码”的话题引起了一番热度&#xff0c;由于大环境不佳&#xff0c;使得毕业生就业成为了一个难度&#xff0c;其中文科生相较而言&#xff0c;选择更少&#xff0c;因此&#xff0c;让不少学子有了…

Java项目:springboot酒店宾馆管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 功能介绍 springboot酒店宾馆管理系统。该系统为后管系统&#xff0c;无前台。主要分三种角色&#xff1a;管理者/工作人员/前台人员。 主要功能有&…

网络安全方向好吗?

我就在这个行业&#xff0c;今年刚毕业&#xff0c;民办二本&#xff0c;目前武汉&#xff0c;薪资就没必要说了&#xff0c;高就对了。 这个行业优势就是工资高&#xff0c;缺点就需要一直学&#xff0c;卷得要死&#xff0c;不是跟别人卷&#xff0c;而是自己卷&#xff0c;…

数据库实验3 完整性语言实验

实验3 完整性语言实验 实验3.1实体完整性实验 1.实验目的 掌握实体完整性的定义和维护方法。 2.实验内容和要求 定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的SQL 语句:创建表时定义实体完整性﹑创建表后定义实体完整性。设计SQL语句验证完整性约束是…