1. 实现步骤
    1. 实现总体思路
    2. 1.通用步骤
      1. 1.创建Web项目
        1. 可能会遇到的问题:创建工程时没有添加编译环境
        2. 解决方式
          1. 1.重新创建
          2. 2.添加编译环境
      2. 2.将一些相关的工具类及jar包拷贝项目中
        1. 拷贝
        2. 注意:检查数据库连接的配置信息
      3. 3.对项目进行分包(java类分包及模块分包)
    3. 2.后台模块
      1. 商品类别管理
        1. 1.创建数据库及表结构和相应的数据库操作
          1. 1.创建表结构
          2. -- 商品类别表 create table T_MCTYPE ( TYPEID NUMBER primary key, TYPENAME VARCHAR2(50), FATHERID NUMBER );
          3. 2.创建序列
          4. --商品类别序列 create sequence seq_t_mctype start with 20 increment by 1;
          5. 3.添加测试数据
          6. --- 商品类别表数据 insert into T_MCTYPE (TYPEID, TYPENAME, FATHERID) values (1, '计算机', 0); insert into T_MCTYPE (TYPEID, TYPENAME, FATHERID) values (2, '台式机', 1); insert into T_MCTYPE (TYPEID, TYPENAME, FATHERID) values (3, '笔记本', 1); insert into T_MCTYPE (TYPEID, TYPENAME, FATHERID) values (4, '掌上电脑', 1); insert into T_MCTYPE (TYPEID, TYPENAME, FATHERID) values (5, '数码产品', 0); insert into T_MCTYPE (TYPEID, TYPENAME, FATHERID) values (6, '数码照相机', 5); insert into T_MCTYPE (TYPEID, TYPENAME, FATHERID) values (7, '数码摄像机', 5); commit;
        2. 2.根据表结构创建对应的JavaBean
          1. McTypeBean.java
        3. 3.实现dao层
          1. 接口:定义商品类别管理的方法
          2. 查询
          3. 查询单个记录
          4. 查询多个记录
          5. 添加
          6. 修改
          7. 删除
          8. 实现类:实现定义的方法
          9. McTypeDaoImpl.java
        4. 4.实现service层
          1. 接口
          2. 与dao层一致
          3. 实现类
          4. 实现接口,调用dao层中实现方法
        5. 5.创建对应的Servlet,并实现处理方法
          1. 1.创建service对象实例
          2. IMcTypeService service = new McTypeServiceImpl();
          3. 2.调用service中的方法执行查询操作
          4. List<McTypeBean> list = service.query(null);
          5. 3.将查询出的结果保存在作用域中
          6. request.setAttribute("list", list);
          7. 4.跳转页面(数据保存在request中,所以使用服务器跳转)
          8. request.getRequestDispatcher("/back/mctype/index.jsp").forward(request, response);
        6. 6.在页面中展示查询出的数据
          1. 1.导入JSTL库
          2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          3. 2.使用循环标签及EL获取数据并展示
        7. 7.将展示页面改成jsp页面(后台管理页面)
          1. 1.在back目录下创建后台相关的管理页面
          2. 2.将对应html代码,转jsp
          3. main.jsp
          4. top.jsp
          5. left.jsp
          6. index.jsp
          7. right.jsp
          8. 注意:将html中body中的代码以及head标签中样式和js拷贝到对应的jsp页面中
          9. 3.将相关的图片css,js拷贝到(webContent)根目录下
          10. 4.给每个jsp页面添加完整路径(绝对URL地址)
          11. http://localhost:8888/hdshop/css/style.css
        8. 8.商品类别管理
          1. 1.查询
          2. 部分思路
          3. 1.找到left.jsp页面修改菜单的链接
          4. 2.去掉right.jsp不相关的数据
          5. 3.修改Servlet中的跳转地址
          6. 4.在right.jsp页面中导入jstl库
          7. 5.使用jstl和EL获取数据并展示
          8. 6.调整展示界面的显示数据(以树状形式显示)
          9. 1.将所有的大类先显示出来(判断fatherid为0显示)
          10. 2.在所属的大类下显示所属的小类(判断fatherid 是否等于当前类别的typeid)
          11. 在判断标签中添加增强型循环,判断fatherid
          12. 3.将小类的类别名称居中显示
          13. 2.添加
          14. 添加思路
          15. 1.创建添加页面mctypeadd.jsp,并将设置动态绝对URL地址
          16. 2.完成设计添加页面
          17. 1.将form.html中的代码拷贝到mctypaadd.jsp页面中,并将不需要的数据给删除
          18. 2.添加表单标签
          19. 3.添加父类名称的下拉框
          20. 1.将tab.html中的代码拷贝到mctypeadd.jsp页面中
          21. 2.将样式拷贝到mctypeadd.jsp页面中
          22. 4.修改展示页面中的添加按钮的链接
          23. 5.修改Servlet的代码,执行查询所有大类信息
          24. 6.在添加页面中将作用域中的数据显示出来
          25. 1.导入jstl库
          26. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          27. 2.使用增强型循环遍历集合(EL表达式获取作用域中的集合)
          28. 3.添加功能实现
          29. 1.修改确认保存按钮的提交地址
          30. 2.在Servlet中判断task任务是不是add命令
          31. 3.获取表单提交的信息
          32. 获取fatherid是字符串的,需要将其转化为int类型
          33. 获取表单提交的数据
          34. 4.调用service中的添加方法执行添加操作
          35. //执行添加操作 int i = service.add(mt);
          36. 5.根据执行的结果响应客户端
          37. 1.添加成功
          38. 查询所有商品类别信息
          39. query(request, response, service);
          40. 跳转页面
          41. 2.添加失败
          42. 6.处理乱码,添加一个过滤器
          43. 常见问题
          44. 1.404错误:请求的URL地址有问题
          45. 1.检查请求的URL地址是否正确
          46. 2.检查你所请求的资源(jsp,html,servlet)有没有部署到项目中
          47. 2.服务器错误(启动服务器失败)
          48. 1.Servlet对外映射的地址有问题(例如:两个Servlet公用一个映射地址)
          49. 2.映射地址不符合格式
          50. 3.SQL异常
          51. 1.表名写错了
          52. 2.序列获取不到序列的下一个数字
          53. 3.序列名称写错,写了一个不存在的序列
          54. 4.插入语句中的values写错了
          55. 5.执行basedao中的方法传入参数缺失
          56. 6.当错误提示是“值过多”或“缺少值”
          57. 插入语句中字段列表数量与值列表的数量不一致
          58. 4.在jsp页面中弹出以下错误提示
          59. 1.在JavaBean中没有这个名称的成员属性,也就是成员属性名称写错了
          60. 2.没有获取到对应的对象的,页就获取不到该对象中的属性
          61. 1.在作用域中没有保存该对象的数据
          62. 3.EL表达式获取参数失败,EL表达式格式有错误(没有明显的提示)
          63. 命名不规范
          64. 在花括号后多了空格
          65. 3.修改
          66. 1.复制一个类别修改页面(从mctypeadd.jsp复制过来),并修改名称为mctypeupdate.jsp
          67. 2.修改mctypeupdate.jsp页面中的表单信息
          68. 3.修改right.jsp页面中的修改按钮的链接地址
          69. 4.修改Servlet中的处理方法
          70. 1.判断task命令是否是queryForUpdate
          71. 2.如果是该命令,则获取请求中的参数
          72. 3.根据参数获取对应要修改的数据的信息
          73. 1.获取要修改的类别信息
          74. 2.获取所有大类的信息
          75. 4.将获取的数据保存到作用域中
          76. 5.跳转页面(mctypeupdate.jsp)
          77. 6.如果获取数据失败的话,则响应客户端
          78. 7.控制下拉选项选中当前要修改的类别所属的大类
          79. 5.提交数据保存到数据库
          80. 1.确认提交表单的地址
          81. 2.在Servlet中判断task命令是否是update
          82. 3.获取表单提交过来的数据,并将其转化为int
          83. 4.将获取的数据保存到JavaBean中
          84. 5.调用service中方法执行修改操作,并处理响应
          85. 4.删除
          86. 1.修改删除按钮的链接(JS代码)
          87. 2.添加del(id)js代码,删除方法
          88. 3.修改Servletd的处理方法
          89. 4.修改删除语句,删除大类的同时删除小类(删除小类的时候不能删除大类)
      2. 商品信息管理
        1. 查询
          1. 商品所有数据展示
          2. 1.在数据库中操作基本数据
          3. 1.创建表结构
          4. 2.创建序列
          5. 3。添加测试数据
          6. 2.根据表结构创建JavaBean
          7. 3.实现dao层
          8. 与商品类别管理的一致
          9. 4.实现service层
          10. 与商品类别管理的一致
          11. 5.实现servlet
          12. 6.创建展示页面mclist.jsp
          13. 1.将right.html文件中的代码拷贝到mclist.jsp中
          14. 2.导入jstl库
          15. 3.使用增强型循环获取作用域中的数据并遍历
          16. 步骤与商品类别管理的查询是一致的
          17. 商品信息的分页查询
          18. 1.将mclist.jsp中自带的分页栏目去掉
          19. 2.将封装好的分页栏目PageBar.jsp,拷贝到工程中
          20. 3.在mclist.jsp页面中将PageBar.jsp包含到当前页面中
          21. 4.将分页的表单拷贝到mclist.jsp页面中,并改变表单提交的地址
          22. 5.修改Servlet,在Servlet动态获取客户端传递过来的currentPage和pageSize
          23. 6.获取service对象的实例,调用其中的方法执行分页查询
          24. 7.修改Servcie,添加一个分页查询的方法,并实现(直接调用dao层中的方法)
          25. 8.修改dao层,添加一个分页查询的方法,并实现该方法
          26. public PageModel queryPageModel(McBean mc, int currentPage, int pageSize) { /** * querySql 要分页的数据的查询语句 确定分页的结果集(要对哪些数据进行分页显示) * countSql 统计我们分页的数据的总记录数 * whereSql 查询要分页的数据的结果集的条件 * otherSql 对要分页的数据进行排序 */ StringBuffer querySql = new StringBuffer(" select * from t_mc where 1=1 "); StringBuffer countSql = new StringBuffer(" select count(1) from t_mc where 1=1 "); StringBuffer whereSql = new StringBuffer(); StringBuffer otherSql = new StringBuffer(" order by mmcid asc"); /** * params 保存的是sql语句中占位符对应的参数 */ List params = new ArrayList(); /** * 判断查询条件 */ if(mc.getMcname()!=null||!"".equals(mc.getMcname())){ //拼接SQL语句,查询的条件 whereSql.append(" and mcname=?"); //对SQL语句中的占位符进行赋值 params.add(mc.getMcname()); } return super.queryPageModel(querySql, countSql, whereSql, otherSql, McBean.class, currentPage, pageSize, params); }
          27. 9.Servlet中的完整的步骤
          28. 带条件分页查询
          29. 1.在mclist.jsp页面中,添加查询的表单
          30. 2.在Servlet中获取查询的条件,并将条件保存到JavaBean
          31. 3.在dao层实现类中将查询的条件给拼接到SQL语句
        2. 添加
          1. 1.创建一个mcadd.jsp页面
          2. mcadd.jsp
          3. 2.实现添加页面中加载商品类别的信息
          4. 第一种方式
          5. 点击添加按钮直接请求McServlet,查询商品类别信息,保存到作用域,跳转页面共享数据
          6. 第二种方式
          7. 使用ajax实现
          8. 1.页面加载完成就像服务器发出请求
          9. 2.修改Servlet中代码,处理ajax发出的请求
          10. dao层的修改
          11. 3.实现将所属的大类数据加载到下拉菜单中
          12. 4.实现商品类别数据的加载
          13. 1.确定大类选择发生改变触发的事件
          14. 2.执行事件处理的方法
          15. 1.向服务器发出请求,并获取到响应的数据
          16. 2.将获取到的数据一一取出,并根据数据动态生成下拉选项
          17. 3.修改Servlet,处理请求
          18. 3.修改表单的提交方式及制定enctype的属性值为二进制形式提交
          19. 4.导入文件上传的jar包
          20. 4.修改Servlet,处理添加请求
          21. 1.普通输入项获取
          22. 2.文件输入项的获取
          23. 3.将保存在McBean中的信息添加到数据库中,并返回值做不同的响应
          24. 4.dao层中修改
          25. 5.修改mclist.jsp中的图片的显示
        3. 修改
        4. 删除
      3. 后台登录功能
        1. 1.数据库的设计及相关的操作
          1. 1.创建表结构
          2. 2.创建序列
          3. 3.添加测试数据
        2. 2.根据数据表结构创建JavaBean
        3. 3.实现Dao层
          1. 接口类
          2. 实现类
        4. 4.实现Service层
          1. 接口类
          2. 实现类
        5. 5.添加Servlet
        6. 6.新建登录页面back_login.jsp
        7. 7.后台页面的安全验证
          1. 1.创建一个过滤器,并指定过滤拦截的条件
          2. 2.判断请求是否允许通过,依据:是否登录
        8. 8.登录成功后,在首页显示登录用户的信息
    4. 3.前台模块
      1. 前台首页界面
        1. 1.将首页的相关的样式和图片拷贝到项目中
        2. 2.将首页分页的home.jsp和top.jsp以及member.jsp拷贝到项目中
        3. 3.将home.jsp页面中的数据改成动态数据
          1. 1.新建一个index.jsp页面,并修改转发请求
          2. 2.处理请求
          3. 1.获取当前页面(currentPage)和每页显示的记录数(pageSize)
          4. 2.创建service对象实例,并调用该实例中的方法执行分页查询
          5. 3.将获取到的分页模型对象保存到作用域中并跳转页面
          6. 3.将分页栏目PageBar.jsp包含到home.jsp页面中
          7. 4.在home.jsp页面中修改,展示保存在作用域中的数据
          8. 1.导入jstl包
          9. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          10. 2.使用增强型循环展示数据
          11. 5.待条件查询
        4. 4.在home.jsp页面中显示所有商品类别信息
          1. 1.修改Servlet,查询所有商品类别的信息
          2. 2.在home.jsp页面中展示数据
      2. 前台登录功能
        1. 1.修改请登录的链接地址
        2. 2.创建front_login.jsp页面
          1. front_login.jsp
        3. 3.数据库设计及相关的操作
        4. 4.根据表结构创建JavaBean
        5. 5.实现dao
        6. 6.实现service
        7. 7.添加UserServlet ,并处理请求
        8. 8.验证码的使用
          1. 思路
          2. 1.在登录页面中引入验证码的图片
          3. 如果点击请求验证码的时候,验证码没有变化,则是因为请求的是缓存中的数据,请求的时候请求的地址要时刻改变
          4. 2.在Servlet判断验证码是否正确
          5. 3.验证码的错误问题
          6. 是因为response.getOutPutStream()和Response.getWriter()发生冲突了,出现了异常
          7. 解决方式
      3. 注销功能
        1. 前台页面
        2. 后台页面
        3. Servlet
      4. 购物车功能
        1. 购物车的设计
        2. 1.创建一个购物车的对象ShopCar
          1. ShopCar.java
          2. 1.往购物车中添加商品
          3. 2.从购物车中删除商品
          4. 3.清空购物车
          5. 4.修改购物车中的商品件数
          6. 5.获取购物车中的商品总件数
          7. 6.获取购物车中商品的总类数
          8. 7.获取购物车中商品的总价格
          9. 8.获取购物车的对象实例
        3. 2.实现购物车的功能
          1. 1.修改商品首页的购买按钮的请求地址
          2. 2.创建ShopCarServlet,修改Servlet,接收客户端的请求
          3. 3、在top.jsp页面中获取购物车中有多少件商品
          4. 4.实现购物车的界面及相关的功能
          5. 1.界面效果实现
          6. 1.top.jsp
          7. 2.shopcar.jsp
          8. shopcar.jsp
          9. 效果
          10. 2.展示购物车中的商品
          11. 1.导入jstl库
          12. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
          13. 2.使用增强型循环展示数据
          14. 3.继续购物
          15. 4.清空购物车
          16. 1.jsp页面修改
          17. 2.Servlet的修改
          18. 4.修改商品数量
          19. 1.jsp页面修改
          20. 2.Servlet的修改
          21. 5.删除商品
          22. 1,jsp修改
          23. <input onclick="location.href='ShopCarServlet?task=delete&mcid=${mc.mcid}'" type="button" value="删除"/>
          24. 2.Servlet的修改
        4. 3.下订单
          1. 1.下订单界面的实现
          2. order.jsp
          3. 2.订单表和订单详情表
          4. 1.创建表结构并添加测试数据
          5. 表之间的关系
          6. 3.创建JavaBean
          7. OrderBean
          8. OrderDetailBean
          9. 4.实现dao层
          10. 订单的管理
          11. 接口
          12. IOrderDao.java
          13. 实现类
          14. OrderDaoImpl.java
          15. 订单详情的管理
          16. 接口
          17. IOrderDetailDao.java
          18. 实现类
          19. OrderDetailDaoImpl.java
          20. 5.实现service层
          21. 6.下订单的按钮事件实现
          22. 确定表单中的输入项的name属性值
          23. 7.OrderServlet的实现
          24. 1.接收客户端的数据
          25. 1.从客户端的表单中获取订单的相关的数据
          26. 2.从购物车中获取订单的信息
          27. 3.从购物车中获取订单详情的信息
          28. 4.从session获取下订单的用户信息
          29. 2.将获取的数据保存
          30. 3.将数据插入到数据库中
          31. 4.情况购物车
          32. 5.调换页面
      5. 我的订单
        1. 1.我的订单展示页面
          1. orderlist.jsp
        2. 2.修改会员中心的我的订单的请求地址
        3. 3.dao层的修改
        4. 4.Servlet的修改
        5. 5.根据登录用户的信息来查询该用户下的订单信息
          1. 1.修改Servlet
          2. 2.修改dao层