黑马程序员技术交流社区

标题: 【石家庄校区】就业班_JavaEE_day25_29_商城项目 [打印本页]

作者: 风中的消逝    时间: 2018-6-16 11:37
标题: 【石家庄校区】就业班_JavaEE_day25_29_商城项目
本帖最后由 小石姐姐 于 2018-6-21 16:05 编辑

就业班_JavaEE_day25_29_商城项目


一 软件生命周期
        1 需求
        产品经理 需求规格说明书  界面原型
        2 分析
        架构师  
        概要设计
                        分层
                        技术选型
                        编码规范 命名规范
                        约定
        3 编码
        开发人员
        4 测试
        测试人员 边界测试 压力测试
        5 上线
        6 维护
        运维人员
        
二 主要技术点
        1 mvc设计模式  
                Jsp servlet javabean(service+dao)
        2 Java三层(view service dao)
        3 面向接口编程(IService IServiceImpl IDao IDaoImpl)
        4 BaseServlet 模拟strurts2
        5 BeanFactory 模拟springIOC
        6 JdbcUtils4.0+EHCache  模拟hibernate
        7 Commons工具类
                Beantutils  注册java.util.Date的转换器
                DBUtils      注册java.util.Date的转换器
                Fileupload
                IO
        8 Ajax json
        9 分页 pagebean封装


三 项目中事务注意点
        1 connection必须关闭。
        2 多个逻辑操作使用同一个connection
        3 dbutils处理事务有另外一套API。 update(conn,sql,params), 带conn的方法dbutils不会去关闭connection。
        4 事务在service层进行处理。模板代码如下:
                try{
                   beginTransaction();
                   dao.xxx();
                   dao.yyy();
                   commitAndCloseConn();
           }catch(Exception e){
                   rollbackAndCloseConn();
           }
    5 通过ThreadLocal来实现每个线程中共享同一个connnection。因为servlet是以多线程的方式对外提供服务。即每次访问都是一个新线程。
           通过ThreadLocal将Connection与当前线程进行绑定。 在其它地方需要用时,通过 get() 方式获取即可。
           ThreadLocal 是一个key-value结构,key是当前线程对象。set(x) set方法默认以当前线程对象为key取出value。
           Hibernate即通过这种方式来实现事务的操作。
           
四 商品分页
        1 pagebean封装: currentPage  totalPage   totalCount  pageSize   list<T>
        2 客户端发送给后台 currentPage
    3 带条件分页 :
                简单条件分页可以将currentPage和条件传给service。
                复杂条件分页可以将条件也进行封装。
               
五 重复提交
        产生的原因
        1:添加或者修改后 转发回查询页面,刷新会重复提交
        2:在网速慢的情况下,用户多次点击提交按钮。
        重复提交的解决方式:
        1 一次性令牌机制 (token)在生成添加页面是生成UUID 并将UUID保存在session中,当添加后,将session中的remove。
        2 添加或者修改后,不做转发而是做重定向。


六 缓存
        EHCache
        数据结构形式:
        map [ cachename,cache]
        cache[elementname,element]
        element.getObjectvalue()
        Redis 后续学习
        
七 文件上传
        采用commons-fileupload技术
        1 不能使用request来获取参数了
        2 FileItem封装请求头
        3 判断是否是文件域 获取输入流
        4 文件在服务器端保存要解决重名和分散存储二个问题
        5 后续会用到图片服务器,能比较好解决重名和分散存储问题
        
八 javamail
        smtp  邮件发送协议
        pop3  邮件接收协议
        邮件工具类
        
九 其它
         一个表单通过多个按钮或者超链接,提交到不同的地址 ;
        通过js修改form的action属性和method的隐藏属性;
        表单提交的方法 submit();
        按钮上添加js 通常采用 <input type="button" value="">;
        超链接上添加js 通常采用
        <a href="javascript:change()"  >xxxxxx</a>或者<a href="javascript:void(0)" >xxxxxx</a>


十 项目中遇到的问题       
        1 request.getParameterMap() 获取的map不能做修改。
         根据Java规范:request.getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。
         这个返回值有个特别之处——只能读。不像普通的Map类型数据一样可以修改。
         这是因为服务器为了实现一定的安全规范,所作的限制。比如WebLogic,Tomcat,Resin,JBoss等服务器均实现了此规范。
        2 购物车中的购物项使用map进行封装,方便根据product查询和删除。ehcache中也是用的map集合
   







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2