基于javaweb+mysql的jsp+servlet网上商城系统(java+jsp+servlert+mysql+ajax)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的JSP+Servlet网上商城系统(java+jsp+servlert+mysql+ajax)
注意:该项目,前台用户只有立即购买,没有购物车管理的功能
一、项目简述(+需求文档+PPT)
功能: 主页显示热销商品;所有商品展示,可进行商品搜索;点 击商品进入商品详情页,显示库存,具有立即购买功能,可增减购买商品数量亦可手动输入(同时验证 库存),热销商品展示。立即购买进入确认订单页面,可选 择已经添加的地址,亦可新增地址。(同时验证库存),可 选择购买哪些商品,可删除不需要的商品。点击结算进入 确认订单页面,确认后提交订单,订单重复提交给予响 应,库存不足或商品下架给予响应。后台管理:(修改密码 等),商品管理(商品批量添加、上下架、库存维护等), 订单管理。
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe ( IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: JSP + C3P0+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload等等。
user.setPhone(req.getParameter("phoneNum"));
user.setRole("ordinaryUser");
int d = service.addUser(user);
try {
if (d > 0) {
JSONResult ok = JSONResult.ok();
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
} else {
JSONResult error = JSONResult.errorMsg("注册失败");
resp.getWriter().println(JsonUtil.javaObjectToJson(error));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 退出登录
*/
public void logout(HttpServletRequest req, HttpServletResponse resp) {
req.getSession().removeAttribute("user");
try {
resp.sendRedirect("index.jsp");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 检查旧密码是否正确 ,在修改密码操作时使用
* @throws IOException
*/
public void checkOldPassword(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//设置请求编码格式:
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
User user = (User) req.getSession().getAttribute("user");
String oldPassword = service.getPasswordById(user.getId());
System.out.println("旧密码:"+oldPassword);
String password = req.getParameter("password");
System.out.println("旧密码验证:"+password);
try {
if (!oldPassword.equals(password)) {
JSONResult errorMsg = JSONResult.errorMsg("原始密码错误,请重新输入");
resp.getWriter().println(JsonUtil.javaObjectToJson(errorMsg));
} else {
JSONResult ok = JSONResult.ok();
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
}
} catch (IOException e) {
e.printStackTrace();
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
//自定义request对象
class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
private boolean hasEncode;
public MyRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public Map getParameterMap() {
// 先获得请求方式
String method = request.getMethod();
if (method.equalsIgnoreCase("post")) {
// post请求
try {
// 处理post乱码
request.setCharacterEncoding("utf-8");
return request.getParameterMap();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else if (method.equalsIgnoreCase("get")) {
// get请求
Map<String, String[]> parameterMap = request.getParameterMap();
if (!hasEncode) {
for (String parameterName : parameterMap.keySet()) {
String[] values = parameterMap.get(parameterName);
if (values != null) {
for (int i = 0; i < values.length; i++) {
try {
// 处理get乱码
values[i] = new String(values[i]
.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
/**
* 验证嘛生成工具类
*
*/
@WebServlet("/checkImg")
public class CheckImgServlet extends HttpServlet {
//验证码 由基础的 字母和数字组成
static String baseNumLetter = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 禁止缓存
// response.setHeader("Cache-Control", "no-cache");
// response.setHeader("Pragma", "no-cache");
// response.setDateHeader("Expires", -1);
int width = 120;
int height = 30;
// 步骤一 绘制一张内存中图片
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 步骤二 图片绘制背景颜色 ---通过绘图对象
Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔
// 绘制任何图形之前 都必须指定一个颜色
graphics.setColor(getRandColor(200, 250));
graphics.fillRect(0, 0, width, height);
// 步骤三 绘制边框
graphics.setColor(Color.WHITE);
graphics.drawRect(0, 0, width - 1, height - 1);
// 步骤四 四个随机数字
// 处理get乱码
values[i] = new String(values[i]
.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
hasEncode = true;
}
return parameterMap;
}
return super.getParameterMap();
}
@Override
public String getParameter(String name) {
Map<String, String[]> parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
if (values == null) {
return null;
}
return values[0];
}
@Override
public String[] getParameterValues(String name) {
Map<String, String[]> parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
return values;
}
}
for (String parameterName : parameterMap.keySet()) {
String[] values = parameterMap.get(parameterName);
if (values != null) {
for (int i = 0; i < values.length; i++) {
try {
// 处理get乱码
values[i] = new String(values[i]
.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
hasEncode = true;
}
return parameterMap;
}
return super.getParameterMap();
}
@Override
public String getParameter(String name) {
Map<String, String[]> parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
if (values == null) {
return null;
}
return values[0];
}
@Override
public String[] getParameterValues(String name) {
Map<String, String[]> parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
return values;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@WebServlet("/backstage_userServlet")
public class UserServlet extends HttpServlet{
UserService service = new UserService();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
switch(action) {
case "login":login(req, resp);break;
case "modifyPassword":modifyPassword(req, resp);break;
case "checkOldPassword":checkOldPassword(req, resp);break;
case "afterModifyPassword":afterModifyPassword(req, resp);break;
case "logout":logout(req, resp);break;
}
}
/**
* 用户登录
* @throws IOException
*/
public void login(HttpServletRequest req, HttpServletResponse resp) throws IOException {
public void deleteGoods(HttpServletRequest req,HttpServletResponse resp) throws IOException {
//设置请求编码格式:
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
int id = Integer.parseInt(req.getParameter("id"));
int d = service.deleteGoodsById(id);
try {
if(d>0) {
JSONResult ok = JSONResult.ok();
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
}else {
JSONResult errorMsg = JSONResult.errorMsg("删除失败,请重试");
resp.getWriter().println(JsonUtil.javaObjectToJson(errorMsg));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
req.setAttribute("goodsList", allGoods);
try {
req.getRequestDispatcher("/backstage/tgls/goodsManage/goods_list.jsp").forward(req, resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @throws IOException
* 根据商品名查询商品
* @param req
* @param resp
* @throws
*/
public void getGoodsListByName(HttpServletRequest req,HttpServletResponse resp) throws IOException {
//设置请求编码格式:
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
String name = req.getParameter("goodsName");
String type = req.getParameter("type");
Map<String,String> parmas = new HashMap<>();
parmas.put("name", name);
parmas.put("type", type);
List<Goods> list = service.getGoodsByName(parmas);
try {
if(list != null) {
JSONResult ok = JSONResult.ok(list);
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
}else {
JSONResult errorMsg = JSONResult.errorMsg("未获取到任何数据,请重试");
resp.getWriter().println(JsonUtil.javaObjectToJson(errorMsg));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
}
/**
* 向前端页面返回订单数据列表
*/
public void getOrdersList(HttpServletRequest req,HttpServletResponse resp) {
List<Orders> allOrders = service.getAllOrders();
req.setAttribute("ordersList",allOrders);
try {
req.getRequestDispatcher("/backstage/tgls/ordersManage/orders_list.jsp").forward(req, resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据订单名查询商品(注意!类别没改)
* @param req
* @param resp
* @throws IOException
*/
public void getOrdersListByName(HttpServletRequest req,HttpServletResponse resp) throws IOException {
//设置请求编码格式:
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
String name = req.getParameter("OrdersUser");
//String type = req.getParameter("type");
Map<String,String> parmas = new HashMap<>();
parmas.put("name", name);
//parmas.put("type", type);
List<Orders> list = service.getOrdersByName(parmas);
try {
if(list != null) {
JSONResult ok = JSONResult.ok(list);
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
}else {
JSONResult errorMsg = JSONResult.errorMsg("未获取到任何数据,请重试");
resp.getWriter().println(JsonUtil.javaObjectToJson(errorMsg));
}
} catch (Exception e) {
e.printStackTrace();
}
JSONResult errorMsg = JSONResult.errorMsg("修改失败,请重试");
resp.getWriter().println(JsonUtil.javaObjectToJson(errorMsg));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 成功修改密码后,清除session中的数据,并且重新跳转到登录页
* @param req
* @param resp
*/
public void afterModifyPassword(HttpServletRequest req, HttpServletResponse resp) {
req.getSession().removeAttribute("user");
try {
//使用iframe时,要避免这种直接跳转的方式
// 此时只会让内嵌的iframe跳转到登录页,并非整个页面
// resp.sendRedirect("backstage/login.jsp");
PrintWriter writer = resp.getWriter();
writer.print("<html>");
writer.print("<script>");
writer.print("window.open('"+ req.getContextPath()+"/backstage/login.jsp','_top')");
writer.print("</script>");
writer.print("</html>");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 退出登录
*/
public void logout(HttpServletRequest req, HttpServletResponse resp) {
req.getSession().removeAttribute("user");
try {
resp.sendRedirect("backstage/login.jsp");
} catch (IOException e) {
e.printStackTrace();
}
}
}
parmas.put("name", name);
parmas.put("type", type);
List<Goods> list = service.getGoodsByName(parmas);
try {
if(list != null) {
JSONResult ok = JSONResult.ok(list);
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
}else {
JSONResult errorMsg = JSONResult.errorMsg("未获取到任何数据,请重试");
resp.getWriter().println(JsonUtil.javaObjectToJson(errorMsg));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 修改商品时,获取此商品的全部数据,并返回至修改页面
*/
public void toGoodsUpdatePage(HttpServletRequest req,HttpServletResponse resp) {
int id = Integer.parseInt(req.getParameter("id"));
Goods goods = service.getGoodsInfoById(id);
req.setAttribute("goods", goods);
try {
req.getRequestDispatcher("/backstage/tgls/goodsManage/goods_update.jsp").forward(req, resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
// 绘制任何图形之前 都必须指定一个颜色
graphics.setColor(getRandColor(200, 250));
graphics.fillRect(0, 0, width, height);
// 步骤三 绘制边框
graphics.setColor(Color.WHITE);
graphics.drawRect(0, 0, width - 1, height - 1);
// 步骤四 四个随机数字
Graphics2D graphics2d = (Graphics2D) graphics;
// 设置输出字体
graphics2d.setFont(new Font("宋体", Font.BOLD, 28));
Random random = new Random();// 生成随机数
// int index = random.nextInt(words.size());
// String word = words.get(index);// 获得成语
StringBuffer sBuffer = new StringBuffer();
for(int i = 0; i < 4; i++){
int dot = random.nextInt(baseNumLetter.length());
sBuffer.append(baseNumLetter.charAt(dot));
}
String word = sBuffer.toString();
// 定义x坐标
int x = 10;
for (int i = 0; i < word.length(); i++) {
// 随机颜色
graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));
// 旋转 -30 --- 30度
int jiaodu = random.nextInt(60) - 30;
// 换算弧度
double theta = jiaodu * Math.PI / 180;
// 获得字母数字
char c = word.charAt(i);
// 将c 输出到图片
graphics2d.rotate(theta, x, 20);
graphics2d.drawString(String.valueOf(c), x, 20);
graphics2d.rotate(-theta, x, 20);
x += 30;
}
// 将验证码内容保存session
request.getSession().setAttribute("checkcode_session", word.toUpperCase());
// 步骤五 绘制干扰线
graphics.setColor(getRandColor(160, 200));
if (userName != null) {
int d = service.checkUserNameRepeat(userName);
try {
if (d > 0) {
JSONResult error = JSONResult.errorMsg("");
resp.getWriter().println(JsonUtil.javaObjectToJson(error));
} else {
JSONResult ok = JSONResult.ok();
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 用户注册
*
* @param req
* @param resp
* @throws IOException
*/
public void register(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//设置请求编码格式:
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
User user = new User();
user.setUserName(req.getParameter("userName"));
user.setPassword(req.getParameter("password"));
user.setEmail(req.getParameter("email"));
user.setPhone(req.getParameter("phoneNum"));
user.setRole("ordinaryUser");
int d = service.addUser(user);
try {
if (d > 0) {
JSONResult ok = JSONResult.ok();
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
} else {
JSONResult error = JSONResult.errorMsg("注册失败");
resp.getWriter().println(JsonUtil.javaObjectToJson(error));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}
}
/**
* 解决中文乱码问题的过滤器
*/
public class EncodingFilter implements Filter {
public EncodingFilter() { }
public void destroy() {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 处理请求乱码
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletRequest myRequest = new MyRequest(httpServletRequest);
// 处理响应乱码
response.setContentType("text/html;charset=utf-8");
chain.doFilter(myRequest, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
//自定义request对象
class MyRequest extends HttpServletRequestWrapper {
Orders orders = service.getOrdersInfoById(id);
req.setAttribute("orders", orders);
try {
req.getRequestDispatcher("/backstage/tgls/ordersManage/orders_update.jsp").forward(req, resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 修改订单
* @throws IOException
*/
public void updateOrders(HttpServletRequest req,HttpServletResponse resp) throws IOException {
//设置请求编码格式:
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
Orders orders = new Orders();
orders.setId(Integer.parseInt(req.getParameter("id")));
orders.setNumber(req.getParameter("number"));
orders.setUser(req.getParameter("user"));
orders.setTime(req.getParameter("time"));
orders.setName(req.getParameter("name"));
orders.setSex(req.getParameter("sex"));
orders.setAddress(req.getParameter("address"));
orders.setPhone(req.getParameter("phone"));
orders.setAddress_label(req.getParameter("address_label"));
orders.setGoods_id(Integer.parseInt(req.getParameter("goods_id")));
orders.setGoods_num(Integer.parseInt(req.getParameter("goods_num")));
orders.setGoods_status(Integer.parseInt(req.getParameter("goods_status")));
System.out.println(orders);
int d = service.updateOrdersById(orders);
System.out.println(d);
try {
if(d>0) {
JSONResult ok = JSONResult.ok();
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
}else {
JSONResult errorMsg = JSONResult.errorMsg("修改失败,请重试");
resp.getWriter().println(JsonUtil.javaObjectToJson(errorMsg));
}
} catch (Exception e) {
e.printStackTrace();
* @throws
*/
public void getGoodsListByName(HttpServletRequest req,HttpServletResponse resp) throws IOException {
//设置请求编码格式:
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
String name = req.getParameter("goodsName");
String type = req.getParameter("type");
Map<String,String> parmas = new HashMap<>();
parmas.put("name", name);
parmas.put("type", type);
List<Goods> list = service.getGoodsByName(parmas);
try {
if(list != null) {
JSONResult ok = JSONResult.ok(list);
resp.getWriter().println(JsonUtil.javaObjectToJson(ok));
}else {
JSONResult errorMsg = JSONResult.errorMsg("未获取到任何数据,请重试");
resp.getWriter().println(JsonUtil.javaObjectToJson(errorMsg));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 修改商品时,获取此商品的全部数据,并返回至修改页面
*/
public void toGoodsUpdatePage(HttpServletRequest req,HttpServletResponse resp) {
int id = Integer.parseInt(req.getParameter("id"));
Goods goods = service.getGoodsInfoById(id);
req.setAttribute("goods", goods);
try {
@WebServlet("/backstage_goodsServlet")
public class GoodsServlet extends HttpServlet{
GoodsService service = new GoodsService();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
switch(action) {
case "addGoods":addGoods(req,resp);break;
case "getGoodsList":getGoodsList(req,resp);break;
case "getGoodsListByName":getGoodsListByName(req,resp);break;
case "deleteGoods":deleteGoods(req,resp);break;
case "toGoodsUpdatePage":toGoodsUpdatePage(req,resp);break;
case "updateGoods":updateGoods(req,resp);break;
case "upGoodsImage":upGoodsImage(req,resp);break;
case "fastbuy":sendOrder(req,resp);break;
}
}
/**
* 提交订单
* @throws IOException
*/
public void sendOrder(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//设置请求编码格式:
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");