All Projects → danerlt → ShopSystem

danerlt / ShopSystem

Licence: other
小型电子商城网站

Programming Languages

java
68154 projects - #9 most used programming language
CSS
56736 projects
javascript
184084 projects - #8 most used programming language

ShopSystem

小型电子商城网站

本项目已废弃

更新于2018-08-15

需求分析

根据需求,本系统本次主要完成以下功能 1.用户功能区 用户注册,登录,注销; 添加购物车; 查看商品信息; 提交订单功能; 个人信息管理,对个人信息的增,删,改,查 2.管理员功能区 用户管理模块,对用户的增删改查; 分类信息处理模块,对商品分类进行增删改查; 商品模块,对商品进行增删改查 订单处理功能;

目录说明

image_1b5uv0lfjuoe37b1s6k1f8i1cjac.png-27.6kB 其中build是编译后的工程文件。SQL中保存的是数据字典和建表的SQL语句 src是java的源代码,WebContent是存放jsp,js,css,img等的。

src

包的统一前缀都是com.shop。其中dao包下放的是数据库访问层,用来对数据库操作。domain包下存放的是实体,一张表对应一个实体类。filter包下是过滤器,其中包括中文编码的过滤器和用于拦截管理员登录的过滤器。servlet包存放所有的Servlet,其中每一个子包着对应一个实体的Servlet。utils包下面放的是用于连接数据库,对数据库查询和修改的一个工具类DBUtil,连接数据库,设置数据库信息在这个类里面设置。 image_1b5uvcscr11ucvq6fuui3717i1p.png-27.1kB

WebContent

admin文件夹下放的是后台管理的页面,css存放样式表,err下存放出错的jsp页面,如404.jsp和500.jsp,js存放js代码,font存放字体,image存放临时缓存图片,images存放页面背景,图标,跟页面布局有关的图片。img存放商品图片。剩下的jsp文件就是网站前台的页面了。 image_1b5v09arhlt11bg73sb1nsqumv30.png-18kB

前台

  • index.jsp 主页
    image_1b5v0ms7o1do313ae112b108q1ecg3d.png-969.3kB
  • register.jsp 注册 image_1b5v0qv9h11715b91qi11nbl1b954n.png-108.1kB
  • login.jsp 登录 这里验证码可以输入可以不输入,后台并没有实现验证。 image_1b5v0ob3591u1hu3ce1192g1jjt3q.png-308.2kB
  • product_info.jsp 商品详情信息 image_1b5v0sd6arlu1r0q1t0g1hi1vs154.png-168.1kB
  • product_list.jsp 所有商品类别 image_1b5v0uu3q1l3m19cf1fii19pl1kcf5u.png-384.2kB
  • product_list_by_kind.jsp 按照分类显示商品信息 image_1b5v0tes41f131gov118k1n251rlf5h.png-623.1kB
  • cart.jsp 购物车 image_1b5v116pg68e1ggr1k3tfsagl87r.png-81.2kB
  • order_list.jsp 订单列表 image_1b5v13qbo14ljenp15aq1m741ubr8o.png-122.4kB
  • order_info.jsp 订单详情信息 image_1b5v152941on1io51m4g1i7gu929l.png-85.1kB

后台

后台登陆必须手动在地址栏输入http://localhost:9090/ShopSystem/admin/login.jsp,默认帐号为root,密码为root.

  • index.jsp 主页 image_1b5v1jc1a1akmoce1rfh116h1ftiav.png-558.1kB
  • login.jsp 管理员登录 image_1b5v1huu010otsd1gte1i061rsvai.png-510.4kB
  • addAdmin.jsp 添加管理员 image_1b5v1kkjvhpep0m689kr71p5bc.png-526.1kB
  • listAdmin.jsp 所有管理员 image_1b5v1mu8k117m1s06ccm153s2aqc9.png-285.7kB
  • editAdmin.jsp 修改管理员 image_1b5v1olla1njmep52s8d5mrb0d3.png-270.1kB
  • queryAdmin.jsp 查询管理员 image_1b5v1ns9i1vm51e4r1ulgk6n1iqpcm.png-267.5kB
  • addKind.jsp 添加商品分类信息 image_1b5v23cjcpvd108ivii79c1ct8fn.png-263.7kB
  • listKind.jsp 所有商品分类信息 image_1b5v22jhp14k1l911gjr145il3afa.png-279.5kB
  • editKind.jsp 修改商品分类信息 image_1b5v243hi4m71eh8e68i97a31g4.png-266.1kB
  • queryKind.jsp 查询分类 image_1b5v260301q9ab4c8ujq6gcnjh.png-266.1kB
  • addProduct.jsp 添加商品 image_1b5v1qm2n164s162o1thp1kmk6a3dg.png-278.5kB
  • listProduct.jsp 所有商品 image_1b5v1s9neqv71a2a1abq18p51b7jed.png-626.7kB

任务list

已完成

  • 用户注册,登录,注销
  • 添加购物车(用户必须登录后才能添加购物车,否则不能添加)
  • 查看商品信息,可以查看所有商品信息,可以安装分类查看商品信息,可以查看商品详细信息。
  • 管理员信息的增删改查
  • 商品分类信息的增删改查

未完成

  • 提交订单功能,订单管理功能,只写好了jsp页面,功能尚未实现。
  • 商品的添加,修改功能(上次图片和日期的转换调试没调试出来)。

总结

从开始写这个课程设计,断断续续写了近两周,但是真正写代码的时间有四天,最开始的构想功能还是比较多比较完善的。写到一半的时候发现可能完不成这么多功能,于是在1月5号的时候开始重构,将原来的14个表,缩减到6个表,将功能也减少了很多。大体上能够运行,但是还有些功能不够完善。记录下写课设遇到的一下问题和解决办法和总结。 1.ajax的使用 开始再注册登录的时候使用到了ajax,实现了ajax异步加载的功能,后来重构时,出现了很多错误,遂将ajax去掉了。

var url = "Register?username="+username;
	var req;
	if(window.XMLHttpRequest){
		req = new XMLHttpRequest();
	}else{
		req = new ActiveXObject(Microsoft.XMLHTTP);
	}
	req.onreadystatechange = function(){
		if(req.readyState==4 && req.status==200){
			var text = req.responseText;
			if(text == "PASS"){
				alert("该用户名以被注册,换一个昵称吧!");
				name.onfacus();
				return false;
			}
		}
	};
	req.open("GET",url,true);
	req.send();

2.mysql数据库中保存图片 mysql并不保存图片源文件,而是保持图片路径。 3.dbutils 将连接数据库,查询,更新数据库封装到DBUtil中,传入sql和Object数据对数据库进行更新。mysql 用户名为root,密码为自己设置的,数据库名为shopsystem

package com.shop.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBUtil {

	private static String driver;
	private static String url;
	private static String username;
	private static String password;
	public Connection conn = null;
	public PreparedStatement pstmt = null;
	public ResultSet rs = null;
    public Statement stmt = null;
	// 通过配置文件设置driver,username,username,password
	static {
		driver = "com.mysql.jdbc.Driver";
		url = "jdbc:mysql://127.0.0.1:3306/shopsystem?useUnicode=true&characterEncoding=utf-8";
	    username = "root";
		password = "";//改为自己设置的密码	
		}

	public DBUtil() {
	}

	/**
	 * 连接数据库
	 * 
	 * @return 数据库连接对象
	 */
	public static Connection getConnection() {
		try {
			Class.forName(driver);
			// 返回连接
			return DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 数据库查询
	 * 
	 * @param sql
	 *            预处理的SQL语句
	 * @param params
	 *            预处理中的SQL语句中的参数
	 * @return 查询后的结果集
	 */
	public ResultSet doQuery(String sql, Object[] params) {
		try {
			conn = DBUtil.getConnection();
			// 获取PreparedStatement对象
			pstmt = conn.prepareStatement(sql);
			// 设置pstmt的参数
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					pstmt.setObject(i + 1, params[i]);
				}
			}
			// 执行查询
			rs = pstmt.executeQuery();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return rs;
	}
    
	/**
	 * 数据库查询
	 * 
	 * @param sql
	 *             处理的SQL语句
	 * @return 查询后的结果集
	 */
	public ResultSet doQuery(String sql) {
		try {
			conn = DBUtil.getConnection();
			// 获取PreparedStatement对象
			stmt = conn.createStatement();
			// 执行查询
			rs = stmt.executeQuery(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return rs;
	}
	
	/**
	 * 执行数据库更新操作(DDL和DML)
	 * 
	 * @param sql
	 *            预处理的SQL语句
	 * @param params
	 *            预处理中的SQL语句中的参数
	 * @return 受影响的行数
	 */
	public int doUpdate(String sql, Object[] params) {
		int n = 0;

		// 取消Connection的自动提交
		try {
			conn = DBUtil.getConnection();
			conn.setAutoCommit(false);
			// 获取PreparedStatement对象
			pstmt = conn.prepareStatement(sql);
			// 设置pstmt的参数
			// 设置pstmt的参数
			if (params != null) {
				for (int i = 0; i < params.length; i++) {
					pstmt.setObject(i + 1, params[i]);
				}
			}
			// 执行更新
			n = pstmt.executeUpdate();
			conn.commit();
		} catch (Exception e) {
			try {
				conn.rollback();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
			e.printStackTrace();
		}
		return n;
	}

	/**
	 * 执行数据库更新操作(DDL和DML)
	 * 
	 * @param sql
	 *            预处理的SQL语句
	 * @return 受影响的行数
	 */
	public int doUpdate(String sql) {
		int n = 0;//受影响的行数
		// 取消Connection的自动提交
		try {
			conn = DBUtil.getConnection();
			conn.setAutoCommit(false);
			// 获取Statement对象
			stmt = conn.createStatement();
			// 执行更新
			n = stmt.executeUpdate(sql);
			conn.commit();
		} catch (Exception e) {
			try {
				conn.rollback();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
			e.printStackTrace();
		}
		return n;
	}
	
	/**
	 * 关闭数据库的连接,释放资源
	 * @param stmt Steatemet对象
	 * @param conn 数据库连接对象
	 * @throws Exception 
	 */
	public void close() {
		if(rs != null){
			try {
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		if (stmt != null) {
			try {
				stmt.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			stmt = null;
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			conn = null;
		}

	}
	
}

4.错误:the servlets named [x] and [y] are both mapped to the url-pattern [/XXXServlet] which is not permitted.

解决办法,删掉Servlet中@WebServlet("/XXXServlet")这行代码

6.mysql和java数据类型的转换 image_1b5v41jid188l9b6q4iark104sp.png-55.6kB 7.jstl 判断对象是否为空 用${not empty ObjectName} 或者${empty ObjectName}

8.应用程序路径:${pageContext.servletContext.contextPath}

9.c:forEace

<c:forEach var="kind" items="${sessionScope.listKind}">				   内容
</c:forEach>

<c:forEach var="indx" begin="1" end="20" step ="1">				   内容
</c:forEach>

10.jstl中list的长度${fn:length(listHotProduct)-1} 11.mysql中查看constarints

SELECT
    constraint_name,
    table_name
FROM
    information_schema.table_constraints
WHERE
    constraint_type = 'FOREIGN KEY'
AND table_schema = DATABASE()
ORDER BY
    constraint_name;
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].