第二十六讲基于Servlet的购物车16.1商品存储和浏览***温故***知识回顾过滤器的工作原理过滤器可以访问客户端输入的请求和向客户端输出的响应过滤器的创建与部署创建过滤器类在web.xml对过滤器进行部署过滤器接口Filter每次用户发送请求或向客户端发送响应时都会调用doFilter()方法FilterChain的doFilter()方法用于调用过滤器链中的下一个过滤器作业中的问题过滤器的在web.xml中的配置filter-mapping配置过滤的URL时,按实际情况进行配置***知新***学习目标了解购物车业务流程,通过购物车的设计思路,掌握MVC设计模式的设计思想。本讲要点购物车业务流程数据库设计模块设计MVC设计模式购物车商品显示购物车业务流程什么是购物车?购物车是网上购物平台中的一个重要模块购物车业务流程商品信息浏览删除购物车中商品继续购物查看购物车将商品放入购物车结账开始结束商品购物车数据库设计数据库:cart,描述商品信息与用户信息商品信息表:productspid-商品编号pname-商品名称pdesc-商品说明ptime-进货日期price-单价number-库存数量用户表:usersuname-用户名upwd-密码email-email地址addr-通信地址模块设计商品浏览显示商品信息用户选购商品(将商品添加到购物车)购物车管理显示购物车中的商品信息(允许继续购物)修改购物信息(数量修改)删除购物车中商品结账(只允许登录用户访问)JavaWeb应用设计模式什么是设计模式?在软件开发时采取的一种架构方案。为什么要使用设计模式?按照一定的模式开发JSP,使业务逻辑与表示逻辑分离,使得Web应用易于团队协作开发,易于维护。JSP设计模式种类使用JSP技术开发Web应用,一般有两种模式可供选择:模式1、模式2JSP设计模式1请求应用服务器响应JSP页面JavaBean数据库服务器采用JSP+JavaBean的技术JSP独自响应请求并发送处理结果给用户,数据通过JavaBean来处理是JSP技术发展初期经常采用模式1,适用于一些小型开发项目。JSP设计模式2-MVC模型采用JSP+JavaBean+Servlet技术MVC(Model-View-Controller)模型,适用于中型以上开发项目“模型-视图-控制器”关系图:(控制器)接受用户请求控制界面数据显示更新模型对象状态(视图)显示模型状态(界面)(模型)代表应用程序状态(数据Bean)业务处理流程(业务Bean)选择视图业务处理用户请求通知数据更新状态查询模式2架构示意图Web服务器Servlet(控制器)JSP(视图)JavaBean(模型)数据库浏览器请求响应选择视图更新模型Servlet中的请求转发机制案例:110报警中心收到群众报警电话,根据报警内容(地点、紧急程度等),将报警请求交由不同派出所处理。110报警中心充当调度员的角色,好处是:给人们提供统一的报警方式(拨打110)可根报案人地点与派出所位置等,合理调度资源,及时出警报警中心不处理具体案件,缩短报警请求的响应Web应用中,常由Servlet来充当调度员的角色,把这样的Servlet叫控制器可以将请求转发给另一个Servlet或JSP页面,由它们对请求作进一步处理,并产生对请求的响应。Servlet中实现请求转发实现请求转发需要用到RequestDispatcher接口voidforward(ServletRequestrequest,ServletResponseresponse)ReuqestDispatcher对象的获取通过请求对象的getRequestdispatcher(Stringpath)方法获取。path:必须以/开始,它对应于Web应用的根目录。如:/index.jsp,表示Web应用根目录下的index.jsp文件运用MVC模式开发WEB应用的步骤定义bean来表示数据和封装业务逻辑定义数据Bean来表示需要显示给用户的结果定义业务Bean来封装业务逻辑使用Servlet处理用户请求根据用户请求,将数据的处理结果写入bean,并将其存于请求或会话的上下文中通过请求转发的形式,将请求转发到合适的页面,servlet不需要创建任何输出,输出由JSP页面完成JSP页面输出结果从bean中获取数据输出总之:JSP作界面Servlet接受用户请求,并作初步处理,然后将请求进行转发业务处理借助Bean采用MVC模式的购物车商品显示定义表示商品信息的数据Bean-item.java类,属性如下:id-商品IDpname-商品名称pdesc-商品详细信息price-商品单价number-商品库存定义DataBean.java封装数据库操作定义Servlet-EShoping.java用于查询所有商品,将商品信息存于请求上下文将请求转发至index.jsp网页编写index.jsp网页,从请求上下文中获取商品信息,并显示输出几个文件的调用关系三者关系:EShoping中获取的商品信息,调用DataBean类访问数据库每一条商品信息保存在一个item对象中,所有商品对象按序置于一个大小可变数组中,数组中每个元素为一个商品信息对象index.jsp从请求对象中获取这个可变数据,并取出每个元素(item对象)进行显示。EShoping.javaDataBean.javaitem.javaindex.jspEShoping.java关键代码response.setContentType(text/html;charset=UTF-8);PrintWriterout=response.getWriter();DataBeanda=newDataBean();Stringsql=select*fromproductsorderbyptimedesc;ResultSetrs=null;ArrayListlist=newArrayList();//创建大小可变数组try{rs=da.query(sql);//查找所有商品while(rs!=null&&rs.next()){itemobj=newitem();//创建商品信息对象obj.setId(rs.getInt(pid));obj.setNumber(rs.getInt(number));obj.setPdesc(rs.getString(pdesc));obj.setPname(rs.getString(pname));obj.setPrice(rs.getFloat(price));list.add(obj);//将商品信息对象添加到数组}EShoping.java关键代码da.closeConn();request.setAttribute(list,list);//将商品信息写入请求上下文//将请求转发至index.jsprequest.getRequestDispatcher(index.jsp).forward(request,response);}catch(Exceptione){out.print(e.toString());}finally{out.close();}index.jsp-关键代码%ArrayListlist=(ArrayList)request.getAttribute(list);if(list==null){response.sendRedirect(EShoping);return;}elsefor(inti=0;ilist.size();i++){itemobj=(item)list.get(i);%……输出详细信息%}%小结购物车业务流程网上购物流程数据库设计根据需要设计数据库模块设计划分功能模块MVC设计模式什么是MVC模式?模型-视图-控制器购物车商品显示采用MVC模式实现作业1、总结购物车的业务流程。2、思考MVC设计模式的特点3、编程:为购物车系统添加用户注册模块,要求采用MVC模式实现。实训二十六商品存储与浏览实训目的了解购物车业务流程,掌握ArrayList类的使用方法,理解MVC设计模式,掌握商品信息显示模块的实现技术,并能够MVC模式解决一定的实际问题。实训内容调试购物车系统中的商品显示模块编写程序实现MVC模式的用户注册模块实训要求总结在调试程序过程中遇到的问题及解决问题的方法