=======用户登录
1. jsp文件:使用注册剩下的部分;稍作修改;
 增加checkbox:【7天自动登录】

2. FormBean中没有autoLogin属性;

3. 写Action.login
  (3.1)UserService.getUserByLoginNameAndPassword
   UserDAO.getUserByLoginNameAndPassword
  (3.2)Session中设置user属性为登录的用户实体对象;
  (3.3) 注销: 让Session失效
  (3.4)UserServiceImpl.getUserByLoginNameAndPassword
   加密密码;
  (3.5)UserDAOImpl.getUserByLoginNameAndPassword
  (3.5) 登录测试完毕;
   
4. 实现自动登录功能:
  (4.1) 自动登录的Cookie,
   name=ItcastbbsAutoLogin;
   什么时候产生并发送?
    --在用户登录成功并选择了自动登录;
   什么是否被删除?
    --在超过设置的maxAge时被删除;
    --在用户注销之后,也要被删除;
   什么时候被使用?
    --有一个过滤器拦截每次请求。如果当前这个request所关联的session
     未登录就会检测这个AutoLoginCookie;
   Cookie:
    Cookie的value:userId_expriyTime_MD5(currentTime);
    数据库:userId_expriyTime_MD5(currentTime);
  (4.2) 实现步骤
   --从Cookie中取出value, 从中取出用户的id;
   --根据userId取出数据库中的autoLoginkey
   --如果cookie.value与user.autoLoginKey相等,且未超出过期时间,就是登录用户;
   
  
  ==== 编码实现
  (4.3) Action.login
   --生成autoLoginKey :
    7* 24 * 3600 * 1000 + System.currentTime;
    userId+ expiryTime + MD5(currentTime);
    Keys: Word Completion 
   --发送AutoLoginCookie;
    newCookie, setPath(), setMaxAge(), addCookie()
   --数据库中存一份autoLoginKey;  
    setAutoLoginKey(),updateUser()[update];
    
   --logout
    ==Session失效
    ==删除Cookie
  
  (4.4)测试    
   通过httpwatch检查cookie值
   
  (4.5) 使用Filter检测CheckAutoLoginFilter
   /* ===拦截所有的请求
   出现问题:
    自动登录也需要数据库;
    而此时事务还没有打开,因为openSessionFilter是*.do
   将两个Filter增加对*.jsp和*.do的支持;
   
   测试成功,并测试注销功能;
   
  (4.6) 显示图像:
   // Tomcat -web.xml
   response.setContentType("img/jpeg");//text/html;text/xml; img/jpeg;
   response.getOutputStream().write();
   flush(); //不用close
   
   == jsp
     ---- html:img
     
  (4.7) 大图片的问题
   
   如果图片过大,显示的时候图片占用面积就大,需要压缩;
   工具类:
   ImageUtils;及使用代码;
   将有关方法放在UserAction中;
   
   ????什么时候调用?没有找到地方!!!
   
   
文章管理模块

1. 实体分析: 软件的设计是渐进的,迭代的,循环的。
 文章有关的实体:
  几个实体,主要属性,实体之间的关系,与现有的实体之间的关系?
  
  主题(,附件,投票),回复;
   
  Article(id, author, content,postTime, ipAddr)
  Topic(lastArticlePostTime,lastReply,title, type, forum, replyCount,viewCount)
  , Reply(floor, topic, type,)
  
  修改Forum增加了 
   topicCount,articleCount, lastTopic
  
  理顺现有实体之间的关系;
  
  附件实体:Attachement(id, path,article, size, filename, description, downloadCount)
   Article中增加了attchements:Set<Attachment>
   
2. 编写实体类:
 2.1 将实体写成JavaBean;
 2.2 写完JavaBean后写映射文件;
  几个需要注意的映射:

这两个一对一,配置成基于外键的单向一对一
  Forum.lastTopic - Topic
  Topic.lastReply -Reply 
  
  其他的都可以配成双向,可以根据需要;
  用户与文章: 单向;
  版面与主题:单向; 
  
  Article.content需要使用大文本属性;
  
  
  
 练习:完成以上实体的映射文件并测试数据表的生成;
  
  修改了一个实体,增加了4个
  
 练习时,one-to-one
  
  Forum.lastTopic
  
  ??? 使用many-to-one时:unique="true"值得思考,是否需要
  如果多个Topic没有回复,他们的lastReply=null,lastReplyId为空,这样unique就不正确了???
  
 3.1 Forum
  lastTopic
  <many-to-onename, columnn, unique>
  
 3.2 Article
  <setname="attachments">
   <keycolumn="articleId" />
   <one-to-manyclass="Attachment" />
  </set>
  
  many-to-one 实现基于外键的一对一映射;
 
 3.3 Attachment
 
 3.4 测试,并检查表结构生成是否正确
 
 
 步骤:
  类图 -> 实体-> hbm.xml -> 测试 ->检查结构  
  -> DAO(basic)
   
   
4. DAO的声明: 基本的增删改查功能,继承即可;
 DAO -> DAOImpl
 TopicDAO, ReplyDAO,AttachmentDAO 
 
 注意无参构造函数调用父类的构造函数,传Class
 
5. 功能分析:
 前台版面列表;
 单个版面显示;
 发表主题;
 发表/引用回复;
 列表的分页显示;
 发表文章带有多个附件;
 
6. 实现 前台版面列表:

直接用现成的复制
 forum -> front ->list
 
 ForumAction. forumList
 
7. 实现 某个版面的列表 showForum

左侧: 显示分类和版面的列表;
 右侧:
  上面: 版面信息;
  下面:显示主题列表
   分页显示;
    按公告,置顶,普通的文章的顺序显示
    每个部分按最后文章发表的时间降序
 
8. 文章的显示 showTopic

显示主题信息;
 显示文章列表;
  分页显示,按发表的顺序排序,先发的在前面;
  如果文章中有附件,显示附件;
  
9. 回复:addReply
 回复主题或引用文章;
 发表完回复后显示最后一页,转到回复主题的最后一页;
 
10. 发表主题: addTopic
  与addReply相似,内容实用fckeditor;
   可以带有多个附件,附件可以动态的添加与删除;
   
11. 分析功能所需要的Action方法:
 
 ForumAction forumList, showForum;
 ArticleAction showTopic, addTopicUI,addTopic,addReplyUI, addReply
  
  
 通过Action,分析Service中的方法;
 
 一点技巧: 直接写实现类,然后抽取成接口->
   没有实现的方法,抛出UnsupportedException; 
   
   帖子类型的常量定义
   公告2,置顶1,普通0

12. addTopic
 保存Topic;
 级联保存Attachments;
 更新Topic的lastArticlePostTime;
 Forum topicCount, articleCount;
 Form lastTopic;
 
 addReply
 保存Topic;
 计算并设置楼层;当前最后回复的楼层+1
 级联保存Attachments;
 更新Topic的replyCount, lastReply
  Forum的articleCount;
 更新lastArticlePostTime;
  
 === 测试;
 写简单的测试代码JUit,查看效果; 
   
   
 === 编码过程中的一个错误
  UserDAOImpl.getByLoginNameAndPassword
  测试时,发现输入的信息正常,刚注册的一个用户和密码,总是获取不到用户和密码;
  如果使用list,总是返回n个null的列表;
  原因: 改变了User的表id,以前是id,后来变成了userId;

传智播客--itcastbbs(四)相关推荐

  1. 官宣:传智播客品牌全新升级为「传智教育」

    2006年,几个热血青年怀揣着对教育事业的拳拳之心,一起探讨中国教育的发展方向,同年5月8日传智播客正式成立,"改变中国IT教育"的星星之火由此点燃. 历经10余年风雨,从成立最初 ...

  2. 【传智播客】JavaWeb程序设计任务教程 第四章练习答案

    更多教材解析.练习答案见我的<答案解析系列>博客专栏哦-->答案解析专栏网址 1.一次重定向过程中,浏览器会发出多少次服务器请求( ) A.1次 B.2次 C.0次 D.3次 2.下 ...

  3. 【传智播客】Libevent学习笔记(四):事件event

    目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. ...

  4. php从入门到精通19天笔记,传智播客-PHP从入门到精通(19天)-video

    教程名称:传智播客-PHP从入门到精通(19天)-video 教程目录:├PHP传智社区学习资源.zip├下载必看 .txt├│  ├10目录访问权限(包括分布式权限).wmv│  ├11多站点配置. ...

  5. python基础教程视频(全13集)-Python基础视频教程(600集)【传智播客精品教程】...

    Python基础视频教程 初级共600节课 本套视频是传智播客紧抓未来最大趋势--人工智能,应运而生的一套Python入门视频教程,Python是学习人工智能的首选语言,而该视频是专门针对零基础的学员 ...

  6. python四大软件-传智播客解析Python之移动端页面适配四大方式

    前端在制作移动端页面时,会碰到适配各种手机屏幕的问题,而且还包括平板电脑,这么多种分辨率的屏幕,如何做到适配呢?传智播客为此总结了四种方式,具体如下: 传智播客解析Python之移动端页面适配四大方式 ...

  7. python需要多久-在传智播客培训python需要多久?

    如今,python可以说是比较火的语言之一了,因为灵活以及在人工智能领域上的优势,不少人都转行去培训机构培训python,传智播客的官网上就每天有不少人都在咨询关于python的费用以及时长,今天传智 ...

  8. 创智播客微服务_【传智播客】JavaEE在职加薪课

    资源内容: [传智播客]JavaEE在职加薪课|____阶段一 微服务课程          |____阶段一-微服务课程|____阶段四-好客租房          |____day15-房源数据抓 ...

  9. 【传智播客】Javaweb程序设计任务教程 黑马程序员 课后答案【合集】

    [传智播客]Javaweb程序设计任务教程 黑马程序员 第一章 课后答案 [传智播客]Javaweb程序设计任务教程 黑马程序员 第二章 课后答案 [传智播客]Javaweb程序设计任务教程 黑马程序 ...

最新文章

  1. 我的python学习笔记
  2. 斯坦福大学报告称中国AI论文引用率首超美国!但李国杰院士也发文灵魂拷问...
  3. 考前自学系列·计算机组成原理
  4. python import 路径_Python 从相对路径下import的方法
  5. LINQ之路 2:C# 3.0的语言功能(上)
  6. js原生事件委托的实现
  7. react实现简单的表单
  8. 非递归求解N皇后问题(回溯法)
  9. 生产者与消费者 代码实现 java
  10. git config配置
  11. 1 (msql实战)基础架构
  12. 信念不熄 热爱当燃|中创算力参加黑客马拉松比赛
  13. GIT部署(三)GIT 远程仓库:添加远程库、从远程库克隆
  14. 派森python_python2.7下载-派森(Python)下载v2.7.18 官方正式版【x86|x64】-西西软件下载...
  15. 搭建邮箱服务器hMailServer详细教程(Windows)
  16. 在Chrome中打印CSDN博客内容
  17. .NET 时分HHmm字符串转时间类型
  18. PageHelper分页插件使用教程
  19. 怎样才能开到期货开户加+1分的
  20. topogun3自己编写的使用教程

热门文章

  1. 使用C++ 调用 C# 程序
  2. [Axis2与Eclipse整合开发Web Service系列之一] 生成Web Service Client(将WSDl 转化成 Java代码)
  3. Windows下JetBrains CLion的pthread使用配置
  4. 格式化html源码正则,用正则表达式格式化html标签的代码分享
  5. Python中的json.dumps()和json.loads()函数
  6. python classmethod static_python classmethod和 staticmethod的心得
  7. linux java运行环境_linux(centos)中java运行环境_jdk安装与配置 | OPS技术联盟
  8. 计算机出现假桌面怎么解决办法,Win10系统桌面频繁假死的解决方法
  9. java三个技术平台_Java的3个平台有什么区别
  10. mybatis中使用小于号