基于Servlet+jsp的商城系统

1 技术介绍

1.1 Bootstrap

Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。 国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap源码进行性能优化而来。

1.2 Jsp

JSP(全称Java Server Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

1.3 Servlet

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。

1.4 Jdbc

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

1.5 MVC

经典MVC模式中,M是指模型,V是视图,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。

MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。

2 概要设计

2.1 数据字典

3.1 用户信息表

字段名数据类型默认值允许非空自动递增备注
user_idint(11)NO用户编号(主键)
uservarchar(15)NO账号
user_namevarchar(50)NO姓名
user_pwdvarchar(20)NO密码
user_sexchar (1)NO性别
add_timetimestampNO注册时间
user_statuschar (1)YNO状态
user_rolechar (1)UNO用户权限

3.2 用户地址表

字段名数据类型默认值允许非空自动递增备注
address_idint(11)NO地址ID
address_provincevarchar(10)NO
address_cityvarchar(10)NO
address_districtvarchar(20)NO
address_describevarchar(50)NO详细地址
user_idint(11)NO用户ID

3.3 订单表

字段名数据类型默认值允许非空自动递增备注
order_idint(11)NO订单ID
add_timetimestampCURRENT_TIMESTAMPNO添加时间
update_timetimestampNULLYES更新时间
user_idint(11)NO用户ID
address_detailsvarchar(100)NULLYES用户地址
order_typeint(11)1NO订单属性

3.4 订单详情表

字段名数据类型默认值允许非空自动递增备注
order_details_idint(11)NO商品详情ID
product_namevarchar(20)NO商品名称
product_numint(11)NO商品数量
product_moneydecimal(8,2)NO商品价格
order_idint(11)NO订单ID

3.5 购物车表

字段名数据类型默认值允许非空自动递增备注
cart_idint(11)NO购物车ID
product_idint(11)NO商品ID
product_numint(11)NO商品数量
user_idint(11)NO用户ID

3.6 分类信息表

字段名数据类型默认值允许非空自动递增备注
category_idint(11)NO分类ID
category_namevarchar(20)NO分类名
字段名数据类型默认值允许非空自动递增备注
product_idint(11)NO商品ID
product_namevarchar(40)NO商品名
product_picvarchar(20)NO商品图片
product_pricedecimal(8,2)NO商品价格
product_describevarchar(100)NO商品描述
category_idint(11)NO分类ID
product_statuschar(1)'Y'NO商品状态

2.2 E-R图

3 文档结构图

文档结构中的SRC文件夹存放着一些核心类的包。其中的servlet层用来匹配请求的,执行对应的业务,去调用service业务层,主要功能在于交互式地浏览和修改数据,生成动态Web内容。Service层为服务层,用来帮助servlet进行提供业务,至于为什么service层要使用接口来定义有以下几点好处:在java中接口是多继承的,而类是单继承的,如果你需要一个类实现多个service,你用接口可以实现,用类定义service就没那么灵活。,需要操作数据库帮忙也就是dao层。Dao(data access object 数据访问对象)层:专门用来操作数据库的 jdbc,查询的数据需要java对象进行存储。DAO层中的Impl包用来实现DAO层中的接口。entity层用来处理java类型和数据表的映射关系。Util是utiliy的缩写,是一个多功能、基于工具的包。如字符串处理、日期处理等,(建立数据库之间的连接),是通用的、与业务无关的,可以独立出来,可供其他项目使用 。

4 关键代码

package servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import entiy.Cart;
import entiy.CartProduct;
import entiy.TUser;
import org.apache.commons.beanutils.BeanUtils;
import service.CartService;
import service.imp.CartServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;


@WebServlet("/CartServlet")
public class CartServlet extends BaseServlet {
    CartService cs = new CartServiceImpl();

    //    添加到购物车
    public void addCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, InvocationTargetException, IllegalAccessException {
//       获取当前对象
        TUser user = (TUser) request.getSession().getAttribute("user");

        Map<String, String[]> map = request.getParameterMap();

        Cart cart = new Cart();

        BeanUtils.populate(cart, map);

        cart.setProductNum(1);

        cart.setUserId(user.getUserId());

        int i = cs.addCart(cart);
        if (i == 0) {
            response.getWriter().print(0);
        } else {
            response.getWriter().print(1);
        }

    }

    public void getCart(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //获取当前登录用户对象
        TUser user = (TUser) request.getSession().getAttribute("user");
        CartProduct cartProduct = new CartProduct();
        cartProduct.setUserId(user.getUserId());
        List<CartProduct> carts = cs.getCart(cartProduct);

        //构建json转换对象
        ObjectMapper om = new ObjectMapper();
        //json输出
        om.writeValue(response.getWriter(), carts);
    }

    public void addAndred(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String num = request.getParameter("num");
        String cid = request.getParameter("cid");
//        System.out.println(num);
//        System.out.println(cid);
        int i = cs.addAndred(num, cid);
//        System.out.println(i);
        if (i == 0) {
            response.getWriter().print(0);
        } else {
            response.getWriter().print(1);
        }
    }

    public void cartDel(HttpServletRequest request, HttpServletResponse response) throws Exception {
        TUser tuser = (TUser) request.getSession().getAttribute("user");
        String id = String.valueOf(tuser.getUserId()) ;
        int i = cs.cartDel(id);
        if (i==0){
            response.getWriter().print(0);
        }else {
            response.getWriter().print(1);
        }

    }
}

5 界面设计

5.1  首页界面

5.2 登录界面

5.3 商品界面

5.4 提交订单界面

5.5 分类管理

5.6 商品管理

5.7用户管理界面

6 联系方式

1522993472@qq.com

zhouxiongwei346@outlook.com

7 下载地址

基于servlet+jsp的在线商城.zip资源-CSDN文库

Bai-YuJing/shopping: 基于Servlet+jsp的在线商城 (github.com)

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值