您的位置:首页 > 其它

传智播客--itcastbbs(一)(图文)

2011-11-25 23:59 162 查看
这2天一直在讲itcastbbs,下面是我通过课堂整理的笔记。这是汤老师带就业班的第一个项目——itcastbbs,下面是课堂上对项目的架构、主要实现及实现过程中的常见问题做的总结。

按用户:匿名用户,普通用户,斑竹,管理员;

功能分析:


匿名用户:

主页:分类与版面;两级的分类与多级分类;

最新推荐;

页眉页脚(统一);

1.开发步骤:



(1). 环境的搭配

Struts1.2(jar,xml);

cn.itcast.bbs.web.struts

jstl1.1;

Hibernate3(jar,xml);

以下是搭建截图:

移除src文件夹,重新创建新的






以下是:strus1.2配置







Hibernate配置:



粘贴到项目文件夹 里的 WEB-INF 的 lib文件夹中

(2). 源码分类

src/java ---- java 源码

src/config.files ---- 配置文件

test/java ---- 测试案例

(3). 文档

doc

2. 版面管理模块





新建分类 Categrory.java



配合UML图 边写代码 养成好习惯。。



包结构为cn.itcast.bbs.*。见下图:



实体类:



版面与分类:增删改查 DispatchAction

(1) 实体设计:

2个实体(版面与分类),1个实体(2个实体合1,增加字段区分)都可以

-- Category,Forum;

--关系:1:n

-- 属性

--映射文件;

(2) DAO



-- 层与层之间调用使用接口;

-- CategoryDAO, ForumDAO

-- CategoryDAO的方法:

save, delete, update, get, find/find

--ForumDAO也有这样的接口方法;-- 增加父接口GenericDao

--增加父接口GenericDao<T>:参数类型Object,还可以使用泛型;

--原有的接口extends GenericDAO

-- 编码:

GenericDAO - cn.itcast.bbs.dao.base

Category - cn.itcast.bbs.dao

Forum - cn.itcast.bbs.dao

-- DAO的实现cn.itcast.bbs.dao.impl

ForumDAOImpl

CategoryDAOImpl

==sessionFactory 暂时每个dao管理自己的

== 未完成的操作:UnsupportedOperationException

--使用JUnit4测试每个DAOImpl方法

测试Forum实体时遇到一个问题:无论单向还是双向关联Category,如果想保存forum对象,ForumDAOImpl.save的方法都出错;

因为无法知道如何调用save(Category)的方法,只好手工new一个CategoryDAOImpl来显式保存;

--通过写ForumDAOImpl, CategoryDAOImpl 这2个实现类,发现代码重复比较多;---- 解决方法:

再做一个GenericDAOImplimplements GenericDAO;ForumDAOImpl和CategoryDAOImpl extendsGenericDAOImpl implements XXXDAOImpl;

GenericDAOImpl中使用泛型:

a.GenericDAOImpl<T> implementsGenericDAO<T>;

b.protected Class<T> clazz;子类Construtor(无参数)--这个参数必须要,在父类中一个有参数的,这样子类必须有,否则容易忘记;

c.HQL : from clazz.getName();

对于Session:GenericDAOImpl 单独使用getSession来获取;(保证所有的session)

===配置 <propertyname="current_session_context_class">thread</property>

===util.HibernateSessionFactory

===HibernateSessionFactory.getSession();

--单元测试;

@Before-- 任何方法执行之前执行;

@After -- 任何方法执行之后执行;

上面两个注解减少了代码

(3) 版面有关的功能分析:

--版面有关功能分析;

list- addUI - add

list- editUI - edit

list- delete

list- changeOrder(up or down)

3个jsp页面

-- Action分析

==CategoryActionextends DispatchAction

==== unspecified 方法 :default; 默认抛出异常;重写; <actionparamter="method"..>

==== (unspecified),(addUI, add), (editUI, edit), (delete),(changeOrder);

==== 3个jsp页面: list.jsp, add.jsp, edit.jsp

--业务方法分析

==CategoryService

==== findAll() upspecified - 根据实际情况不分页了

==== addCategory(Category) add

==== getCategory(id) editUI

==== updateCategory(Category) edit

==== delCategory(id) delete

==== changeOrder(id, isUp) changeOrder

-- 编码

==CategoryAction extends DispatchAction

====unspecified 列表

====execute

====== addUI

====== add

====== editUI

====== edit

====== delete

====== changeOrder

====先写出方法;

==CategoryService Interface

====findAll

====addCategory(Category)

====getCategory(id)

====updateCategory(Category)

====delCategory(id)

====changeOrder(id, isUp)

==添加CategoryAction的映射

====DispatchAction parameter="method"

====为了搭配环境,与上述Action方法的forward对应

====jsp页面分类

======WEB-INF/pages/category下3个页面

list.jsp, add.jsp, edit.jsp

==实现Action的各个方法;

====unspecified 和 list.jsp

====addUI 和 add.jsp 准备一个FormBean: CategoryForm

详细分析add模块

======对FormBean的处理:

========validate="false";

========自己写的方法调用validate,自己来验证FormBean

==不要在代码中new 实现类

Service调用DAO时

==练习:

a.list.jsp中显示categories;

b.add.jsp中的表单和显示错误信息(如果有);

c.CategoryForm.validate方法与客户端验证;

验证规则:名字不能为空(有效字符>0,不能使空白字符)

d.用Filter统一管理事务:在chainFilter()之前打开,之后关闭

FilterName:OpenSessionFilter

==冲突:

Struts beanUtils

Hibernate collections

Spring解决了这个问题,直接复制Spring里面的jar包

==CreateQuery需要事物

请求来的时候打开,返回时关闭;使用Filter;

用html:submit/html:text无法使用js的id;

由于代码太多就不附上了。这个就是汤老师给我们思路。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: