基于javaweb+mysql的jsp+servlet仿天猫网上商城项目(java+jsp+servlet+mysql+ajax)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的JSP+Servlet仿天猫网上商城项目(java+jsp+servlet+mysql+ajax)
一、项目简述
功能:
前台:
-
用户模块
-
分类模块
-
商品模块
-
购物车模块
-
订单模块
后台:
-
管理员模块
-
分类管理模块
-
商品管理模块
-
订单模块
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: JSP + C3P0+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload等等。
factory.setSizeThreshold(1024 * 1024);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while(iter.hasNext()){
FileItem item = (FileItem) iter.next();
if(!item.isFormField()){
//获取上传文件的输入流
is = item.getInputStream();
} else {
String paramName = item.getFieldName();
String paramValue = item.getString();
paramValue = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
params.put(paramName, paramValue);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return is;
}
}
public class PropertyServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了Property add方法");
Map<String,String> params = new HashMap<>();
InputStream is = super.parseUpload(request, params);
System.out.println(params);
int cid = Integer.parseInt(params.get("cid"));
found = true;
oiid = oi.getId();
break;
}
}
}
// 如果没找到对应的商品,则新建一条订单项
if (!found) {
OrderItem oi = new OrderItem();
oi.setUser(user);
oi.setProduct(p);
oi.setNumber(num);
orderItemDAO.add(oi);
oiid = oi.getId();
}
return "%success";
}
/**
* 更改当前订单项的内容
*
* @param request
* @param response
* @param page
* @return
* @throws UnsupportedEncodingException
*/
public String changeOrderItem(HttpServletRequest request, HttpServletResponse response, Page page) throws UnsupportedEncodingException {
System.out.println("调用了ForeServlet changeOrderItem方法");
User user = (User) request.getSession().getAttribute("user");
if (null == user)
return "%fail";
int pid = Integer.parseInt(request.getParameter("pid"));
int number = Integer.parseInt(request.getParameter("number"));
List<OrderItem> ois = orderItemDAO.listByUser(user.getId());
for (OrderItem oi : ois) {
if (oi.getProduct().getId() == pid) {
oi.setNumber(number);
float total = 0;
for (String strid : oiids) {
int oiid = Integer.parseInt(strid);
OrderItem oi = orderItemDAO.get(oiid);
total += oi.getProduct().getPromotePrice() * oi.getNumber();
ois.add(oi);
}
request.getSession().setAttribute("ois", ois);
request.setAttribute("total", total);
return "buy.jsp";
}
/**
* 购物车
*
* @param request
* @param response
* @param page
* @return
*/
public String cart(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了ForeServlet cart方法");
User user = (User) request.getSession().getAttribute("user");
List<OrderItem> ois = orderItemDAO.listByUser(user.getId());
request.setAttribute("ois", ois);
return "cart.jsp";
}
/**
* 加入购物车
*
* @param request
* @param response
* @param page
* @return
*/
public String addCart(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了ForeServlet addCart方法");
int pid = Integer.parseInt(request.getParameter("pid"));
int num = Integer.parseInt(request.getParameter("num"));
Product p = productDAO.get(pid);
User user = (User) request.getSession().getAttribute("user");
List<OrderItem> ois = orderItemDAO.listByUser(user.getId());
int oiid = 0;
boolean found = false;
// 遍历订单,如果订单已存在对应的产品,就在对应购物车的基础上调整数量
public abstract class BaseBackServlet extends HttpServlet {
/* 添加 */
public abstract String add(HttpServletRequest request, HttpServletResponse response, Page page);
/* 删除 */
public abstract String delete(HttpServletRequest request, HttpServletResponse response, Page page);
/* 更新 */
public abstract String update(HttpServletRequest request, HttpServletResponse response, Page page);
/* 修改 */
public abstract String edit(HttpServletRequest request, HttpServletResponse response, Page page);
/* 显示 */
public abstract String list(HttpServletRequest request, HttpServletResponse response, Page page);
protected CategoryDAO categoryDAO = new CategoryDAO();
protected OrderDAO orderDAO = new OrderDAO();
protected OrderItemDAO orderItemDAO = new OrderItemDAO();
protected ProductDAO productDAO = new ProductDAO();
protected ProductImageDAO productImageDAO = new ProductImageDAO();
protected PropertyDAO propertyDAO = new PropertyDAO();
protected PropertyValueDAO propertyValueDAO = new PropertyValueDAO();
protected ReviewDAO reviewDAO = new ReviewDAO();
Map<String,String> params = new HashMap<>();
InputStream is = super.parseUpload(request, params);
System.out.println(params);
String name = params.get("name");
Category c = new Category();
c.setName(name);
categoryDAO.add(c);
File imageFolder = new File(request.getSession().getServletContext().getRealPath("img/category"));
File file = new File(imageFolder, c.getId() + ".jpg");
try{
if(null != is && 0 != is.available()){
try(
FileOutputStream fos = new FileOutputStream(file);
){
byte[] b = new byte[1024 * 1024];
int length = 0;
while(-1 != (length = is.read(b))){
fos.write(b, 0, length);
}
fos.flush();
//通过以下代码,将文件保存为jsp格式
BufferedImage img = ImageUtil.change2jpg(file);
ImageIO.write(img, "jpg", file);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return "@admin_category_list";
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了category delete方法");
int id = Integer.parseInt(request.getParameter("id"));
categoryDAO.delete(id);
return "@admin_category_list";
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
return "@forealipay?oid=" + order.getId() + "&total=" + total;
}
/**
* 支付界面
*
* @param request
* @param response
* @param page
* @return
*/
public String alipay(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了ForeServlet alipay方法");
return "alipay.jsp";
}
/**
* 支付完成界面
* @param request
* @param response
* @param page
* @return
*/
public String payed(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了ForeServlet payed方法");
int oid = Integer.parseInt(request.getParameter("oid"));
Order order = orderDAO.get(oid);
order.setStatus(OrderDAO.waitDelivery);
order.setPayDate(new Date());
orderDAO.update(order);
request.setAttribute("o", order);
return "payed.jsp";
}
/**
* 我的订单页面
* @param request
* @param response
* @param page
* @return
*/
public String bought(HttpServletRequest request, HttpServletResponse response, Page page) {
"homepage",
"checkLogin",
"register",
"loginAjax",
"login",
"product",
"category",
"search"};
String uri = request.getRequestURI();
uri = StringUtils.remove(uri, contextPath);
if (uri.startsWith("/fore") && !uri.startsWith("/foreServlet")) {
String method = StringUtils.substringAfterLast(uri, "/fore");
if (!Arrays.asList(noNeedAuthPage).contains(method)) {
User user = (User) request.getSession().getAttribute("user");
if (null == user) {
response.sendRedirect("login.jsp");
return;
}
}
}
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
public class BackServletFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
InputStream is = null;
try{
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//设置上传的文件大小限制为10M
factory.setSizeThreshold(1024 * 1024);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while(iter.hasNext()){
FileItem item = (FileItem) iter.next();
if(!item.isFormField()){
//获取上传文件的输入流
is = item.getInputStream();
} else {
String paramName = item.getFieldName();
String paramValue = item.getString();
paramValue = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
params.put(paramName, paramValue);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return is;
}
}
public class PropertyServlet extends BaseBackServlet {
* @return
*/
public String logout(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 ForeServlet logout方法");
request.getSession().removeAttribute("user");
return "@forehome";
}
/**
* 检查用户是否登录
*
* @param request
* @param response
* @param page
* @return
*/
public String checkLogin(HttpServletRequest request, HttpServletResponse response, Page page) {
User user = (User) request.getSession().getAttribute("user");
if (user != null) {
return "%success";
}
return "%fail";
}
/**
* 模态登录框通过 Ajax 方法登录
*
* @param request
* @param response
* @param page
* @return
*/
public String loginAjax(HttpServletRequest request, HttpServletResponse response, Page page) {
String name = request.getParameter("name");
String password = request.getParameter("password");
User user = userDAO.get(name, password);
if (user == null)
return "%fail";
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
String contextPath = req.getSession().getServletContext().getContextPath();
String uri = req.getRequestURI();
//去除uri路径中的项目路径
uri = StringUtils.remove(uri, contextPath);
//判断是否为admin_开头
if(uri.startsWith("/admin_")) {
String servletPath = StringUtils.substringBetween(uri, "_", "_") +
"Servlet";
String method = StringUtils.substringAfterLast(uri, "_");
req.setAttribute("method", method);
req.getRequestDispatcher("/" + servletPath).forward(req, resp);
return;
}
filterChain.doFilter(req, resp);
}
@Override
public void destroy() {
}
}
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
System.out.println(name);
// 判断用户名是否存在
boolean exist = userDAO.isExists(name);
if (exist) {
request.setAttribute("msg", "用户名已经被使用");
return "register.jsp";
}
User user = new User();
user.setName(name);
user.setPassword(password);
System.out.println(user.getName());
System.out.println(user.getPassword());
userDAO.add(user);
return "@registerSuccess.jsp";
}
/**
* 登录
*
* @param request
* @param response
* @param page
* @return
*/
public String login(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 ForeServlet login方法");
Map<String, String> params = new HashMap<>();
InputStream inputStream = super.parseUpload(request, params);
System.out.println(params);
String name = params.get("name");
String password = params.get("password");
// 登录
User user = userDAO.get(name, password);
if (null == user) {
request.setAttribute("msg", "账号密码错误");
return "login.jsp";
}
int id = Integer.parseInt(params.get("id"));
String password = params.get("password");
User user = userDAO.get(id);
user.setPassword(password);
userDAO.update(user);
return "@admin_user_list";
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 UserServlet edit方法");
int id = Integer.parseInt(request.getParameter("id"));
User u = userDAO.get(id);
request.setAttribute("u", u);
return "admin/editUser.jsp";
}
@Override
public String list(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 UserServlet list方法");
List<User> us = userDAO.list(page.getStart(), page.getCount());
int total = userDAO.getTotal();
page.setTotal(total);
request.setAttribute("us", us);
request.setAttribute("page", page);
return "admin/listUser.jsp";
}
}
User user = (User) request.getSession().getAttribute("user");
if (null == user)
return "%fail";
int pid = Integer.parseInt(request.getParameter("pid"));
int number = Integer.parseInt(request.getParameter("number"));
List<OrderItem> ois = orderItemDAO.listByUser(user.getId());
for (OrderItem oi : ois) {
if (oi.getProduct().getId() == pid) {
oi.setNumber(number);
orderItemDAO.update(oi);
break;
}
}
return "%success";
}
/**
* 删除订单项
*
* @param request
* @param response
* @param page
* @return
* @throws UnsupportedEncodingException
*/
public String deleteOrderItem(HttpServletRequest request, HttpServletResponse response, Page page) throws UnsupportedEncodingException {
System.out.println("调用了ForeServlet deleteOrderItem方法");
User user = (User) request.getSession().getAttribute("user");
if (null == user)
return "%fail";
int oiid = Integer.parseInt(request.getParameter("oiid"));
orderItemDAO.delete(oiid);
return "%success";
}
/**
* 创建订单
String method = (String)req.getAttribute("method");
Method m = this.getClass().getMethod(method, HttpServletRequest.class, HttpServletResponse.class, Page.class);
String redirect = m.invoke(this, req, resp, page).toString();
/* 根据方法的返回值,进行相应的客户端、服务端跳转,或仅输出字符串 */
if(redirect.startsWith("@")){
resp.sendRedirect(redirect.substring(1));
} else if(redirect.startsWith("%")){
resp.getWriter().print(redirect.substring(1));
} else {
req.getRequestDispatcher(redirect).forward(req, resp);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public InputStream parseUpload(HttpServletRequest request, Map<String, String> params){
InputStream is = null;
try{
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//设置上传的文件大小限制为10M
factory.setSizeThreshold(1024 * 1024);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while(iter.hasNext()){
FileItem item = (FileItem) iter.next();
if(!item.isFormField()){
//获取上传文件的输入流
is = item.getInputStream();
} else {
String paramName = item.getFieldName();
String paramValue = item.getString();
paramValue = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
params.put(paramName, paramValue);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
public class UserServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 UserServlet add方法");
return null;
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 UserServlet delete方法");
int id = Integer.parseInt(request.getParameter("id"));
userDAO.delete(id);
return "@admin_user_list";
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 UserServlet update方法");
Map<String, String> params = new HashMap<>();
InputStream is = super.parseUpload(request, params);
System.out.println(params);
int id = Integer.parseInt(params.get("id"));
String password = params.get("password");
User user = userDAO.get(id);
user.setPassword(password);
userDAO.update(user);
return "@admin_user_list";
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 UserServlet edit方法");
int id = Integer.parseInt(request.getParameter("id"));
User u = userDAO.get(id);
request.setAttribute("u", u);
String uri = request.getRequestURI();
// 去除uri路径中的项目路径
uri = StringUtils.remove(uri, contextPath);
// 判断是否以/fore开头
if(uri.startsWith("/fore") && !uri.startsWith("/foreServlet")) {
String method = StringUtils.substringAfterLast(uri, "/fore");
request.setAttribute("method", method);
request.getRequestDispatcher("/foreServlet").forward(request, response);
return;
}
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
public class UserServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 UserServlet add方法");
return null;
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了 UserServlet delete方法");
int id = Integer.parseInt(request.getParameter("id"));
userDAO.delete(id);
return "@admin_user_list";
}
p.setCategory(c);
p.setName(name);
propertyDAO.add(p);
return "@admin_property_list?cid=" + p.getCategory().getId();
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了Property delete方法");
int id = Integer.parseInt(request.getParameter("id"));
Property p = propertyDAO.get(id);
propertyDAO.delete(id);
return "@admin_property_list?cid=" + p.getCategory().getId();
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了Property update方法");
Map<String,String> params = new HashMap<>();
InputStream is = super.parseUpload(request, params);
System.out.println(params);
int cid = Integer.parseInt(params.get("cid"));
Category c = categoryDAO.get(cid);
int id = Integer.parseInt(params.get("id"));
String name = params.get("name");
Property p = new Property();
p.setId(id);
p.setName(name);
p.setCategory(c);
propertyDAO.update(p);
return "@admin_property_list?cid=" + p.getCategory().getId();
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("调用了Property edit方法");
int id = Integer.parseInt(request.getParameter("id"));
Property p = propertyDAO.get(id);
request.setAttribute("p", p);
return "admin/editProperty.jsp";
}
// 根据反射后的结果,执行相应的操作
if(redirect.startsWith("@")) {
resp.sendRedirect(redirect.substring(1));
} else if(redirect.startsWith("%")) {
resp.getWriter().print(redirect.substring(1));
} else {
req.getRequestDispatcher(redirect).forward(req, resp);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public InputStream parseUpload(HttpServletRequest request, Map<String, String> params){
InputStream is = null;
try{
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//设置上传的文件大小限制为10M
factory.setSizeThreshold(1024 * 1024);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while(iter.hasNext()){
FileItem item = (FileItem) iter.next();
if(!item.isFormField()){
//获取上传文件的输入流
is = item.getInputStream();
} else {
String paramName = item.getFieldName();
String paramValue = item.getString();
paramValue = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
params.put(paramName, paramValue);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return is;
}
}