Java Web之网上购物系统(注册、登录、浏览商品、添加购物车)

眼看就要期末了,我的专业课也迎来了第二次的期末作业---------《网上购物系统》。虽然老师的意图是在锻炼我们后台的能力,但是想着还是不利用网上的模板,准备自己写,以来别人写的静态页看不懂,再着可以锻炼自己做网页的能力。所以趁有点小进展就想分享自己的作业进展状态。下面是我页面运行的截图。

可能粘贴的图片没有任何的效果可言,下面.jsp字体可以运行你想要的页面效果。

index.jsp

register.jsp

login.jsp

product.jsp

后台代码:

User.java
package cn.edu.aynu.rjxy.bean;
/**
 * 商城用户属性
 * @author Administrator
 *
 */
public class User {
    private String id;
    private String username;
    private String password;
    private String name;
    private String telephone;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTelephone() {
        return telephone;
    }
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

}
Product.java
package cn.edu.aynu.rjxy.bean;
/**
 * 商品属性
 * @author Administrator
 *
 */
public class Product {
    private String id;
    private String name;
    private Double price;
    private String category;
    private int pnum;
    private String imgurl;
    private String description;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Double getPrice() {
        return price;
    }
    public void setPrice(Double price) {
        this.price = price;
    }
    public String getCategory() {
        return category;
    }
    public void setCategory(String category) {
        this.category = category;
    }
    public int getPnum() {
        return pnum;
    }
    public void setPnum(int pnum) {
        this.pnum = pnum;
    }
    public String getImgurl() {
        return imgurl;
    }
    public void setImgurl(String imgurl) {
        this.imgurl = imgurl;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }

}
UserDao.java
package cn.edu.aynu.rjxy.dao;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import cn.edu.aynu.rjxy.bean.User;
import cn.edu.aynu.rjxy.utils.JDBCUtils;

/**
 * 对User表的操作
 * @author Administrator
 *
 */
public class UserDao {
    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    /**
     * 添加用户到user表
     * @throws SQLException
     */
    public void add(User user) throws SQLException{
        String sql = "insert into user(id,username,password) values(?,?,?)";
        qr.update(sql, user.getId(),user.getUsername(),user.getPassword());
    }
    /**
     * 通过用户名查找用户
     * @throws SQLException
     */
    public User findByUsername(String username) throws SQLException{
        String sql = "select * from user where username = ?";
        User user = qr.query(sql, new BeanHandler<User>(User.class),username);
        return user;
    }
}
ProductDao.java
package cn.edu.aynu.rjxy.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.edu.aynu.rjxy.bean.Product;
import cn.edu.aynu.rjxy.utils.JDBCUtils;

/**
 * 对product表进行增删改查
 * @author Administrator
 *
 */
public class ProductDao {
    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
    //查询所有商品
    public List<Product> findAll() throws SQLException{
        String sql = "select * from product";
        List<Product> list = qr.query(sql, new BeanListHandler<Product>(Product.class));
        return list;
    }
    //根据id查找商品
    public Product findProductById(String id) throws SQLException{
        String sql = "select * from product where id=?";
        return qr.query(sql, new BeanHandler<Product>(Product.class),id);
    }
}
UserException
package cn.edu.aynu.rjxy.exception;

public class UserException extends Exception {

    public UserException() {
        super();
    }

    public UserException(String message, Throwable cause) {
        super(message, cause);
    }

    public UserException(String message) {
        super(message);
    }

    public UserException(Throwable cause) {
        super(cause);
    }

}
UserService 
package cn.edu.aynu.rjxy.service;

import java.sql.SQLException;

import cn.edu.aynu.rjxy.bean.User;
import cn.edu.aynu.rjxy.dao.UserDao;
import cn.edu.aynu.rjxy.exception.UserException;

/**
 * 调用dao层的方法
 * @author Administrator
 *
 */
public class UserService {
    private UserDao userDao = new UserDao();
    /**
     * 用户注册
     * 1、检测输入的用户名是否存在,如果存在抛出异常“用户已存在”
     * 2、把输入的用户添加到数据库中的user表
     * @throws UserException
     */
    public void register(User user) throws UserException{
        try {
            //检测用户是否存在
            User u = userDao.findByUsername(user.getUsername());
            //如果存在抛出异常否则添加用户到user表
            if (u != null) {
                throw new UserException("用户已经存在");
            }else{
                userDao.add(user);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 用户登录
     * @throws UserException
     */
    public User login(User user) throws UserException{
        try {
            //根据用户名查询user表得到user对象u
            User u = userDao.findByUsername(user.getUsername());
            /**
             * 如果u为null,说明用户不存在,抛出异常,显示用户不存在
             * 否则说明用户存在,检测u对象中的密码和用户输入的面貌是否一致
             * 如果一致,返回查询到的u否则抛出异常,显示密码错误
             */
                if(u == null){
                    throw new UserException("用户名不存在");
                }
                //查询到的用户密码和用户名输入的密码不一致
                if(!u.getPassword().equals(user.getPassword())){
                    throw new UserException("密码错误");
                }
                return u;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }
}
ProductService 
package cn.edu.aynu.rjxy.service;

import java.sql.SQLException;
import java.util.List;

import cn.edu.aynu.rjxy.bean.Product;
import cn.edu.aynu.rjxy.dao.ProductDao;

/**
 * 调用ProductDao的方法
 * @author Administrator
 *
 */
public class ProductService {
    private ProductDao pDao = new ProductDao();
    //查询所有商品
    public List<Product> findAll(){
        try {
            return pDao.findAll();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    //查看某一商品
    public Product findById(String id){
        try {
            return pDao.findProductById(id);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
UserServlet 
package cn.edu.aynu.rjxy.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.edu.aynu.rjxy.bean.User;
import cn.edu.aynu.rjxy.exception.UserException;
import cn.edu.aynu.rjxy.service.UserService;
import cn.edu.aynu.rjxy.utils.CommonsUtils;
/**
 * 调用UserService里面的方法
 * @author Administrator
 *
 */
public class UserServlet extends HttpServlet {

    private UserService userService = new UserService();
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //处理中文乱码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //获取隐藏字段method的值,并把它转换为int型
        int method = Integer.parseInt(request.getParameter("method"));

        switch (method) {
        case 1:    this.register(request, response);
                break;
        case 2:    this.login(request, response);
                break;

        }
    }
    public void register(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        /**
         * 1、将注册表单中的用户信息封装到user对象中
         * 2、将获取的UUID值作为user对象的id
         * 3、注册,如果发生异常,就到register.jsp页面上显示:用户已存在
         *           如果成功,显示注册成功,3秒后就跳转到index.jsp页面。
         */
        User user = CommonsUtils.toBean(request.getParameterMap(), User.class);
        user.setId(CommonsUtils.uuid());
        try {
            userService.register(user);
            request.setAttribute("msg", "注册成功");
            request.getRequestDispatcher("/jsp/index.jsp").forward(request, response);
        } catch (UserException e) {
            request.setAttribute("msg", e.getMessage());
            //将用户在注册表单中输入的信息保存在request域中,请求转发的register.jsp,目的回显
            request.setAttribute("user", user);
            request.getRequestDispatcher("/jsp/register.jsp").forward(request, response);
        }
    }

    public void login(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        /**
         * 1、将用户登录表单中的信息封装成User对象
         * 2、登录,如果发生异常,就转发到login.jsp页面,显示:异常信息
         *          如果成功,就将查询到的user对象u,存放到session域中
         *          然后转发到shopping.jsp页面,显示:欢迎用户登录
         */
        User user = CommonsUtils.toBean(request.getParameterMap(), User.class);
        System.out.println(user+"-------->");
         try {
            User u = userService.login(user);
            System.out.println(u+">>>>");
            //将u存放到session域中
            request.getSession().setAttribute("user", u);
            request.getRequestDispatcher("/jsp/index.jsp").forward(request, response);
        } catch (UserException e) {
            request.setAttribute("msg", e.getMessage());
            request.setAttribute("user", user); //回显
            request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);
        }
    }
}
ProductServlet 
package cn.edu.aynu.rjxy.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.edu.aynu.rjxy.bean.Product;
import cn.edu.aynu.rjxy.service.ProductService;
/**
 * 调用ProductService的方法
 * @author Administrator
 *
 */
public class ProductServlet extends HttpServlet {
    private ProductService ps = new ProductService();
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //处理中文乱码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //获取隐藏字段method的值,并把它转换为int型
        int method = Integer.parseInt(request.getParameter("method"));

        switch (method) {
        case 1:    this.findAll(request, response);
                break;
        case 2:    this.addCart(request, response);
                break;

        }

    }
    //处理查询所有商品的请求
    public void findAll(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        List<Product> list = ps.findAll();
        request.setAttribute("listProduct", list);
        //通过请求转发将商品信息显示在product.jsp页面上
        request.getRequestDispatcher("/jsp/product.jsp").forward(request, response);
}
    //处理添加购物车的请求
    public void addCart(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        //获取商品的id
        String id = request.getParameter("id");
        //得到商品
        Product p = ps.findById(id);
        //购物车是保存在session中
        HttpSession session = request.getSession();
        //从session中拿到购物车
        Map<Product,Integer> cart = (Map<Product, Integer>) session.getAttribute("cart");
        //如果cart不存在,就创建购物车
        if (cart == null) {
            cart = new HashMap<Product,Integer>();
        }
        /**
         * 遍历Map中的所有key也就是商品对象,如果发现有的商品的id和
         * 即将加入购物车的id相同,就在原来的数量上+1
         */
        Iterator<Product> it = cart.keySet().iterator();
        boolean f = true;
        while (it.hasNext()) {
            Product pp = (Product)it.next();
            if (pp.getId().equals(p.getId())) {
                cart.put(pp, cart.get(pp)+1);
                f = false;
            }
        }
        //如果没有发现购物车原来相同的商品,就直接加入
        if (f) {
            cart.put(p, 1);
        }
        //将cart放入session
        session.setAttribute("cart", cart);
        //重定向
        response.sendRedirect("jsp/cart.jsp");

}

}
CommonsUtils
package cn.edu.aynu.rjxy.utils;

import java.util.Map;
import java.util.UUID;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;

/**
 * 提供UUID,实现表单数据封装到bean中
 * @author Administrator
 *
 */
public class CommonsUtils {
    /**
     * 返回一个UUID
     * @return
     */
    public static String uuid(){
        return UUID.randomUUID().toString().replace("-", "").toUpperCase();

    }

    /**
     * 把表单数据封装到bean中
     */
    public static <T> T toBean(Map data, Class<T> clazz){
        try{
            T bean = clazz.newInstance();
            BeanUtils.populate(bean, data);
            return bean;
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

JDBCUtils

package cn.edu.aynu.rjxy.utils;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 创建数据库连接池
 * @author Administrator
 *
 */
public class JDBCUtils {
    //读取的是C3P0-config默认配置创建数据库连接池对象
    private static DataSource ds = new ComboPooledDataSource();
    //获取数据库连接池对象
    public static DataSource getDataSource(){
        return ds;
    }
    //从池中获取连接
    public static Connection getConnection() throws SQLException{
        return ds.getConnection();
    }
}

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置,当使用ComboPooledDataSource无参构造器时,使用的就是这个配置 -->
    <default-config>
        <!-- 基本配置 -->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <!-- 每次增量,当需要创建Connection对象时,一次创建几个 -->
        <property name="acquireIncrement">3</property>
        <!-- 当创建池对象后,池中应该有几个Connection对象 -->
        <property name="initialPoolSize">10</property>
        <!-- 池中最少Connection个数,如果少于这个值,就会创建Connection -->
        <property name="minPoolSize">2</property>
        <!-- 池中最大连接个数 -->
        <property name="maxPoolSize">10</property>
    </default-config>
</c3p0-config>
时间: 2024-10-07 09:50:13

Java Web之网上购物系统(注册、登录、浏览商品、添加购物车)的相关文章

Java小项目之:校园注册登录系统!

相信很多学校都有自己的网站,而且还有学生课表成绩查询的系统,和教师端的操作系统.今天教大家做一个简单的注册登录系统! 代码展示: package com.entity; public class Teacher { private int id; private String name; private String sex; private int age; public Teacher(){ super(); } public Teacher(int id, String name) { s

java web简易网上书店项目系列,使用MVC模式(servlet+jstl+dbutils),开篇

一. 针对很多java web初学者入门困难的问题,笔者利用一个小型web项目,一步一步的展示java web开发方法,每一个章节引入一些java web开发的重点知识,让同学们可以将java web开发的知识点串联起来,学会综合运用. 对于初学者而言,代码示例是最好的教材,可能一遍看不懂,就多看几遍,相关知识点,如果本教程介绍的清楚的,请自行百度相关知识,或请教师友. 本项目采用的技术栈为: 0.简单html页面,无css,重在揭示servlet和数据库访问技巧 1.servlet 2.jsp

ecshop二次开发 购物时为每件商品添加备注信息的修改方法

目标: 用户在选购商品加入购物车前可以为商品添加备注信息 加入购物车后可以在购物车查看备注信息 店主在查看订单时可以看到用户为商品添加的备注信息 用户在个人中心中可以看到商品的备注信息 目标一: 打开ecshop/goods.php,搜索"display"可以看到这句: $smarty->display('goods.dwt', $cache_id); 打开模板目录下的goods.dwt,搜索"<!-- {* 结束循环可选属性 *} -->",在这

JavaWeb学习记录(十四)——商城购物之字符串拼接实现最近浏览商品和购物车的功能

一.字符串拼接的工具类 package blank.util; import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;import java.util.Vector;import java.util.Map.Entry; public class StringUtil {        public static String jointStr(String sid

网上图书商城项目学习笔记-013 添加购物车及我的购物车

一.流程分析 1.购物车模块 2.我的购物车分析 3.添加条目到购物车 二.代码 1.view层 (1)top.jsp 1 <a href="<c:url value='/CartItemServlet?method=myCart'/>" target="body">我的购物车</a> (2)desc.jsp 1 <form id="form1" action="<c:url value=

java web多组件协作实现用户登录验证

实现步骤: 1.创建用户登录提交界面 2.创建处理用户登录请求servlet组件Main 3.创建代表登录成功响应的servlet的组件LoginSuccess 4.创建代表登录失败响应的servlet组件LoginFail [1代码login.html] <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&g

asp008网上购物系统access

目录 摘 要: 1 Abstract: 2 目录 3 第一章 概  述 1 1.1  系统研究对象 1 1.2  系统特点 1 1.3  系统研究内容 1 1.3.1 基本功能 1 1.3.2  高级功能 2 第二章   开发方法 3 2.1 系统运行环境配置 3 2.2  ASP简介 3 2.2.1 ASP的使用环境 4 2.2.2 配置Microsoft IIS 4 2.3  动态网页开发工具Dreamweaver MX简介 5 2.4  系统数据库介绍 6 2.4.1 数据库的概念 6 2

基于JAVA WEB 的健身平台系统

@ 目录 开发环境 功能需求分析 业务流程分析 数据流分析 用户实体类 项目部分截图 项目总结 开发环境 操作系统:Windows 10 开发环境:MyEclipse 数据库: MYSQL 5.6 主要技术:SSH + Mysql + Easy UI + 分页 + JSP 开发环境不全的可以 点击此处 查找[Java 开发工具] 进行自由下载 功能需求分析 本系统设计为前台页面和后台管理. 业务流程分析 详见 论文 数据流分析 详见 论文 用户实体类 详见 论文 项目部分截图 项目总结 比较合适

JAVA SSM 网站 网上订餐系统 毕业设计 从0开发

原文地址:https://www.cnblogs.com/smartin/p/12178931.html