黑马旅游网编写练习(9)–旅游线路收藏功能
旅游线路收藏功能分析
在旅游详情页面,用户点击收藏按钮后,我们向服务器发送Ajax请求;然后查询用户是否登录;若用户已登录,则需要查询数据库表格判断该用户是否收藏了该线路;若收藏成功,则返回标记,前端根据该标记修改收藏按钮的样式。
数据库表格关系分析
用户收藏线路,涉及到三个表格;一个是用户的表格tab_user;一个是旅游线路tab_route;还有一个是用户收藏表格tab_favorite。先来观察这三个表格之间的关系。
tab_favorite表格中rid代表某一条旅游线路;uid代表用户信息。所以在前台向服务器发送Ajax请求时,需要传递的参数是rid;uid可以通过查询当前登录用户来查询。而用户是否收藏该线路则只需要查询tab_favorite表格中是否存在满足rid和uid的信息。
接下来先开始编写后台信息
首先开始编写web层,在RouteServlet中编写一个查询是否收藏的方法;该方法主要代码如下:
/**
* 判断用户是否已经收藏了该线路
* @param request
* @param response
* @throws IOException
*/
public void isFavorite(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 获取线路的rid参数
String rid_str = request.getParameter("rid");
if(rid_str == null || rid_str.length() == 0 || rid_str.equals("null")){
// rid_str为空
System.out.println("rid_str为空");
return;
}
int rid = Integer.parseInt(rid_str);
// 判断用户是否登录
User user = (User) request.getSession().getAttribute("user");
int uid = 0;
if(user == null){
// 用户未登录
System.out.println("用户未登录,请先登录");
return;
}else{
// 用户已登录,获取用户的uid
uid = user.getUid();
}
// 调用FavoriteService查询线路rid是否被用户uid收藏
boolean flag = favoriteService.isFavorite(rid, uid);
// 将该收藏标志信息返回给客户端
responseJson(response,flag);
}
接下来开始编写service层,该层实现一个判断线路rid是否被用户uid收藏的方法,主要代码如下:
// 创建FavoriteDao对象
FavoriteDao favoriteDao = new FavoriteDaoImpl();
/**
* 判断线路rid是否被用户uid收藏
* @param rid
* @param uid
* @return
*/
@Override
public boolean isFavorite(int rid, int uid) {
// 创建一个favorite对象,存储查询结果
Favorite favorite = null;
// 调用FavoriteDao,查询tab_favorite表
favorite = favoriteDao.findByRidAndUid(rid, uid);
if(favorite == null){
// 查询失败
return false;
}else{
// 查询成功
return true;
}