Java项目:音乐平台系统(java+SpringBoot+Mybaits+Vue+elementui+mysql)

 源码获取:俺的博客首页 "资源" 里下载!

环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 
4.数据库:MySql 5.7/8.0版本均可;
5.是否Maven项目:是;

技术栈
后端:SpringBoot+Mybaits
前端:Vue + elementui

使用说明
项目运行:
1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
4. 运行项目,在浏览器中输入地址:
前台地址:http://localhost:8080/springbootrpj39/front/index.html
后台地址:http://localhost:8080/springbootrpj39/admin/dist/index.html
管理员 abo 密码 abo
用户:用户1 密码: 123456

注意项目文件路径中不能含有中文、空格、特殊字符等,否则图片会上传不成功。

 

 

 

 

登录管理控制层:

@WebServlet("/user/loginServlet")
public class LoginServlet extends HttpServlet {

    private UserService userService = null;

    @Override
    public void init() throws ServletException {
        userService = new UserServiceImpl();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        User user = userService.getUserByLogin(username, password);
        if(user == null) {
            request.setAttribute("titleMsg", "登陆失败!");
            request.setAttribute("textMsg", "哎呀!<br>出了些问题,您要的页面不见了,请稍后再试");
            String url = request.getContextPath() + "/page/user/login.jsp";
            request.setAttribute("urlMsg", url);
            request.setAttribute("pageMsg", "登陆");
            request.setAttribute("codeMsg", "404");
            request.getRequestDispatcher("/page/user/message.jsp").forward(request, response);
        } else if(user.getActive() == 0) {
            request.setAttribute("titleMsg", "登陆失败!");
            request.setAttribute("textMsg", "哎呀!<br>小主,您还没有进行邮箱激活呢,请激活后再试!");
            String url = request.getContextPath() + "/page/user/login.jsp";
            request.setAttribute("urlMsg", url);
            request.setAttribute("pageMsg", "登陆");
            request.setAttribute("codeMsg", "");
            request.getRequestDispatcher("/page/user/message.jsp").forward(request, response);
        } else if(user.getActive() == 1) {
            // 登陆成功,跳转到主页
            // 将用户信息存入session
            request.getSession().setAttribute("user", user);
            response.sendRedirect(request.getContextPath() + "/page/user/index.jsp");
        } else {
            request.setAttribute("titleMsg", "哎呀!");
            request.setAttribute("textMsg", "出了些问题,您要的页面不见了,请稍后再试");
            String url = request.getContextPath() + "/page/user/login.jsp";
            request.setAttribute("urlMsg", url);
            request.setAttribute("pageMsg", "登陆");
            request.setAttribute("codeMsg", "404");
            request.getRequestDispatcher("/page/user/message.jsp").forward(request, response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

歌手管理控制层: 

@WebServlet("/albumSingleServlet")
public class AlbumSingleServlet extends HttpServlet {
    private SongService songService = null;
    private SingerService singerService = null;

    @Override
    public void init() throws ServletException {
        songService = new SongServiceImpl();
        singerService = new SingerServiceImpl();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 获取参数
        String singerName = request.getParameter("singerName");
        String _currentPage = request.getParameter("currentPage");// 当前页码
        String _rows = request.getParameter("rows");// 每页显示条数

        // 增加该歌手的热度
        singerService.updateSingerAccessCountBySingerName(singerName);

        if(_currentPage == null || "".equals(_currentPage)){
            _currentPage = "1";
        }

        if(_rows == null || "".equals(_rows)){
            _rows = "10";
        }

        int currentPage = Integer.parseInt(_currentPage);
        int rows = Integer.parseInt(_rows);

        PageBean<Song> songPage = new PageBean<>();

        int totalCount = Math.toIntExact(songService.getAllSongsCountBySingerName(singerName));
        // 计算总页码
        int totalPage = (totalCount % rows)  == 0 ? (totalCount / rows) : (totalCount/rows) + 1;
        songPage.setTotalPage(totalPage);
        // 计算当前页码
        if(currentPage <= 0){
            currentPage = totalPage;
        } else if(currentPage > totalPage) {
            currentPage = 1;
        }
        songPage.setCurrentPage(currentPage);

        int start = (currentPage - 1) * rows;

        // 获取该歌手的所有歌曲
        List<Song> allSongs = songService.getSongBySingerName(start, rows, singerName);
        Singer singer = singerService.getSingerBySingerName(singerName);

        songPage.setList(allSongs);
        songPage.setTotalCount(totalCount);


        songPage.setRows(rows);
        songPage.setTotalPage(totalPage);

        // 添加到session
        HttpSession session = request.getSession();
        session.setAttribute("songPage", songPage);
        session.setAttribute("singer", singer);
        // 重定向到album-single页面
        response.sendRedirect(request.getContextPath() + "/page/user/album-single.jsp");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

 歌单管理控制层:

@WebServlet("/addSongPlayCountServlet")
public class AddSongPlayCountServlet extends HttpServlet {

    private SongService songService = null;

    @Override
    public void init() throws ServletException {
        songService = new SongServiceImpl();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String songId = request.getParameter("songId");
        System.out.println("添加歌曲ID为 " + songId + " 的播放数量!");
        // 增加歌曲的播放次数
        songService.addPlayCountBySongId(Integer.parseInt(songId));

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("status", "ok");
        ServletUtils.sendToPage(response, jsonObject.toString());
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

 歌单分类管理控制层:

@WebServlet("/getAllCategoriesSongServlet")
public class GetAllCategoriesSongServlet extends HttpServlet {

    private SongService songService = null;
    private TypeService typeService = null;

    @Override
    public void init() throws ServletException {
        songService = new SongServiceImpl();
        typeService = new TypeServiceImpl();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String songType = request.getParameter("songType");
        String _currentPage = request.getParameter("currentPage"); // 当前页码
        String _rows = request.getParameter("rows");// 每页显示条数

        if(_currentPage == null || "".equals(_currentPage)){
            _currentPage = "1";
        }

        if(_rows == null || "".equals(_rows)){
            _rows = "10";
        }

        int currentPage = Integer.parseInt(_currentPage);
        int rows = Integer.parseInt(_rows);

        PageBean<Song> songPage = new PageBean<>();

        int totalCount = Math.toIntExact(songService.getAllSongsCountByType(songType));
        // 计算总页码
        int totalPage = (totalCount % rows)  == 0 ? (totalCount / rows) : (totalCount/rows) + 1;
        songPage.setTotalPage(totalPage);
        // 计算当前页码
        if(currentPage <= 0){
            currentPage = totalPage;
        } else if(currentPage > totalPage) {
            currentPage = 1;
        }
        songPage.setCurrentPage(currentPage);

        int start = (currentPage - 1) * rows;

        // 获取该歌手的所有歌曲
        List<Song> allSongs = songService.getSongByType(start, rows, songType);
        Type type = typeService.getTypeByName(songType);

        songPage.setList(allSongs);
        songPage.setTotalCount(totalCount);


        songPage.setRows(rows);
        songPage.setTotalPage(totalPage);

        // 添加到session
        HttpSession session = request.getSession();
        session.setAttribute("songPage", songPage);
        session.setAttribute("type", type);
        // 重定向到album-single页面
        response.sendRedirect(request.getContextPath() + "/page/user/categories-single.jsp");

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

 下载歌曲管理控制层:

@WebServlet("/user/person/downLoadServlet")
public class DownLoadServlet extends HttpServlet {

    private SongService songService = null;



    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应消息编码
        response.setCharacterEncoding("utf-8");
        //获取下载的文件信息
        String idStr = request.getParameter("songId");
        System.out.println("作品id:" + idStr);
        int songId = Integer.parseInt(idStr);

        //从数据库找到该文件信息
        Song song = songService.getSongById(songId);

        //获取所要下载的文件名称
        String absPath = request.getSession().getServletContext().getRealPath("");
        System.out.println(absPath);
        String filepath = absPath + "/" + song.getUrl();
        //对文件名称编码
//  		filename = new String(filename.trim().getBytes("iso8859-1"),"UTF-8");
        System.out.println("需要下载的文件路径为:" + filepath);


//        //得到要下载的文件
        File file = new File(filepath);
        System.out.println("文件是否存在:" + file.exists());
        //如果文件不存在
        if (!file.exists()) {
            request.setAttribute("titleMsg", "哎呀!");
            request.setAttribute("textMsg", "出了些问题,您要下载的资源不存在了!");
            String url = request.getContextPath() + "/page/user/album-single.jsp";
            request.setAttribute("urlMsg", url);
            request.setAttribute("pageMsg", "歌曲列表");
            request.setAttribute("codeMsg", "");
            request.getRequestDispatcher("/page/user/message.jsp").forward(request, response);
            return;
        }
        //改变下载量
        System.out.println("改变下载量之前:" + song.getDownloadCount());
        song.setDownloadCount(song.getDownloadCount() + 1);
        System.out.println("改变下载量之后:" + song.getDownloadCount());

        int flag = songService.updateSong(song);
        System.out.println("下载量改变是否成功:" + flag);
        if (flag > 0) {
//        	//下载文件所在目录
//            String folder = "WebContent/download/";
            //处理文件名
            String realname = song.getName() + ".mp3";
            //设置响应头,控制浏览器下载该文件
            response.setContentType("application/x-msdownload");
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));
            //读取要下载的文件,保存到文件输入流
            FileInputStream in = new FileInputStream(filepath);
            //创建输出流
            OutputStream out = response.getOutputStream();
            //创建缓冲区
            byte[] buffer = new byte[1024];
            int len = 0;
            //循环将输入流中的内容读取到缓冲区当中
            while ((len = in.read(buffer)) > 0) {
                //输出缓冲区的内容到浏览器,实现文件下载
                out.write(buffer, 0, len);
            }
            //关闭文件输入流
            in.close();
            //关闭输出流
            out.close();
            System.out.print("文件下载完成。");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }


    @Override
    public void init() throws ServletException {
        songService = new SongServiceImpl();
    }
}

源码获取:俺的博客首页 "资源" 里下载!

以下是一个完整的 Java Spring Boot + MyBatis + Vue + Element UI + MySQL 的登录功能实现示例,包含后端和前端部分。 --- ### 一、后端(Spring Boot + MyBatis + MySQL) #### 1. 数据库表(MySQL) ```sql CREATE TABLE `user` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL UNIQUE, `password` VARCHAR(100) NOT NULL ); ``` #### 2. Maven依赖(pom.xml) 确保你有以下核心依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies> ``` #### 3. 实体类(User.java) ```java public class User { private Long id; private String username; private String password; // getters and setters } ``` #### 4. Mapper接口(UserMapper.java) ```java @Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE username = #{username}") User findByUsername(String username); @Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})") void insert(User user); } ``` #### 5. 登录请求封装类(LoginRequest.java) ```java public class LoginRequest { private String username; private String password; // getters and setters } ``` #### 6. 控制器(AuthController.java) ```java @RestController @RequestMapping("/api/auth") public class AuthController { @Autowired private UserMapper userMapper; @PostMapping("/login") public ResponseEntity<?> login(@RequestBody LoginRequest request) { User user = userMapper.findByUsername(request.getUsername()); if (user == null || !user.getPassword().equals(request.getPassword())) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("用户名或密码错误"); } return ResponseEntity.ok("登录成功"); } } ``` --- ### 二、前端(Vue + Element UI) #### 1. 安装依赖 ```bash npm install axios element-ui ``` #### 2. 登录页面组件(Login.vue) ```vue <template> <el-form :model="form" label-width="80px" style="max-width: 400px; margin: 50px auto;"> <h2>用户登录</h2> <el-form-item label="用户名"> <el-input v-model="form.username" /> </el-form-item> <el-form-item label="密码"> <el-input v-model="form.password" type="password" show-password /> </el-form-item> <el-button type="primary" @click="submitForm">登录</el-button> </el-form> </template> <script> import axios from 'axios'; export default { data() { return { form: { username: '', password: '' } }; }, methods: { async submitForm() { try { const res = await axios.post('http://localhost:8080/api/auth/login', this.form); alert(res.data); } catch (err) { alert(err.response?.data || '登录失败'); } } } }; </script> ``` --- ### 三、运行说明 1. 后端启动 Spring Boot 应用,默认监听 `localhost:8080` 2. 前端使用 Vue CLI 或 Vite 创建项目,引入 Element UI 和 Axios 3. 确保前后端跨域问题已解决(Spring Boot 中可以加 `@CrossOrigin` 注解) 4. 测试时向数据库中插入一条用户数据进行测试 --- ### 四、安全性建议(生产环境需补充) - 使用 JWT Token 替代简单字符串返回 - 密码应加密存储(如 BCrypt) - 增加验证码机制 - 使用 HTTPS 协议传输数据 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OldWinePot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值