一、数据库建立

分析以及创建数据库

-- 创建数据库
drop database if exists `store_40`;
create database `store_40`;
-- 使用数据库
use store_40;-- 1.1 创建用户表
CREATE TABLE `user` (`uid` varchar(32) NOT NULL,  #用户编号`username` varchar(20) DEFAULT NULL,       #用户名`password` varchar(20) DEFAULT NULL,      #密码`name` varchar(20) DEFAULT NULL,           #昵称`email` varchar(30) DEFAULT NULL,          #电子邮箱`telephone` varchar(20) DEFAULT NULL,        #电话`birthday` date DEFAULT NULL,              #生日`sex` varchar(10) DEFAULT NULL,            #性别`state` int(11) DEFAULT 0,             #状态:0=未激活,1=已激活`code` varchar(64) DEFAULT NULL,           #激活码PRIMARY KEY (`uid`)
) ;
-- 1.2 初始化用户默认数据
INSERT INTO `user` VALUES ('373eb242933b4f5ca3bd43503c34668b','ccc','ccc','aaa','bbb@store.com','15723689921','2015-11-04','男',0,'9782f3e837ff422b9aee8b6381ccf927bdd9d2ced10d48f4ba4b9f187edf7738'),('3ca76a75e4f64db2bacd0974acc7c897','bb','bb','张三','bbb@store.com','15723689921','1990-02-01','男',0,'1258e96181a9457987928954825189000bae305094a042d6bd9d2d35674684e6'),('62145f6e66ea4f5cbe7b6f6b954917d3','cc','cc','张三','bbb@store.com','15723689921','2015-11-03','男',0,'19f100aa81184c03951c4b840a725b6a98097aa1106a4a38ba1c29f1a496c231'),('c95b15a864334adab3d5bb6604c6e1fc','bbb','bbb','老王','bbb@store.com','15712344823','2000-02-01','男',0,'71a3a933353347a4bcacff699e6baa9c950a02f6b84e4f6fb8404ca06febfd6f'),('f55b7d3a352a4f0782c910b2c70f1ea4','aaa','aaa','小王','aaa@store.com','15712344823','2000-02-01','男',1,NULL);-- 2.1 创建分类表
CREATE TABLE `category` (`cid` varchar(32) NOT NULL,`cname` varchar(20) DEFAULT NULL, #分类名称PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 2.2 初始化分类默认数据
INSERT INTO `category` VALUES ('1','手机数码'),('172934bd636d485c98fd2d3d9cccd409','运动户外'),('2','电脑办公'),('3','家具家居'),('4','鞋靴箱包'),('5','图书音像'),('59f56ba6ccb84cb591c66298766b83b5','aaaa'),('6','母婴孕婴'),('afdba41a139b4320a74904485bdb7719','汽车用品');-- 3.1 创建商品表
CREATE TABLE `product` (`pid` varchar(32) NOT NULL,`pname` varchar(50) DEFAULT NULL,      #商品名称`market_price` double DEFAULT NULL,  #市场价`shop_price` double DEFAULT NULL,     #商城价`pimage` varchar(200) DEFAULT NULL,   #商品图片路径`pdate` date DEFAULT NULL,         #上架时间`is_hot` int(11) DEFAULT NULL,       #是否热门:0=不热门,1=热门`pdesc` varchar(255) DEFAULT NULL,   #商品描述`pflag` int(11) DEFAULT 0,           #商品标记:0=未下架(默认值),1=已经下架`cid` varchar(32) DEFAULT NULL,       #分类idPRIMARY KEY (`pid`),KEY `product_fk_0001` (`cid`),CONSTRAINT `product_fk_0001` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 3.2 初始化商品默认数据
INSERT INTO `product` VALUES ('1','适用小米note m4小米4c小米3手机屏幕总成寄修维修单独换外屏触摸',1399,1299,'products/1/c_0001.jpg','2015-11-02',1,'小米 4c 标准版 全网通 白色 移动联通电信4G手机 双卡双待',0,'1'),('10','华为 Ascend Mate7',2699,2599,'products/1/c_0010.jpg','2015-11-02',1,'华为 Ascend Mate7 月光银 移动4G手机 双卡双待双通6英寸高清大屏,纤薄机身,智能超八核,按压式指纹识别!!选择下方“移动老用户4G飞享合约”,无需换号,还有话费每月返还!',0,'1'),('11','vivo X5Pro',2399,2298,'products/1/c_0014.jpg','2015-11-02',1,'移动联通双4G手机 3G运存版 极光白【购机送蓝牙耳机+蓝牙自拍杆】新升级3G运行内存·双2.5D弧面玻璃·眼球识别技术',0,'1'),('12','努比亚(nubia)My 布拉格',1899,1799,'products/1/c_0013.jpg','2015-11-02',0,'努比亚(nubia)My 布拉格 银白 移动联通4G手机 双卡双待【嗨11,下单立减100】金属机身,快速充电!布拉格相机全新体验!',0,'1'),('13','华为 麦芒4',2599,2499,'products/1/c_0012.jpg','2015-11-02',1,'华为 麦芒4 晨曦金 全网通版4G手机 双卡双待金属机身 2.5D弧面屏 指纹解锁 光学防抖',0,'1'),('14','vivo X5M',1899,1799,'products/1/c_0011.jpg','2015-11-02',0,'vivo X5M 移动4G手机 双卡双待 香槟金【购机送蓝牙耳机+蓝牙自拍杆】5.0英寸大屏显示·八核双卡双待·Hi-Fi移动KTV',0,'1'),('15','Apple iPhone 6 (A1586)',4399,4288,'products/1/c_0015.jpg','2015-11-02',1,'Apple iPhone 6 (A1586) 16GB 金色 移动联通电信4G手机长期省才是真的省!点击购机送费版,月月送话费,月月享优惠,畅享4G网络,就在联通4G!',0,'1'),('16','华为 HUAWEI Mate S 臻享版',4200,4087,'products/1/c_0016.jpg','2015-11-03',0,'华为 HUAWEI Mate S 臻享版 手机 极昼金 移动联通双4G(高配)满星评价即返30元话费啦;买就送电源+清水套+创意手机支架;优雅弧屏,mate7升级版',0,'1'),('17','索尼(SONY) E6533 Z3+',4099,3999,'products/1/c_0017.jpg','2015-11-02',0,'索尼(SONY) E6533 Z3+ 双卡双4G手机 防水防尘 涧湖绿索尼z3专业防水 2070万像素 移动联通双4G',0,'1'),('18','HTC One M9+',3599,3499,'products/1/c_0018.jpg','2015-11-02',0,'HTC One M9+(M9pw) 金银汇 移动联通双4G手机5.2英寸,8核CPU,指纹识别,UltraPixel超像素前置相机+2000万/200万后置双镜头相机!降价特卖,惊喜不断!',0,'1'),('19','HTC Desire 826d 32G 臻珠白',1599,1469,'products/1/c_0020.jpg','2015-11-02',1,'后置1300万+UltraPixel超像素前置摄像头+【双】前置扬声器+5.5英寸【1080p】大屏!',0,'1'),('2','中兴 AXON',2899,2699,'products/1/c_0002.jpg','2015-11-05',1,'中兴 AXON 天机 mini 压力屏版 B2015 华尔金 移动联通电信4G 双卡双待',0,'1'),('20','小米 红米2A 增强版 白色',649,549,'products/1/c_0019.jpg','2015-11-02',0,'新增至2GB 内存+16GB容量!4G双卡双待,联芯 4 核 1.5GHz 处理器!',0,'1'),('21','魅族 魅蓝note2 16GB 白色',1099,999,'products/1/c_0021.jpg','2015-11-02',0,'现货速抢,抢完即止!5.5英寸1080P分辨率屏幕,64位八核1.3GHz处理器,1300万像素摄像头,双色温双闪光灯!',0,'1'),('22','三星 Galaxy S5 (G9008W) 闪耀白',2099,1999,'products/1/c_0022.jpg','2015-11-02',1,'5.1英寸全高清炫丽屏,2.5GHz四核处理器,1600万像素',0,'1'),('23','sonim XP7700 4G手机',1799,1699,'products/1/c_0023.jpg','2015-11-09',1,'三防智能手机 移动/联通双4G 安全 黑黄色 双4G美国军工IP69 30天长待机 3米防水防摔 北斗',0,'1'),('24','努比亚(nubia)Z9精英版 金色',3988,3888,'products/1/c_0024.jpg','2015-11-02',1,'移动联通电信4G手机 双卡双待真正的无边框!金色尊贵版!4GB+64GB大内存!',0,'1'),('25','Apple iPhone 6 Plus (A1524) 16GB 金色',5188,4988,'products/1/c_0025.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移动联通电信4G手机 硬货 硬实力',0,'1'),('26','Apple iPhone 6s (A1700) 64G 玫瑰金色',6388,6088,'products/1/c_0026.jpg','2015-11-02',0,'Apple iPhone 6 Plus (A1524) 16GB 金色 移动联通电信4G手机 硬货 硬实力',0,'1'),('27','三星 Galaxy Note5(N9200)32G版',5588,5388,'products/1/c_0027.jpg','2015-11-02',0,'旗舰机型!5.7英寸大屏,4+32G内存!不一样的SPen更优化的浮窗指令!赠无线充电板!',0,'1'),('28','三星 Galaxy S6 Edge+(G9280)32G版 铂光金',5999,5888,'products/1/c_0028.jpg','2015-11-02',0,'赠移动电源+自拍杆+三星OTG金属U盘+无线充电器+透明保护壳',0,'1'),('29','LG G4(H818)陶瓷白 国际版',3018,2978,'products/1/c_0029.jpg','2015-11-02',0,'李敏镐代言,F1.8大光圈1600万后置摄像头,5.5英寸2K屏,3G+32G内存,LG年度旗舰机!',0,'1'),('3','华为荣耀6',1599,1499,'products/1/c_0003.jpg','2015-11-02',0,'荣耀 6 (H60-L01) 3GB内存标准版 黑色 移动4G手机',0,'1'),('30','微软(Microsoft) Lumia 640 LTE DS (RM-1113)',1099,999,'products/1/c_0030.jpg','2015-11-02',0,'微软首款双网双卡双4G手机,5.0英寸高清大屏,双网双卡双4G!',0,'1'),('31','宏碁(acer)ATC705-N50 台式电脑',2399,2299,'products/1/c_0031.jpg','2015-11-02',0,'爆款直降,满千减百,品质宏碁,特惠来袭,何必苦等11.11,早买早便宜!',0,'2'),('32','Apple MacBook Air MJVE2CH/A 13.3英寸',6788,6688,'products/1/c_0032.jpg','2015-11-02',0,'宽屏笔记本电脑 128GB 闪存',0,'2'),('33','联想(ThinkPad) 轻薄系列E450C(20EH0001CD)',4399,4199,'products/1/c_0033.jpg','2015-11-02',0,'联想(ThinkPad) 轻薄系列E450C(20EH0001CD)14英寸笔记本电脑(i5-4210U 4G 500G 2G独显 Win8.1)',0,'2'),('34','联想(Lenovo)小新V3000经典版',4599,4499,'products/1/c_0034.jpg','2015-11-02',0,'14英寸超薄笔记本电脑(i7-5500U 4G 500G+8G SSHD 2G独显 全高清屏)黑色满1000減100,狂减!火力全开,横扫3天!',0,'2'),('35','华硕(ASUS)经典系列R557LI',3799,3699,'products/1/c_0035.jpg','2015-11-02',0,'15.6英寸笔记本电脑(i5-5200U 4G 7200转500G 2G独显 D刻 蓝牙 Win8.1 黑色)',0,'2'),('36','华硕(ASUS)X450J',4599,4399,'products/1/c_0036.jpg','2015-11-02',0,'14英寸笔记本电脑 (i5-4200H 4G 1TB GT940M 2G独显 蓝牙4.0 D刻 Win8.1 黑色)',0,'2'),('37','戴尔(DELL)灵越 飞匣3000系列',3399,3299,'products/1/c_0037.jpg','2015-11-03',0,' Ins14C-4528B 14英寸笔记本(i5-5200U 4G 500G GT820M 2G独显 Win8)黑',0,'2'),('38','惠普(HP)WASD 暗影精灵',5699,5499,'products/1/c_0038.jpg','2015-11-02',0,'15.6英寸游戏笔记本电脑(i5-6300HQ 4G 1TB+128G SSD GTX950M 4G独显 Win10)',0,'2'),('39','Apple 配备 Retina 显示屏的 MacBook',11299,10288,'products/1/c_0039.jpg','2015-11-02',0,'Pro MF840CH/A 13.3英寸宽屏笔记本电脑 256GB 闪存',0,'2'),('4','联想 P1',2199,1999,'products/1/c_0004.jpg','2015-11-02',0,'联想 P1 16G 伯爵金 移动联通4G手机充电5分钟,通话3小时!科技源于超越!品质源于沉淀!5000mAh大电池!高端商务佳配!',0,'1'),('40','机械革命(MECHREVO)MR X6S-M',6799,6599,'products/1/c_0040.jpg','2015-11-02',0,'15.6英寸游戏本(I7-4710MQ 8G 64GSSD+1T GTX960M 2G独显 IPS屏 WIN7)黑色',0,'2'),('41','神舟(HASEE) 战神K660D-i7D2',5699,5499,'products/1/c_0041.jpg','2015-11-02',0,'15.6英寸游戏本(i7-4710MQ 8G 1TB GTX960M 2G独显 1080P)黑色',0,'2'),('42','微星(MSI)GE62 2QC-264XCN',6199,5999,'products/1/c_0042.jpg','2015-11-02',0,'15.6英寸游戏笔记本电脑(i5-4210H 8G 1T GTX960MG DDR5 2G 背光键盘)黑色',0,'2'),('43','雷神(ThundeRobot)G150S',5699,5499,'products/1/c_0043.jpg','2015-11-02',0,'15.6英寸游戏本 ( i7-4710MQ 4G 500G GTX950M 2G独显 包无亮点全高清屏) 金',0,'2'),('44','惠普(HP)轻薄系列 HP',3199,3099,'products/1/c_0044.jpg','2015-11-02',0,'15-r239TX 15.6英寸笔记本电脑(i5-5200U 4G 500G GT820M 2G独显 win8.1)金属灰',0,'2'),('45','未来人类(Terrans Force)T5',10999,9899,'products/1/c_0045.jpg','2015-11-02',0,'15.6英寸游戏本(i7-5700HQ 16G 120G固态+1TB GTX970M 3G GDDR5独显)黑',0,'2'),('46','戴尔(DELL)Vostro 3800-R6308 台式电脑',3299,3199,'products/1/c_0046.jpg','2015-11-02',0,'(i3-4170 4G 500G DVD 三年上门服务 Win7)黑',0,'2'),('47','联想(Lenovo)H3050 台式电脑',5099,4899,'products/1/c_0047.jpg','2015-11-11',0,'(i5-4460 4G 500G GT720 1G独显 DVD 千兆网卡 Win10)23英寸',0,'2'),('48','Apple iPad mini 2 ME279CH/A',2088,1888,'products/1/c_0048.jpg','2015-11-02',0,'(配备 Retina 显示屏 7.9英寸 16G WLAN 机型 银色)',0,'2'),('49','小米(MI)7.9英寸平板',1399,1299,'products/1/c_0049.jpg','2015-11-02',0,'WIFI 64GB(NVIDIA Tegra K1 2.2GHz 2G 64G 2048*1536视网膜屏 800W)白色',0,'2'),('5','摩托罗拉 moto x(x+1)',1799,1699,'products/1/c_0005.jpg','2015-11-01',0,'摩托罗拉 moto x(x+1)(XT1085) 32GB 天然竹 全网通4G手机11月11天!MOTO X震撼特惠来袭!1699元!带你玩转黑科技!天然材质,原生流畅系统!',0,'1'),('50','Apple iPad Air 2 MGLW2CH/A',2399,2299,'products/1/c_0050.jpg','2015-11-12',0,'(9.7英寸 16G WLAN 机型 银色)',0,'2'),('6','魅族 MX5 16GB 银黑色',1899,1799,'products/1/c_0006.jpg','2015-11-02',0,'魅族 MX5 16GB 银黑色 移动联通双4G手机 双卡双待送原厂钢化膜+保护壳+耳机!5.5英寸大屏幕,3G运行内存,2070万+500万像素摄像头!长期省才是真的省!',0,'1'),('7','三星 Galaxy On7',1499,1398,'products/1/c_0007.jpg','2015-11-14',0,'三星 Galaxy On7(G6000)昂小七 金色 全网通4G手机 双卡双待新品火爆抢购中!京东尊享千元良机!5.5英寸高清大屏!1300+500W像素!评价赢30元话费券!',0,'1'),('8','NUU NU5',1288,1190,'products/1/c_0008.jpg','2015-11-02',0,'NUU NU5 16GB 移动联通双4G智能手机 双卡双待 晒单有礼 晨光金香港品牌 2.5D弧度前后钢化玻璃 随机附赠手机套+钢化贴膜 晒单送移动电源+蓝牙耳机',0,'1'),('9','乐视(Letv)乐1pro(X800)',2399,2299,'products/1/c_0009.jpg','2015-11-02',0,'乐视(Letv)乐1pro(X800)64GB 金色 移动联通4G手机 双卡双待乐视生态UI+5.5英寸2K屏+高通8核处理器+4GB运行内存+64GB存储+1300万摄像头!',0,'1');-- 4 创建订单表
CREATE TABLE `orders` (`oid` varchar(32) NOT NULL,`ordertime` datetime DEFAULT NULL,      #下单时间`total` double DEFAULT NULL,             #总价`state` int(11) DEFAULT NULL,              #订单状态:1=未付款;2=已付款,未发货;3=已发货,没收货;4=收货,订单结束`address` varchar(30) DEFAULT NULL,       #收获地址`name` varchar(20) DEFAULT NULL,         #收获人`telephone` varchar(20) DEFAULT NULL,     #收货人电话`uid` varchar(32) DEFAULT NULL,PRIMARY KEY (`oid`),KEY `order_fk_0001` (`uid`),CONSTRAINT `order_fk_0001` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`)
) ;-- 5 创建订单项表
CREATE TABLE `orderitem` (`itemid` varchar(32) NOT NULL,`quantity` int(11) DEFAULT NULL,          #购买数量`total` double DEFAULT NULL,         #小计`pid` varchar(32) DEFAULT NULL,        #购买商品的id`oid` varchar(32) DEFAULT NULL,       #订单项所在订单idPRIMARY KEY (`itemid`),KEY `order_item_fk_0001` (`pid`),KEY `order_item_fk_0002` (`oid`),CONSTRAINT `order_item_fk_0001` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`),CONSTRAINT `order_item_fk_0002` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`)
) ;

二、环境搭建


创建目录结构

导入架包

3、工具类的构建

package cn.itzheng.store.utils;
import javax.servlet.http.Cookie;
public class CookUtils {/*** 通过名称在cookie数组获取指定的cookie* @param name cookie名称* @param cookies  cookie数组* @return*/public static Cookie getCookieByName(String name, Cookie[] cookies) {if(cookies!=null){for (Cookie c : cookies) {//通过名称获取if(name.equals(c.getName())){//返回return c;}}}return null;}
}
package cn.itzheng.store.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JDBCUtils {private static ComboPooledDataSource ds = new ComboPooledDataSource();private static ThreadLocal<Connection> tl=new ThreadLocal<>();/*** 从线程中获取连接* @return* @throws SQLException*/public static Connection getConnection() throws SQLException {//从线程中获取connecitonConnection conn = tl.get();if(conn==null){conn=ds.getConnection();//和当前线程绑定tl.set(conn);}return conn;}// 获取数据源public static DataSource getDataSource() {return ds;}// 释放资源public static void closeResource( Statement st, ResultSet rs) {closeResultSet(rs);closeStatement(st);}// 释放资源public static void closeResource(Connection conn, Statement st, ResultSet rs) {closeResource(st, rs);closeConn(conn);}// 释放 connectionpublic static void closeConn(Connection conn) {if (conn != null) {try {conn.close();//和线程解绑tl.remove();} catch (SQLException e) {e.printStackTrace();}conn = null;}}// 释放 statement ctrl + shift + f 格式化代码public static void closeStatement(Statement st) {if (st != null) {try {st.close();} catch (SQLException e) {e.printStackTrace();}st = null;}}// 释放结果集public static void closeResultSet(ResultSet rs) {if (rs != null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}rs = null;}}//开启事务public static void startTransaction() throws SQLException{getConnection().setAutoCommit(false);}/*** 事务提交且释放连接*/public static void commitAndClose(){Connection conn = null;try {conn=getConnection();//事务提交conn.commit();//关闭资源conn.close();//解除版定tl.remove();} catch (SQLException e) {e.printStackTrace();}}/*** 事务回滚且释放资源*/public static void rollbackAndClose(){Connection conn = null;try {conn=getConnection();//事务回滚conn.rollback();//关闭资源conn.close();//解除版定tl.remove();} catch (SQLException e) {e.printStackTrace();}}public static void main(String[] args) throws SQLException {System.out.println(getConnection().toString());}
}
package cn.itzheng.store.utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class MailUtils {public static void sendMail(String email, String emailMsg)throws AddressException, MessagingException {// 1.创建一个程序与邮件服务器会话对象 SessionProperties props = new Properties();//设置发送的协议//props.setProperty("mail.transport.protocol", "SMTP");//设置发送邮件的服务器//props.setProperty("mail.host", "smtp.126.com");//props.setProperty("mail.smtp.auth", "true");// 指定验证为true// 创建验证器Authenticator auth = new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {//设置发送人的帐号和密码return new PasswordAuthentication("admin", "admin@store.com");}};Session session = Session.getInstance(props, auth);// 2.创建一个Message,它相当于是邮件内容Message message = new MimeMessage(session);//设置发送者message.setFrom(new InternetAddress("admin@store.com"));//设置发送方式与接收者message.setRecipient(RecipientType.TO, new InternetAddress(email)); //设置邮件主题message.setSubject("用户激活");// message.setText("这是一封激活邮件,请<a href='#'>点击</a>");String url="http://localhost:8080/MyTomcat/UserServlet?method=active&code="+emailMsg;String content="<h1>来自购物天堂的激活邮件!激活请点击以下链接!</h1><h3><a href='"+url+"'>"+url+"</a></h3>";//设置邮件内容message.setContent(content, "text/html;charset=utf-8");// 3.创建 Transport用于将邮件发送Transport.send(message);}public static void main(String[] args) throws AddressException, MessagingException {MailUtils.sendMail("aaa@store.com", "abcdefg");}
}
package cn.itzheng.store.utils;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {/*** 使用md5的算法进行加密*/public static String md5(String plainText) {byte[] secretBytes = null;try {secretBytes = MessageDigest.getInstance("md5").digest(plainText.getBytes());} catch (NoSuchAlgorithmException e) {throw new RuntimeException("没有md5这个算法!");}String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字// 如果生成数字未满32位,需要前面补0for (int i = 0; i < 32 - md5code.length(); i++) {md5code = "0" + md5code;}return md5code;}
}
package cn.itzheng.store.utils;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;public class MyBeanUtils {public static void populate(Object obj, Map<String, String[]> map) {try {// 由于BeanUtils将字符串"1992-3-3"向user对象的setBithday();方法传递参数有问题,手动向BeanUtils注册一个时间类型转换器// 1_创建时间类型的转换器DateConverter dt = new DateConverter();// 2_设置转换的格式dt.setPattern("yyyy-MM-dd");// 3_注册转换器ConvertUtils.register(dt, java.util.Date.class);BeanUtils.populate(obj, map);} catch (Exception e) {throw new RuntimeException(e);}}public static<T> T  populate(Class<T> clazz, Map<String, String[]> map) {try {T obj=clazz.newInstance();// 由于BeanUtils将字符串"1992-3-3"向user对象的setBithday();方法传递参数有问题,手动向BeanUtils注册一个时间类型转换器// 1_创建时间类型的转换器DateConverter dt = new DateConverter();// 2_设置转换的格式dt.setPattern("yyyy-MM-dd");// 3_注册转换器ConvertUtils.register(dt, java.util.Date.class);BeanUtils.populate(obj, map);return obj;} catch (Exception e) {throw new RuntimeException(e);}       }}
package cn.itzheng.store.utils;
import java.util.UUID;
public class UploadUtils {/*** 获取随机名称* @param realName 真实名称* @return uuid*/public static String getUUIDName(String realName){//realname  可能是  1.jpg   也可能是  1//获取后缀名int index = realName.lastIndexOf(".");if(index==-1){return UUID.randomUUID().toString().replace("-", "").toUpperCase();}else{return UUID.randomUUID().toString().replace("-", "").toUpperCase()+realName.substring(index);}}/*** 获取文件真实名称* @param name* @return*/public static String getRealName(String name){// c:/upload/1.jpg    1.jpg//获取最后一个"/"int index = name.lastIndexOf("\\");return name.substring(index+1);}/*** 获取文件目录* @param name 文件名称* @return 目录*/public static String getDir(String name){int i = name.hashCode();String hex = Integer.toHexString(i);int j=hex.length();for(int k=0;k<8-j;k++){hex="0"+hex;}return "/"+hex.charAt(0)+"/"+hex.charAt(1);}@SuppressWarnings("unused")public static void main(String[] args) {//String s="G:\\day17-基础加强\\resource\\1.jpg";String s="1.jgp";String realName = getRealName(s);//System.out.println(realName);String uuidName = getUUIDName(realName);//System.out.println(uuidName);String dir = getDir(realName);System.out.println(dir);}
}
package cn.itzheng.store.utils;
import java.util.UUID;
public class UUIDUtils {/*** 随机生成id* * @return*/public static String getId() {return UUID.randomUUID().toString().replace("-", "").toUpperCase();}public static String getUUID64() {return getId() + getId();}/*** 生成随机码* * @return*/public static String getCode() {return getId();}public static void main(String[] args) {System.out.println(getId());/** String str = UUID.randomUUID().toString(); System.out.println(str);*/}
}

c3p0配置文件

<c3p0-config><!-- 默认配置,如果没有指定则使用这个配置 --><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/store_40</property><property name="user">root</property><property name="password">root</property><property name="checkoutTimeout">30000</property><property name="idleConnectionTestPeriod">30</property><property name="initialPoolSize">10</property><property name="maxIdleTime">30</property><property name="maxPoolSize">100</property><property name="minPoolSize">10</property><property name="maxStatements">200</property><user-overrides user="test-user"><property name="maxPoolSize">10</property><property name="minPoolSize">1</property><property name="maxStatements">0</property></user-overrides></default-config> <!-- 命名的配置 --><named-config name="itzheng"><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/store_40</property><property name="user">root</property><property name="password">root</property><!-- 如果池中数据连接不够时一次增长多少个 --><property name="acquireIncrement">5</property><property name="initialPoolSize">20</property><property name="minPoolSize">10</property><property name="maxPoolSize">40</property><property name="maxStatements">0</property><property name="maxStatementsPerConnection">5</property></named-config>
</c3p0-config>

导入最后一个工具类解决编码乱码的问题,导入到filter

package cn.itzheng.store.web.filter;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
/*** 统一编码* @author Administrator**/
public class EncodingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {//1.强转HttpServletRequest request=(HttpServletRequest) req;HttpServletResponse response=(HttpServletResponse) resp;//System.out.println("@@@@@@@@@@@@@@@@@@");      //2.放行chain.doFilter(new MyRequest(request), response);}@Overridepublic void destroy() {// TODO Auto-generated method stub}}//之前的MyRequest增强了request.getParameter("name");方法
//增强了所有的获取参数的方法request.getParameterValues("name");
//增强了所有的获取参数的方法request.getParameterMap();
class MyRequest extends HttpServletRequestWrapper{private HttpServletRequest request;private boolean flag=true;public MyRequest(HttpServletRequest request) {super(request);this.request=request;}@Overridepublic String getParameter(String name) {  if(name==null || name.trim().length()==0){return null;}String[] values = getParameterValues(name);if(values==null || values.length==0){return null;}return values[0];}@Override/*** hobby=[eat,drink]*/public String[] getParameterValues(String name) {if(name==null || name.trim().length()==0){return null;}Map<String, String[]> map = getParameterMap();if(map==null || map.size()==0){return null;}return map.get(name);}@Override/*** map{ username=[tom],password=[123],hobby=[eat,drink]}*/public Map<String,String[]> getParameterMap() {  /*** 首先判断请求方式* 若为post  request.setchar...(utf-8)* 若为get 将map中的值遍历编码就可以了*/String method = request.getMethod();if("post".equalsIgnoreCase(method)){try {request.setCharacterEncoding("utf-8");return request.getParameterMap();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else if("get".equalsIgnoreCase(method)){Map<String,String[]> map = request.getParameterMap();if(flag){for (String key:map.keySet()) {String[] arr = map.get(key);//继续遍历数组for(int i=0;i<arr.length;i++){//编码try {arr[i]=new String(arr[i].getBytes("iso-8859-1"),"utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}flag=false;}//需要遍历map 修改value的每一个数据的编码return map;}return super.getParameterMap();}
}

配置过滤器对应的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>store_v5</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><filter><filter-name>EncodingFilter</filter-name><filter-class>cn.itzheng.store.web.filter.EncodingFilter</filter-class></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

导入BaseServlet这个工具类的作用是减少Servlet的创建

package cn.itzheng.store.web.base;import java.io.IOException;
import java.lang.reflect.Method;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class BaseServlet extends HttpServlet {@Overridepublic void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// localhost:8080/store/productServlet?method=addProductString method = req.getParameter("method");if (null == method || "".equals(method) || method.trim().equals("")) {method = "execute";}// 注意:此处的this代表的是子类的对象// System.out.println(this);// 子类对象字节码对象Class clazz = this.getClass();try {// 查找子类对象对应的字节码中的名称为method的方法.这个方法的参数类型是:HttpServletRequest.class,HttpServletResponse.classMethod md = clazz.getMethod(method, HttpServletRequest.class, HttpServletResponse.class);if(null!=md){String jspPath = (String) md.invoke(this, req, resp);if (null != jspPath) {req.getRequestDispatcher(jspPath).forward(req, resp);}}} catch (Exception e) {e.printStackTrace();}}// 默认方法public String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {return null;}}

Java Web 网络商城案例演示一、(环境搭建)相关推荐

  1. Java Web 网络商城案例演示五(用户激活)

    Java Web 网络商城案例演示五(用户激活) 1.用户激活 2.登录 3.退出 4.抽取公共页面 5.查询所有分类 6.首页热门商品_最新商品显示 7.商品详情显示 8.基础分页操作 9.首页分类 ...

  2. Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)

    订单详情功能(提交订单支付界面) 原理分析 步骤实现: 1.准备工作:order_list.jsp当中修改链接 提交当前订单编号 <a href="${pageContext.requ ...

  3. Java Web 网络商城案例演示十六 订单详情功能(支付功能的实现使用易付宝)

    sValue.append(p3_Amt); // 交易币种 sValue.append(p4_Cur); // 商品名称 sValue.append(p5_Pid); // 商品种类 sValue. ...

  4. Java Web应用小案例:猜数小游戏

    Java Web应用小案例:猜数小游戏 文章目录 一.演示Python版猜数游戏 二.JSP版猜数游戏程序运行效果

  5. 【Hadoop/Java】基于HDFS的Java Web网络云盘

    [Hadoop/Java]基于HDFS的Java Web网络云盘 本人BNUZ大学生萌新,水平不足,还请各位多多指教! 实验目的 熟悉HDFS Java API的使用: 能使用HDFS Java AP ...

  6. Java Web应用小案例:查询城市天气信息

    Java Web应用小案例:查询城市天气信息 本期上大数据1班动态网站设计与开发课,经过半期的学习,学生已经可以利用所学的JSP知识开发简单的基于后台数据库操作的动态网站,但是这是远远不够的,课程教学 ...

  7. Java Web项目实战案例一

    Java Web项目实战案例一 一.主要开发工具如下: 1.物理机:windows 10 2.apache-maven-3.5.3 3.jdk1.8.0_161 4.Intellij 二.构建过程 项 ...

  8. java web网上商城项目实战与源码

    java web网上商城项目实战与源码 点击这里,轻松完成毕设https://x-x.fun/i/AAbf595445aBT

  9. java web图书商城系统的需求分析及详细设计

    图书商城 1. 功能分析 1.用户注册 2.用户登录 3.添加商品(CURD) 4.商品查看– 列表查询 5.商品详情页面 6.将商品添加购物车 7.查看购物车 8.修改购物车 9.生成订单 10.订 ...

最新文章

  1. CCNP精粹系列之二十四--BGP的水平分隔,推荐
  2. MVC5网站部署到IIS7
  3. rest_framework中的url注册器,分页器,响应器
  4. 几个高逼格 Linux 命令!
  5. asp.net 时间显示格式
  6. 泰晤士“中国学科评级”结果出炉,中国数学学科评级榜单公示!
  7. 用pycharm搭建odoo 12, 11,10 开发调试环境
  8. Introduction to Computer Networking学习笔记(四):路由转发表及转发规则
  9. Json时间格式转换
  10. 华南理工大学811信号与系统真题
  11. js把数字金额转换成中文大写数字
  12. 华为手机获取root权限
  13. 一秒钟快速在PPT里插入100张图片
  14. 教你快速爬取哔哩哔哩整部番剧的视频弹幕
  15. Unity3D教程:简单的碰撞检测
  16. Android已root设备定时重启
  17. Event事件-6:new Event自定义事件 / addEvent绑定自定义 / trigger触发自定义 / removeEvent移除自定义
  18. 人生:中国青年女科学家颜宁教授:不向前走,你根本不能轻易定义成功与失败
  19. Centos 7下Nagios的安装及配置(完整版)
  20. 为Cisco IP电话添加自定义铃声

热门文章

  1. 编程求一个9位的整数,数字由1-9构成,每个数字只能出现一次。并且这个整数的前一位能被1整除,前两位能被2整除, ......以此类推,前九位能被9整除。
  2. Android多媒体框架(二)Codec初始化及Omx组件创建
  3. 【运筹学】对偶理论 : 总结 ( 对偶理论 | 原问题与对偶问题对应关系 | 对偶理论的相关结论 ) ★★★
  4. 使用Sendinput函数模拟鼠标键盘操作
  5. Texture Haven Spider
  6. java多线程之Single Threaded Execution模式
  7. 常用的15个国外网站
  8. OpenGL-曲面细分
  9. angular中的 :host 、:host-context、::ng-deep
  10. 团建游戏----气球大赛