一、工具
用的Eclipse、Navicat for Mysql以及Tomcat,准备项目需要的图片。
二、创建所需要的表
如:用于登录注册的个人数据表,展示在页面商品的详情表,点击添加购物车用于存储所加商品的购物车表,订单表等
三、创建工程项目,以及导入需要的包
根据个人数据库版本导入包
四、创建登录页面
也就是利用数据库里的你所存入的个人信息登录。从bean-dao-service-servlet,按照这个步骤实现,另外在写一个登录页面(login.jsp),后端代码
String user_id=request.getParameter("user_id");
String user_pwd=request.getParameter("user_pwd");
List<UserInfo> list=null;
try {
list=new UserInfoService().login(user_id, user_pwd);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (list.size()>0) {//登录成功
response.sendRedirect("showgoodsinfo.do");
}else {
//登录失败,重定向到登录页面
response.sendRedirect("login.jsp");
}
登录页面图
五、创建首页,以及将数据库里的商品详情显示在页面上
还是上面同样的步骤,页面利用c:forEach遍历数据库信息显示在页面(图片上被红框的地方),后端代码
处理图片是因为我数据库存的是1.jpg-2.jpg-3.jpg-4.jpg这种形式的数据,所以想要在页面显示第一张图作为商品图就需要处理一下(存入单张1.jpg就不需要了)
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");List<GoodsInfo> list=null;
try {
list=new GoodsInfoService().findAll();
} catch (SQLException e) {
e.printStackTrace();
}
//处理一下图片信息,将1.jpg-2.jpg转化成1.jpg
for (int i = 0; i < list.size(); i++) {
//split 分裂的意思
//就是把1.jpg-2.jpg分成单独的
for (String s:list.get(i).getGoods_pic().split("-")) {
//s=1.jpg 将list中goods_pic的值设置成1.jpg
list.get(i).setGoods_pic(s);//将第一张图作为主业的图片
break;
}
}
request.setAttribute("list", list);
request.getRequestDispatcher("index.jsp").forward(request, response);
首页图
5.1:从数据库调用图片需要用到上传下载
String image_id=request.getParameter("image_id");
System.out.println("打印"+image_id);
//输入流关联源文件
File file=new File("D://image");
//InputStream:输入字节流 它的子类:FileInputStream:文件输入流
InputStream inputStream=new FileInputStream(file+"//"+image_id);
//输出流关联目标文件
//OutputStream:输出字节流 它的子类:FileOutputStream:文件输出流
OutputStream OutputStream=response.getOutputStream();//直接浏览器显示
int len=0;
byte[] b=new byte[1024];
while ((len=inputStream.read(b)) != -1) {
OutputStream.write(b,0,len);
}
OutputStream.flush();
OutputStream.close();
inputStream.close();
六、搜索框
利用的模糊检索
七、商品详情页
点击首页的商品,跳转到商品详情页
String goods_id=request.getParameter("goods_id");
List<GoodsInfo> list=null;
try {
list=new GoodsInfoService().findGoodsInfoById(goods_id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//解析出套餐信息,并放在集合中,在界面中使用c:foreache显示
List<String> setMealList=new ArrayList<>();
for (String s:list.get(0).getGoods_color_sort().split("-")) {
setMealList.add(s);
}
List<String> imagesList=new ArrayList<>();
//获取到商品所有的小图信息,保存在集合中使用
for (String s:list.get(0).getGoods_pic().split("-")) {
imagesList.add(s);
}
//处理一下图片信息,将1.jpg-2.jpg转化成1.jpg
for (String s:list.get(0).getGoods_pic().split("-")) {
//s=1.jpg 将list中goods_pic的值设置成1.jpg
list.get(0).setGoods_pic(s);//将第一张图作为主业的图片
break;
}
request.setAttribute("goodsinfo", list.get(0));
request.setAttribute("setMealList", setMealList);
request.setAttribute("imagesList", imagesList);
request.getRequestDispatcher("shoppingDetail.jsp").forward(request, response);
八、购物车
点击首页所选中商品的购物车按钮,将所选中的商品加入到购物车里去(也就是把数据存入在数据库的购物车表里),跳转到购物车页面
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String taocan=request.getParameter("taocan");
System.out.println("11111111111111111111111111111111111111111111111111111111111111111111111111111");
String goods_id=request.getParameter("goods_id");
String goods_count=request.getParameter("goods_count");
List<GoodsCar> gc = null;
List<GoodsCar> goodsCars=null;
List<GoodsInfo> gi = null;
System.out.println("aaaaaaaaaa"+goods_id);
if(gc==null||gc.size()==0){
System.out.println("meizhi");
//将选中的产品放在购物车中 根据商品id
try {
gi=new GoodsInfoService().findGoodsInfoById(goods_id);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String count="1";//处理一下图片信息1,将1.jpg-2.jpg转化成1.jpg
System.out.println("sssssssssssss");
for (String s:gi.get(0).getGoods_pic().split("-")) {
//s=1.jpg 将list中goods_pic的值设置成1.jpg
gi.get(0).setGoods_pic(s);//将第一张图作为主业的图片
break;
}
//判断套餐是否为空
if(taocan==null){
//使用默认套餐
for (String s:gi.get(0).getGoods_color_sort().split("-")) {
gi.get(0).setGoods_color_sort(s);
break;
}
}else{
//如果套餐不为空,就使用传递的套餐信息
gi.get(0).setGoods_color_sort(taocan);
}
GoodsCar goodsCar=new GoodsCar(goods_id,gi.get(0).getGoods_name(),gi.get(0).getGoods_pic(),gi.get(0).getGoods_sale_count(),gi.get(0).getGoods_color_sort(),count);
System.out.println("添加购物车"+goodsCar.getGoods_color_sort());
System.out.println("添加购物车"+goodsCar.getGoods_name());
//给购物车添加数据,没有加数据,有加数量
try {
new GoodsCarService().addGoodsCar(goodsCar);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取购物车
try {
goodsCars=new GoodsCarDAO().findGoodsCar();
System.out.println(goodsCars.get(0).getGoods_name()+"--------"+goodsCars.size());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("gc", goodsCars);
//添加成功
request.getRequestDispatcher("shoppingcars.jsp").forward(request, response); //请求转发
//response.sendRedirect("shoppingcars.jsp"); 重定向 异步请求不能重定向
九、收藏页
根据购物车商品的id,这里没有创建收藏表,用的session。
//创建收藏页的信息
List<Collect> collect=new ArrayList<Collect>();
HttpSession session=request.getSession();
session.setAttribute("collect", collect);
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取收藏表
HttpSession session=request.getSession();
List<Collect> collect=(List<Collect>) session.getAttribute("collect");
//将选中的产品加入的收藏页
//根据id查
String goods_id=request.getParameter("goods_id");
System.out.println("收藏成功"+goods_id);
List<GoodsCar> list=null;
try {
list=new GoodsCarService().findGoodsCarByid(goods_id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//处理一下图片信息,将1.jpg-2.jpg转化成1.jpg
System.out.println("sssssssssssss");
for (String s:list.get(0).getGoods_pic().split("-")) {
//s=1.jpg 将list中goods_pic的值设置成1.jpg
list.get(0).setGoods_pic(s);//将第一张图作为主业的图片
break;
}
//处理套餐
for (String s:list.get(0).getGoods_color_sort().split("-")) {
list.get(0).setGoods_color_sort(s);
break;
}
System.out.println("list"+list.get(0));
Collect cl=new Collect(list.get(0));
collect.add(cl);
System.out.println("collect-----"+collect);
//session.setAttribute("collect", collect);
request.setAttribute("cl", collect);
//加入完去收藏页
request.getRequestDispatcher("collect.jsp").forward(request, response);
九、订单页
选中商品,点击立即支付,跳转到核对订单页
HttpSession session=request.getSession();
//查询当前用户的所有地址信息
List<UserAddress> addresslist=null;
System.out.println("查询到了");
try {
addresslist = new UserAddressDAo().findAll();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//查询前端选中的产品信息---前端发送给ids[]---从gc中查询
String []ids=request.getParameterValues("ids[]");
//获取购物车全部信息
List<GoodsCar> list=null;
System.out.println("查询");
try {
list=new GoodsCarDAO().findGoodsCar();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//在创建一个gc,表示选中的产品
List<GoodsCar> gcs=new ArrayList<GoodsCar>();
System.out.println("选中222222222"+list);
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < ids.length; j++) {
if (list.get(i).getGoods_id().equals(ids[j])) {
for (String image1:list.get(i).getGoods_pic().split("-")) {
list.get(i).setGoods_pic(image1);
break;
}
gcs.add(list.get(i));//添加到选中的产品的集合里去
break;
}
}
}
session.setAttribute("addresslist", addresslist);
session.setAttribute("gcs", gcs); //要想转发到别的页面就要用session
response.getWriter().print("1");
十、下单
注:其他功能(购物车的加减数量按钮,结算总计,全选按钮,删除按钮以及同步数据的问题等),看自己的代码,在D盘。