目录
学习目标:
1.通过超链接a传参将所点击购买的商品id传到处理页面doShopCart.jsp进行处理
2.接收超链接a所传productid并进行处理
3.接收处理后的存储多个id的ArrayList aList购物车列表,通过ProItemDaoImp类的getProItemByIds(aList)方法从数据库取出商品id所对应的商品信息
4.通过实现类ProItemDaoImp调getProItemByIds(aList)方法获得商品集合通过遍历输出在页面上
学习目标:
理解并掌握jsp中购物车的简单实现思想
核心步骤
1.通过超链接a传参将所点击购买的商品id传到处理页面doShopCart.jsp进行处理
所需的主要知识:超链接传参,jsp表达式
核心代码:
<a href="doShopCart.jsp?productid=<%=p.get("productid") %>">
商品列表展示:
2.接收超链接a所传productid并进行处理
所需的主要知识:session对象getAttribute(),setAttrubute()方法,request对象的get.getParameter()方法
核心代码:
<%//从商品列表获取添加到购物车 String id=null;//判断购物车列表是否为空,若不为空则先获取该列表再传商品id//此判断是重点⭐⭐⭐if(session.getAttribute("cartList")!=null){//获得idid=request.getParameter("productid");//接收购物车列表ArrayList<String> cartList=(ArrayList<String>)session.getAttribute("cartList");cartList.add(id);//更新购物车列表session.setAttribute("cartList",cartList);//重定向到购物车response.sendRedirect("shopCart.jsp");}else{//若为空则先创建购物车列表再添加商品id//创建购物车列表存储idArrayList<String> cartList=new ArrayList<String>();//同上id=request.getParameter("productid");cartList.add(id);session.setAttribute("cartList",cartList);response.sendRedirect("shopCart.jsp");} %>
3.接收处理后的存储多个id的ArrayList aList购物车列表,通过ProItemDaoImp类的getProItemByIds(aList)方法从数据库取出商品id所对应的商品信息
所需要的知识:数据库连接(略),sql语句的查询,ArrayList,泛型
核心代码
//工具类
public class DataBase {static String driver="com.mysql.jdbc.Driver";//驱动字符串static String url="jdbc:mysql:///mypos?characterEncoding=utf-8";////连接字符串1 **所需连接数据库的名称***static String username="root";//数据库访问用户名static String password="123";//数据库访问密码PreparedStatement ps=null; Connection conn=null;Statement sm=null;ResultSet rs=null;public Connection getConn() {return conn;}public void setConn(Connection conn) {this.conn = conn;}public Statement getSm() {return sm;}public void setSm(Statement sm) {this.sm = sm;}public ResultSet getRs() {return rs;}public void setRs(ResultSet rs) {this.rs = rs;}public DataBase(){try {//1.加载驱动Class.forName(driver);//2.建立连接conn=DriverManager.getConnection(url, username, password);sm=conn.createStatement(); //3.执行sql语句(封装到方法中) } catch (ClassNotFoundException e) { e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}//执行sql语句获得结果集public ResultSet getResult(String sql){try {return rs=sm.executeQuery(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return rs; }}//类的daopublic interface ProItemDao { public ArrayList<HashMap<String,Object>> getProItemByIds(ArrayList<String> idList);
}//类的daoImppublic class ProItemDaoImp extends DataBase implements ProItemDao {@Overridepublic ArrayList<HashMap<String, Object>> getProItemByIds(ArrayList<String> idList) {ArrayList<HashMap<String, Object>> aList=new ArrayList<HashMap<String,Object>>();String sql=null;ResultSet rs=null;//通过遍历将购物车列表中的id分别执行查询,并且将所有结果添加到ArrayList结果集中for (String id:idList) {sql="SELECT p.productid,p.name,i.listprice,i.status"+" FROM product p,item i,category c"+" WHERE p.productid=i.productid && p.productid='"+id+"' && p.category=c.catid";//根据自己的需求去拼接sql语句//通过getResult 方法获得结果集rs = this.getResult(sql); try {while(rs.next()){//创建HashMap对象将数据存进去HashMap<String, Object> map=new HashMap<>();//根据数据库中表所对应列名存进HashMapmap.put("productid", rs.getString("productid")); map.put("name", rs.getString("name")); map.put("listprice", rs.getDouble("listprice")); map.put("status", rs.getString("status"));//将该对象存到ArrayList中返回获得的结果集aList.add(map); }} catch (SQLException e) { e.printStackTrace();}} return aList;}}
4.通过实现类ProItemDaoImp调getProItemByIds(aList)方法获得商品集合通过遍历输出在页面上
所需要的知识:HashMap中操作方法,遍历
核心代码:
<%//从carList存储的id获得购物车列表ProItemDaoImp pidi=new ProItemDaoImp(); //接收购物车列表ArrayList<String> a=(ArrayList<String>)session.getAttribute("cartList");//通过ProItemDaoImp类中的getProItermByIds方法,//获得购物车列表中存的多个id获取商品信息ArrayList<HashMap<String,Object>> cart=pidi.getProItemByIds(a); //遍历获得的商品列表,通过循环输出到网页购物车中for(HashMap<String,Object> hm:cart){
%><tr ><td><%=hm.get("productid") %></td><td ><%=hm.get("name") %></td><td ><%=hm.get("listprice") %></td><td>1</td><td><input type="button" value="删除" /></td></tr> <%}%>
购物车列表展示:
总结:该功能重点在通过session对象传递商品id列表和对id列表进行sql处理