功能介绍
前台功能需求
(1)用户的登录:对已经注册的用户提供登录操作。
(2)用户的注册:针对还未注册的用户完成注册功能的使用,在注册的过程中涉及数据的合法性校验,以及利用ajax完成用户名是否已被注册的异步校验。
(3)商品展示模块:通过分页浏览商品,也可以通过关键词搜索商品。
(4)购物车:用于存放用户的购物内容,用户可根据自己的情况修改自己的购物车。
(5)订单模块:对于已经登录的用户可以对购物车内容进行付款生成订单,可以为自己的订单进行付款。
(6)前台页面的访问权限:对已有账号访问进行权限分类,用户只能进入前台。
系统的前台功能模块图如下:
l 后台功能需求
(1)管理员登录:管理者根据账户和密码进行登录。
(2)商品管理:管理员可以对前台显示的商品进行管理包括分页查看,添加,修改,删除,搜索的功能。
(3)订单管理:管理员可以订单进行查看、删除、发货和搜索。
(4)后台账户管理:管理员可以对后台账户进行增删改查。
(5)用户管理:管理员可以对注册用户进行增删改查。
(6)后台页面的访问权限:对已有账号访问时进行权限分类,管理员只能进入后台。
部分功能模块代码
package servlet.admin; import java.io.IOException; import java.io.PrintWriter; 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 bean.Admin; import bean.PageBean; import dao.AdminDao; import dao.impl.AdminDaoImpl; import util.DateUtil; import net.sf.json.JSONObject; /** * Servlet implementation class UserServlet */ @WebServlet("/jsp/admin/AdminManageServlet") public class AdminManageServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String ADMINLIST_PATH="adminManage/adminList.jsp";//用户列表页面地址 private static final String ADMINADD_PATH="adminManage/adminAdd.jsp";//用户增加页面地址 private static final String ADMINEDIT_PATH="adminManage/adminEdit.jsp";//用户修改页面地址 /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action=request.getParameter("action"); switch(action){ case "list": adminList(request,response); break; case "add": adminAdd(request,response); break; case "update": adminUpdate(request,response); break; case "edit": adminEdit(request,response); break; case "del": adminDel(request,response); break; case "batDel": adminBatDel(request,response); break; case "find": adminFind(request,response); break; } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } //查询用户列表 private void adminList(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { AdminDao ad=new AdminDaoImpl(); int curPage=1; String page=request.getParameter("page"); if(page!=null){ curPage=Integer.parseInt(page); } //获取xml中设置的每页显示大小参数 int maxSize=Integer.parseInt(request.getServletContext().getInitParameter("maxPageSize")); PageBean pageBean=new PageBean(curPage,maxSize,ad.cakeReadCount()); request.setAttribute("adminList", ad.userList(pageBean)); request.setAttribute("pageBean", pageBean); request.getRequestDispatcher(AdminManageServlet.ADMINLIST_PATH).forward(request, response); } //增加用户 private void adminAdd(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { AdminDao ad=new AdminDaoImpl(); Admin admin=new Admin(request.getParameter("userName"),request.getParameter("passWord"), request.getParameter("name")); //添加之前判断用户名是否在库中存在 if(new AdminDaoImpl().findUser(admin.getUserName())){ request.setAttribute("adminMessage", "用户添加失败!用户名已存在"); request.getRequestDispatcher(AdminManageServlet.ADMINADD_PATH).forward(request, response); }else{ //执行dao层添加操作 if(ad.userAdd(admin)){ request.setAttribute("adminMessage", "用户添加成功!"); adminList(request, response);//通过servlet中listUser跳到用户列表 }else{ request.setAttribute("adminMessage", "用户添加失败!"); request.getRequestDispatcher(AdminManageServlet.ADMINADD_PATH).forward(request, response); } } } //更新用户信息 private void adminUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Admin admin=new Admin(Integer.parseInt(request.getParameter("id")), request.getParameter("passWord"), request.getParameter("name") ); AdminDao ad=new AdminDaoImpl(); if(ad.userUpdate(admin)) { request.setAttribute("adminMessage", "用户更新成功"); adminList(request, response);//通过servlet中listUser跳到用户列表 }else { //更新失败跳转到修改页面 request.setAttribute("adminMessage", "用户更新失败"); request.setAttribute("adminInfo", ad.findUser(Integer.valueOf(admin.getId())));//这里回去是Admin对象 request.getRequestDispatcher(AdminManageServlet.ADMINEDIT_PATH).forward(request, response); } } //修改用户 private void adminEdit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id=request.getParameter("id"); AdminDao ad=new AdminDaoImpl(); request.setAttribute("adminInfo",ad.findUser(Integer.valueOf(id)));//这里回去是Admin对象 request.getRequestDispatcher(AdminManageServlet.ADMINEDIT_PATH).forward(request, response); } //删除用户 private void adminDel(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { int id=Integer.parseInt(request.getParameter("id")); AdminDao ad=new AdminDaoImpl(); if(ad.delUser(id)) { request.setAttribute("adminMessage", "用户已删除"); }else { request.setAttribute("adminMessage", "用户删除失败"); } //用户删除成功失败都跳转到用户列表页面 adminList(request, response);//通过servlet中listUser跳到用户列表 } //批量删除 private void adminBatDel(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String ids=request.getParameter("ids"); AdminDao ad=new AdminDaoImpl(); if(ad.batDelUser(ids)) { request.setAttribute("adminMessage", "用户已批量删除"); }else { request.setAttribute("adminMessage", "用户批量删除失败"); } //用户删除成功失败都跳转到用户列表页面 adminList(request, response);//通过servlet中listUser跳到用户列表 } //ajax判断用户名(param为接收的用户名) private void adminFind(HttpServletRequest request, HttpServletResponse response) throws IOException { String userName=request.getParameter("param"); AdminDao ad=new AdminDaoImpl(); //这里实例化json对象需要导入6个jar包( //commons-lang-2.4.jar ,commons-collections-3.2.1.jar,commons-beanutils-1.8.3.jar //json-lib-2.4-jdk15.jar ,ezmorph-1.0.6.jar ,commons-logging-1.1.3.jar) JSONObject json=new JSONObject(); if(ad.findUser(userName)){ json.put("info", "用户名已存在"); json.put("status", "n"); }else{ json.put("info", "用户名可以使用"); json.put("status", "y"); } response.getWriter().write(json.toString()); } } package dao.impl; import java.util.ArrayList; import java.util.List; import java.util.Map; import bean.Admin; import bean.PageBean; import dao.AdminDao; import util.DateUtil; import util.DbUtil; public class AdminDaoImpl implements AdminDao { /** * @param user 传递要登录的用户信息 * @return 返回一个boolean值,true登录成功,false失败 */ @Override public boolean userLogin(Admin admin) { boolean flag=false; String sql="select * from s_admin where userName=? and passWord=?"; String sql2="update s_admin set lastLoginTime=? where id=?"; List<Map<String,Object>> list=DbUtil.executeQuery(sql, admin.getUserName(),admin.getPassWord()); if(list.size()>0){ flag=true; //这里需要name值传入对象中 admin.setName((String)list.get(0).get("name")); //通过登录成功用户的id更新最后登录时间 DbUtil.excuteUpdate(sql2, DateUtil.getTimestamp(),list.get(0).get("id")); } return flag; } /** * @param pageBean 传递分页对象 * @return 返回一个list集合,这里是通过limit分页查询的结果 */ @Override public List<Admin> userList(PageBean pageBean) { List<Admin> lu=new ArrayList<>(); List<Map<String, Object>> list=new ArrayList<Map<String,Object>>(); String sql="select * from s_admin limit ?,?"; list=DbUtil.executeQuery(sql,(pageBean.getCurPage()-1)*pageBean.getMaxSize(),pageBean.getMaxSize()); if(list.size()>0) { for(Map<String,Object> map:list) { Admin u=new Admin(map); lu.add(u); } } return lu; } /** * @param user 要增加的用户对象 * @return 返回一个boolean true用户增加成功 false用户增加失败 */ @Override public boolean userAdd(Admin user) { String sql="insert into s_admin(userName,password,name) values(?,?,?)"; int i= DbUtil.excuteUpdate(sql, user.getUserName(),user.getPassWord(),user.getName()); return i>0?true:false; } /** * @param id 根据id查找一个用户信息 * @return 返回一个list用户信息集合 */ //查找指定id用户信息 @Override public Admin findUser(Integer id) { String sql="select * from s_admin where id=?"; Admin admin=null; List<Map<String,Object>> list=DbUtil.executeQuery(sql, id); if(list.size()>0) { admin=new Admin(list.get(0)); } return admin; } //查找用户名是否存在true存在 @Override public boolean findUser(String userName) { String sql="select * from s_admin where userName=?"; List<Map<String,Object>> list=DbUtil.executeQuery(sql, userName); return list.size()>0?true:false; } /** * * @param admin 更新用户,根据传过来的id * @return boolean */ @Override public boolean userUpdate(Admin admin) { String sql="update s_admin set password=? , name=? where id =?"; int i=DbUtil.excuteUpdate(sql, admin.getPassWord(),admin.getName(),admin.getId()); return i>0?true:false; } /** * @param id 要删除的用户id * @return 返回boolean true删除用户成功,false删除用户失败 */ @Override public boolean delUser(int id) { String sql="delete from s_admin where id=?"; int i=DbUtil.excuteUpdate(sql, id); return i>0?true:false; } /** * @param ids 要批量删除id组的字符串 */ @Override public boolean batDelUser(String ids) { String sql="delete from s_admin where id in ("+ids+")"; int i=DbUtil.excuteUpdate(sql); return i>0?true:false; } @Override public long cakeReadCount() { long count=0; String sql="select count(*) as count from s_admin"; List<Map<String, Object>> lm=DbUtil.executeQuery(sql); if(lm.size()>0){ count=(long) lm.get(0).get("count"); } return count; } }