2021-10-09

云上音乐项目

功能需求

1.登陆注册
2.添加音乐
3.查询音乐
4.删除音乐
5.添加及移除音乐到“喜欢”
6.删除选中的多个音乐
7.查询喜欢的音乐

技术选型

后端:servlet+JDBC+MYSQL 前端:HTML+CSS+JS

数据库设计utils

整个项目需要创建三个表:user表、Music表、lovemusi表。其中lovemusic是根据前两张表的关系所建的。
user表:id、username、password、age、gender、Email
Music表:id、title、singer、time、url、userId
lovemusic表:id、userId、musicId

JDBCUtils

关于datasource的获取类似于单例模式(饿汉式),只不过提供的方法返回的是connection对象。

package Utils;
import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtils {
    private static final String URL="jdbc:mysql://127.0.0.1:3306/om?characterEncoding=utf8&useSSL=false";
    private static final String USERNAME="root";
    private static final String PASSWORD="自己的密码";

    private static DataSource dataSource=null;

    public  static DataSource getDataSource(){
        if(dataSource==null){
            MysqlDataSource mysqlDataSource=new MysqlDataSource();
            mysqlDataSource.setUrl(URL);
            mysqlDataSource.setUser(USERNAME);
            mysqlDataSource.setPassword(PASSWORD);
            dataSource=mysqlDataSource;
        }
        return dataSource;
    }
    public static Connection getConnection(){
        try {
            return getDataSource().getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
    public static void close(Connection connection,
                             PreparedStatement statement,
                             ResultSet resultSet){
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (statement!=null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

entity

就是根据sql所键的表构建出对应的实体类。总共建两个实体类user和music。

package entity;

public class Music {
    private int id;
    private String title;
    private String singer;
    private String url;
    private String time;
    private int userId;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSinger() {
        return singer;
    }

    public void setSinger(String singer) {
        this.singer = singer;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    @Override
    public String toString() {
        return "Music{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", singer='" + singer + '\'' +
                ", url='" + url + '\'' +
                ", time='" + time + '\'' +
                ", userId=" + userId +
                '}';
    }
}

music类同上就不做赘述了。

dao

UserDao类中主要定义了登录和注册的功能。

package dao;

import Utils.DBUtils;
import entity.User;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDao {



    public User login(User loginUser) {
        Connection connection = null;
        //可以语法预防SQL注入与statement
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        connection = DBUtils.getConnection();
        String sql = "select * from user where username=? and password=?";
        User user = null;
        try {
            preparedStatement = connection.prepareStatement(sql);//编译预处理
            preparedStatement.setString(1, loginUser.getUsername());
            preparedStatement.setString(2, loginUser.getPassword());
            resultSet = preparedStatement.executeQuery();//接收结果集
            if (resultSet.next()) {
                user = new User();
                user.setId(resultSet.getInt("id"));
                user.setUsername(resultSet.getString("username"));
                user.setPassword(resultSet.getString("password"));
                user.setAge(resultSet.getInt("age"));
                user.setGender(resultSet.getString("gender"));
                user.setEmail(resultSet.getString("email"));
            } else {
                System.out.println("登录失败!");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DBUtils.close(connection, preparedStatement, resultSet);
        }
        System.out.println(user);
        return user;
    }
    public void insertUser(User user){
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        connection=DBUtils.getConnection();
        String sql="insert into user (username,password,age,gender,email)values (?,?,?,?,?)";
        try {
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setString(1,user.getUsername());
            preparedStatement.setString(2,user.getPassword());
            preparedStatement.setInt(3,user.getAge());
            preparedStatement.setString(4,user.getGender());
            preparedStatement.setString(5,user.getEmail());
            int ret=preparedStatement.executeUpdate();
            if(ret==1){
                System.out.println("注册成功!");
            }else{
                System.out.println("注册失败!");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,preparedStatement,null);
        }
    }

MusicDao中主要实现了上传音乐、查询(根据ID、关键字),删除音乐,喜欢列表(查找、删除)。

package dao;

import Utils.DBUtils;
import entity.Music;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MusicDao {

    //上传音乐
    public int insert(String title,String singer,String time,String url,int userid){
        //上传成功会有返回值
        Connection connection=null;
        PreparedStatement statement=null;
        //ResultSet resultSet=null;
        try {
            connection= DBUtils.getConnection();
            String sql="insert into music(title,singer,time,url,userid)values (?,?,?,?,?)";
            statement=connection.prepareStatement(sql);
            statement.setString(1,title);
            statement.setString(2,singer);
            statement.setString(3,time);
            statement.setString(4,url);
            statement.setInt(5,userid);
            int ret=statement.executeUpdate();
            if(ret==1){
                return ret;
            }
            return 0;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,null);
        }
        return  0;
    }
    //显示全部音乐
    public List<Music> findMusic(){
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        connection=DBUtils.getConnection();
        String sql="select * from music";
        List<Music> musicList=new ArrayList<>();
        try {
            statement=connection.prepareStatement(sql);
            resultSet=statement.executeQuery();
            while (resultSet.next()){
                Music music=new Music();
                music.setId(resultSet.getInt("id"));
                music.setTitle(resultSet.getString("title"));
                music.setSinger(resultSet.getString("singer"));
                music.setTime(resultSet.getString("time"));
                music.setUrl(resultSet.getString("url"));
                music.setUserId(resultSet.getInt("userid"));
                musicList.add(music);
                //while循环,因为查询到的不止一条;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,resultSet);
        }
        return musicList;
    }
    //根据id查找音乐
    public Music findMusicById(int id){
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        connection=DBUtils.getConnection();
        String sql="select * from music where id=?";
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,id);
            resultSet= statement.executeQuery();
            if(resultSet.next()){
                Music music=new Music();
                music.setId(resultSet.getInt("id"));
                music.setTitle(resultSet.getString("title"));
                music.setSinger(resultSet.getString("singer"));
                music.setTime(resultSet.getString("time"));
                music.setUrl(resultSet.getString("url"));
                music.setUserId(resultSet.getInt("userid"));
                return music;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,resultSet);
        }
        return null;
    }
    //模糊查询
    public List<Music> findMusicByKey(String str){
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        connection=DBUtils.getConnection();
        String sql="select * from music where title like ?";
        //默认会加上单引号;
        List<Music> musicList=new ArrayList<>();
        try {
            statement=connection.prepareStatement(sql);
            str="%"+str+"%";//不能用+=,因为前面就会有空位进行占位了
            statement.setString(1,str);
            resultSet= statement.executeQuery();
            while (resultSet.next()){
                Music music=new Music();
                music.setId(resultSet.getInt("id"));
                music.setTitle(resultSet.getString("title"));
                music.setSinger(resultSet.getString("singer"));
                music.setTime(resultSet.getString("time"));
                music.setUrl(resultSet.getString("url"));
                music.setUserId(resultSet.getInt("userid"));
                musicList.add(music);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,resultSet);
        }
        return musicList;
    }
    //根据musicId删除音乐
    public int deleteMusicById(int musicId){
        Connection connection=null;
        PreparedStatement statement=null;
        connection=DBUtils.getConnection();
        String sql="delete from music where id=?";
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,musicId);
            int ret=statement.executeUpdate();
            if(ret==1){
                if(findLoveMusicById(musicId)){
                    int ret2=deleteLoveMusicById(musicId);
                    if(ret2==1){
                        System.out.println("删除成功");
                        return 1;
                    }
                }
                return 1;
            }else {
                return 0;
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,null);
        }
        return 0;
    }
    public boolean findLoveMusicById(int mucisId){
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        connection=DBUtils.getConnection();
        String sql="select * from lovemusic where music_id=?";
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,mucisId);
            resultSet= statement.executeQuery();
            if(resultSet.next()){
                return true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,null);
        }
        return false;
    }
    public int deleteLoveMusicById(int mucisId){
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        connection=DBUtils.getConnection();
        String sql="delete * from lovemusic where music_id=?";
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,mucisId);
            int ret = statement.executeUpdate();
            if(ret==1){
                return 1;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,null);
        }
        return 0;
    }

LoveMusicDao中主要实现了添加喜欢音乐、查询(根据ID和关键字)、根据用户ID和音乐Id查找音乐(为了预防重复喜欢)。

package dao;

import Utils.DBUtils;
import entity.Music;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class LoveMusicDao {
    //userId因为一个用户可以喜欢多个音乐
    //插入喜欢的音乐
    public boolean insertLoveMusic(int userId,int musicId){
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        connection= DBUtils.getConnection();
        String sql="insert into lovemusic(user_id,music_id) values (?,?)";
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,userId);
            statement.setInt(2,musicId);
            int ret=statement.executeUpdate();
            if(ret==1){
                return true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,null);
        }
        return false;
    }
    //根据user_id查询当前用户喜欢的音乐列表
    public List<Music> findLoveMusic(int user_id){
        List<Music> musicList=new ArrayList<>();
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        // String sql="select  * from lovemusic where user_id=?";
        //两张表联合查询
        // music表: music-id titlt singer time url user_id
        //lovemusic:id user_id music_id
        String sql="select m.id as m_id,title,singer,time,url ,userid from lovemusic lm,music m where m.id=lm.music_id and lm.user_id=?";
        connection=DBUtils.getConnection();
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,user_id);
            resultSet= statement.executeQuery();

            while (resultSet.next()){
                Music music=new Music();
                music.setId(resultSet.getInt("m_id"));
                music.setTitle(resultSet.getString("title"));
                music.setSinger(resultSet.getString("singer"));
                music.setTime(resultSet.getString("time"));
                music.setUrl(resultSet.getString("url"));
                music.setUserId(resultSet.getInt("userid"));
                musicList.add(music);
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,null);
        }
        return musicList;
    }
    //预防重复喜欢,使用在添加音乐在喜欢的列表中,需要先检查添加列表中是否有该音乐
    public boolean findLoveMusicIdAndUserId(int user_id,int music_id){
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        connection=DBUtils.getConnection();
        String sql="select * from lovemusic where user_id=? and music_id=?";
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,user_id);
            statement.setInt(2,music_id);
            resultSet=statement.executeQuery();
            if(resultSet.next()){
                System.out.println("yinyue:"+resultSet);
                return true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,resultSet);
        }
        return false;
    }
    //根据关键字进行模糊查找
    public List<Music> findLoveMusicBykeyAndUser_id(String str,int user_id){
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;
        connection=DBUtils.getConnection();
        String sql="select m.id as m_id,title,singer,time,url ,userid from " +
                "lovemusic lm,music m where m.id=lm.music_id and lm.user_id=? and title like ?";
        List<Music> musicList=new ArrayList<>();
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,user_id);
            str = "%"+str+"%";//不能用+=,因为前面就会有空位进行占位了
            statement.setString(2,str);
            resultSet=statement.executeQuery();
            while (resultSet.next()){
                Music music=new Music();
                music.setId(resultSet.getInt("m_id"));
                music.setTitle(resultSet.getString("title"));
                music.setSinger(resultSet.getString("singer"));
                music.setTime(resultSet.getString("time"));
                music.setUrl(resultSet.getString("url"));
                music.setUserId(resultSet.getInt("userid"));
                musicList.add(music);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DBUtils.close(connection,statement,resultSet);
        }
        return musicList;
    }
   
     // 移除当前用户喜欢的这首音乐,因为同一首音乐可能多个用户喜欢,所以需要传入当前用户的id
    public int removeLoveMusic(int user_id,int music_id){
        Connection connection=null;
        PreparedStatement statement=null;
        connection=DBUtils.getConnection();
        String sql="delete from lovemusic where user_id=? and music_id=?";
        try {
            statement=connection.prepareStatement(sql);
            statement.setInt(1,user_id);
            statement.setInt(2,music_id);
            int ret=statement.executeUpdate();
            if(ret==1){
                return 1;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        finally {
            DBUtils.close(connection,statement,null);
        }
        return 0;
    }

servlet

1.注册
使用重定向,跳转到登录页面

package Servlet;

import dao.UserDao;
import entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");
        //1.先读取用户名提交的用户和密码
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        String age=req.getParameter("age");
        String gender=req.getParameter("gender");
        String email=req.getParameter("email");

        if(username==null||"".equals(username)||
                password==null||"".equals(password)||
                age==null||"".equals(age)||
                gender==null||"".equals(gender)||
                email==null||"".equals(email)
        ){
            resp.sendError(404,"提交的资料为空");
            return;
        }
        UserDao userDao=new UserDao();

        //需要new一个user
        User user=new User();
        user.setUsername(username);
        user.setPassword(password);

        User user1= userDao.login(user);
        System.out.println(user.getId());
        if (user1!=null){
            //用户已经存在提醒注册失败
            resp.sendError(404,"用户已经存在,注册失败");
            return;
        }
        User newUser=new User();
        newUser.setUsername(username);
        newUser.setPassword(password);
        int newAge=Integer.parseInt(age);
        newUser.setAge(newAge);
        newUser.setGender(gender);
        newUser.setEmail(email);
        userDao.insertUser(newUser);
        resp.sendRedirect("login.html");
    }
}

2.登录

package Servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import dao.UserDao;
import entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");

        String username=req.getParameter("username");
        String password=req.getParameter("password");

        System.out.println("username"+username);
        System.out.println("password"+password);


        Map<String,Object> return_map=new HashMap<>();
        UserDao userDao=new UserDao();
        //需要new一个user
        User loginUser=new User();
        loginUser.setUsername(username);
        loginUser.setPassword(password);
        User user= userDao.login(loginUser);
        if(user == null) {
            //登录失败!
            return_map.put("msg",false);
            System.out.println(return_map.get("msg"));
        }else {
            //绑定数据
            req.getSession().setAttribute("user", user);
            return_map.put("msg",true);
            System.out.println(return_map.get("msg"));

        }
        ObjectMapper mapper=new ObjectMapper();
        //利用jackson将map转化为json对象
        //write将转化后的json字符串保存到json字符输出流中,最后给客户端
        mapper.writeValue(resp.getWriter(),return_map);

    }
}

3.上传音乐

package Servlet;

import dao.MusicDao;
import entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/upload")
@MultipartConfig
public class UploadMusicServlet extends HttpServlet {
    //文件存放路径
    private static final String SAVGPATH="/root/install/apache-tomcat-8.5.69/webapps/om/music/";
//    private static final String SAVGPATH="D:/workspace/community/onlinemusic/src/main/webapp/music/";
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");
        //取出对应的value
        User user=(User)req.getSession().getAttribute("user");

        if(user==null){
            System.out.println("没有登录不能上传");
        }else{
            //获取到前端页面上传的文件,上传到服务器
            Part part=req.getPart("filename");
            String header=part.getHeader("Content-Disposition");
            int start=header.lastIndexOf("=");
            String fileName=header.substring(start+1).replace("\"","");
            System.out.println(fileName);
            part.write(SAVGPATH+fileName);
            //往数据库中插入数据
            //取到歌手
            String singer=req.getParameter("singer");
            System.out.println("singer"+singer);
            //取到title
            String[] titles=fileName.split("\\.");
            String title=titles[0];
            System.out.println("title"+title);
            //取到url
            String url="music/"+title;
            System.out.println("url"+url);
            SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
            String time=simpleDateFormat.format(new Date());

            int userId=user.getId();
            System.out.println("userid"+userId);

            MusicDao musicDao=new MusicDao();
            int ret= musicDao.insert(title,singer,time,url,userId);
            if(ret==1){
                resp.sendRedirect("list.html");//插入成功,跳转到歌单
            }else{
                System.out.println("上传失败");
                part.delete();//数据库都上传失败了,就要把服务器的删掉
            }
            //上传相同的文件在服务器就只有一份,因为part类完全避免了重复的问题
        }
    }
}

4.添加喜欢音乐

package Servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import dao.LoveMusicDao;
import entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/uploadlovemusic")
public class UploadLoveMusicServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");


        String musicIds=req.getParameter("id");
        int musicId=Integer.parseInt(musicIds);
        User user=(User) req.getSession().getAttribute("user");
        int userId=user.getId();
        Map<String,Object> return_map=new HashMap<>();
        LoveMusicDao loveMusicDao=new LoveMusicDao();
        //先查看当前用户是否将该音乐添加到喜欢的音乐里面
        boolean effect2= loveMusicDao.findLoveMusicIdAndUserId(userId,musicId);
        System.out.println("effect2:"+effect2);
        if(effect2){
            return_map.put("msg",false);

        }else{
            boolean effect = loveMusicDao.insertLoveMusic(userId,musicId);


            if(effect){
                return_map.put("msg",true);
            }else{
                return_map.put("msg",false);
            }
        }
        ObjectMapper mapper=new ObjectMapper();
        //利用jackson将map转化为json对象
        //write将转化后的json字符串保存到json字符输出流中,最后给客户端
        mapper.writeValue(resp.getWriter(),return_map);
    }
}

5.删除音乐

package Servlet;


import com.fasterxml.jackson.databind.ObjectMapper;
import dao.MusicDao;
import entity.Music;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


@WebServlet("/deletemusic")
public class DeleteMusicServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");

        String ID = req.getParameter("id");
        int id = Integer.parseInt(ID);
        //1.先查询哟没有id,没有这个id就直接返回
        MusicDao musicDao = new MusicDao();
        Music music = musicDao.findMusicById(id);

        Map<String,Object> return_map=new HashMap<>();

        if(music==null){
            return;
        }
        //有当前需要删除的音乐,需要进行优化
        int ret= musicDao.deleteMusicById(id);
        if(ret==1){
            //数据库删除成功,那么服务器上的数据也需要发生改变
            //删除服务器下对应的目录
//            File file=new File("D:/workspace/community/onlinemusic/src/main/webapp/"+music.getUrl()+".mp3");//括号里面写路径
            File file=new File("/root/install/apache-tomcat-8.5.69/webapps/om/"+music.getUrl()+".mp3");
            if(file.delete()){
                //返回值为true or false
                return_map.put("msg",true);

            }else {
                return_map.put("msg",false);
            }
        }else {
            return_map.put("msg",false);
        }
        ObjectMapper mapper=new ObjectMapper();
        //利用jackson将map转化为json对象
        //write将转化后的json字符串保存到json字符输出流中,最后给客户端
        mapper.writeValue(resp.getWriter(),return_map);

    }
}

6.删除喜欢音乐

package Servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import dao.LoveMusicDao;
import entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/removelovemusic")
public class RemoveLoveMusicServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");

        String MusicId=req.getParameter("id");
        int musicid=Integer.parseInt(MusicId);

        User user =(User)req.getSession().getAttribute("user");
        int userid=user.getId();

        LoveMusicDao loveMusicDao=new LoveMusicDao();
        int ret= loveMusicDao.removeLoveMusic(userid,musicid);

        Map<String,Object> return_map=new HashMap<>();
        if(ret==1){
            return_map.put("msg",true);
        }else{
            return_map.put("msg",false);
        }
        ObjectMapper mapper=new ObjectMapper();
        //利用jackson将map转化为json对象
        //write将转化后的json字符串保存到json字符输出流中,最后给客户端
        mapper.writeValue(resp.getWriter(),return_map);
    }
}

7.删除多个音乐

package Servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import dao.MusicDao;
import entity.Music;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;



//批量删除操作

@WebServlet("/deleteselmusic")
public class DeleteSelMusicServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");
        //选中多个音乐进行删除,传过来的id就是一组数组
        String[] ID=req.getParameterValues("id[]");
        MusicDao musicDao = new MusicDao();
        //要返回给前端删除失败还是成功
        Map<String,Object> return_map=new HashMap<>();
        int sum=0;
        for(int i=0;i<ID.length;i++){
            int id=Integer.parseInt(ID[i]);
            Music music = musicDao.findMusicById(id);


            if(music==null){
                continue;
            }
            //有当前需要删除的音乐,需要进行优化
            int ret= musicDao.deleteMusicById(id);
            if(ret==1){
                //数据库删除成功,那么服务器上的数据也需要发生改变
                //删除服务器下对应的目录
                File file=new File("/root/install/apache-tomcat-8.5.69/webapps/om/"+music.getUrl()+".mp3");
//                File file=new File("D:/workspace/community/onlinemusic/src/main/webapp/"+music.getUrl()+".mp3");//括号里面写路径
                if(file.delete()){
                    //返回值为true or false
                    sum+=ret;
                    return_map.put("msg",true);
                }else {
                    System.out.println("删除失败");
                    return_map.put("msg",false);
                }
            }else {
                System.out.println("删除失败");
                return_map.put("msg",false);

            }
        }
        if(sum==ID.length){
            System.out.println("删除成功!");
            return_map.put("msg",true);

        }else{
            System.out.println("删除失败了!");
            return_map.put("msg",false);

        }

        ObjectMapper mapper=new ObjectMapper();
        //利用jackson将map转化为json对象
        //write将转化后的json字符串保存到json字符输出流中,最后给客户端
        mapper.writeValue(resp.getWriter(),return_map);

    }
}

8.查找音乐

package Servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import dao.MusicDao;
import entity.Music;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/findMusic")
public class FindMusicServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");
        String musicName=req.getParameter("musicName");
        MusicDao musicDao=new MusicDao();
        List<Music> musicList=null;
        if(musicName!=null){
            musicList= musicDao.findMusicByKey(musicName);
        }else{
            musicList= musicDao.findMusic();//什么参数都没有就默认查询全部

        }
        for (Music music:musicList) {
            System.out.println(music);
        }
        ObjectMapper objectMapper=new ObjectMapper();
        objectMapper.writeValue(resp.getWriter(),musicList);
    }
}

9.查找喜欢的音乐

package Servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import dao.LoveMusicDao;
import entity.Music;
import entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/findlovemusic")
public class FindLoveMusicServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");

        String musicname=req.getParameter("musicname");
        System.out.println(musicname);

        User user=(User)req.getSession().getAttribute("user");
        int userid=user.getId();

        LoveMusicDao loveMusicDao=new LoveMusicDao();
        List<Music> music=null;
        if(musicname!=null){
            music= loveMusicDao.findLoveMusicBykeyAndUser_id(musicname,userid);
        }else{
            music=loveMusicDao.findLoveMusic(userid);
        }

        ObjectMapper mapper=new ObjectMapper();
        //利用jackson将map转化为json对象
        //write将转化后的json字符串保存到json字符输出流中,最后给客户端
        mapper.writeValue(resp.getWriter(),music);
    }
}

前端实现

注册登录页面
在这里插入图片描述
登录页面中$.ajax()(JQuery封装的AJAX技术实现)方法:url :请求的服务器地址,data :发送到服务器的数据,type :请求的方式,dataType :预期服务器返回的数据类型。

 <script>
		  //登录请求
		  $(function () {
		  	$("#submit").click(function () {
				var username=$("#user").val();
				var password=$("#password").val();
				$.ajax({
					url:"loginServlet",
                    data:{"username":username,"password":password},
                    type:"POST",
					dataType:"json",
					success:function (data) {
						//打印出来的就是map
                        console.log(data);
                        if(data.msg===true){
                            window.location.href="list.html";
                        }else{
                            /*window.location.reload();*/
                            $("#message").text("账号或密码错误,请重试!");
                            $("#user").val("");
                            $("#password").val("");
                            $("#verifycode").val("");
                        }
					}
				});
			});
		  });
	  </script>

在这里插入图片描述
音乐列表
在这里插入图片描述
喜欢音乐列表
在这里插入图片描述
上传音乐页面
在这里插入图片描述

小结+链接

这个项目中学习到的重点是JS、Java对象和Json的转化以及JQuery中的A等。
项目链接:注册 登录

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值