云上音乐项目
功能需求
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>
音乐列表
喜欢音乐列表
上传音乐页面