计采用了MVC模式,具体调用的时候采用了命令模式 p0|tieD
数据操作层Model中,例如;BlockDAO,TopicDAO,ResponseDAO,UserDAO等。 }(Y>PP.U
里面封装了一个对象所有的数据操作 'q8;"|W"
}y ]JM'20
视图/传输层 View 例如BlockDTO,TopicDTO等,主要是对象的属性 .1Amab
jsp用它来显示,dao用它作为DTO ?tg>us
w.T&Z,^
">j_K|w!
最后就是控制层 Controll 控制层的类都继承了Service接口 0?sHf
里面有一个方法 QJ`-, F
execute(ServletContext context, HttpServletRequest request, j5Wmn]5
HttpServletResponse response) { 1y OLjff
} :G6u`T\u
,因为使用命令模式,后面会说明 8q0&{|"{>
例如 ManageBlock, ManageTopic等 >eERk)#D
主要是接收请求然后调用DAO,把结果返回给jsp fxw'c~W<}
yO= $U8
KzybA`$bO
调用的时候,我采用的是命令模式 8FfCXVCYV
一个所有请求的总入口Servlet被影射到controll.do;他获取Service的类名,然后 ce{:s5VT^
实例化这个类,调用对应的方法 rl&@wp2*
例如 ../controll.do?Service=ManageBlock&action=save +-V Vi1\DQ
h,uq_:l[
J[. mLB"dt
String Name = request.getParameter("Service"); if (Name == null||Name.equals("")){ ErrorView error=new ErrorView("系统获取Service错误。"); request.setAttribute("error",error); request.getRequestDispatcher(Constant.ErrorPage).forward(request,response); } String serviceName = "aill.bbs.controll." + Name;try { Class serviceClass = Class.forName(serviceName); Service service = (Service) serviceClass.newInstance(); boolean isSuc = service.execute(this.getServletContext(), request, response); }catch(Exception e){} lu:P>E['b
4MAB}S<.
?wX0@C-
下面说说安全架构: @}|X5j,Tf
网站采用J2EE的身份认证系统,通过对不同路径的权限限制来做到不用角色具有不同操作捐献 9 i5T :eM
例如:bbs/user/* 下主要是普通用户的操作权限 xSH0S1In
想新建帖子的时候,请求地址是 bbs/user/insertTopic.jsp {J0y7z'0s
vm .NqGz^
bbs/blockAdmin/*主要是板块管理员的权限 ^t3K `8]b'
bbs/bbsAdmin/* 下是论坛管理员的权限 "r d?cQwFX
bbs/sysAdmin/* 下主要是系统管理员的权限 vt:)t6aS9
Em 6-~>M
最后再说说缓存, *7Um~O
缓存的内容主要是数据源,所有板块分类,所有板块的信息[因为这些内容不多,而且使用 \/E, YDf
比较频繁];还缓存了最新的N个帖子,和点击率最高的N个帖子; t|oZQ
另外还缓存了N[差不多是每个板块前5页的]个帖子点击数 *J1DvY?2
XaIw$U>LPg
因为缓存主要有两类,一个是只读,一种是读写。数据源就属于只读的,点击数就属于读写的 }>qB3$4S-
b1|iQ"aw
我设计了两个缓存接口,一个CacheRObject,一个CacheRWObject @$\<i.b
CacheRObject里有个init()和 get(key)方法, (hhWjmq:
init()当然是初始化或者更新缓存的时候用 get方法就是获取被缓存的对象 $m`U55 Uh
CacheRWObject里有init(),save()和get(key)方法 &[H@\e$v
这里多出来的save()就是把缓存里的内容更新到sql数据库中 LOE#1LO
e !?Rn
具体要缓存什么东西,只要写一个类继承CacheRObject,或者CacheRWObject |aP=0<wyz
R%w+`Vlu
例如 FB<(]R(x$
H*>yye
public class BlockKindCache implements CacheRWObject{ HashMap cache=new HashMap(); int size;//还有其他一些属性, init(){调用dao获取初始化的内容} save(){//保存} get(key){//获取} } AO.86Jho
W(wK@M{_$
缓存的属性设置都是些在cache.xml配置文件中,包括缓存大小,要更新那些缓存对象 D || r9q
更新的间隔等等 LM`eYgZ;
服务器启动的时候,获取这些设置,初始化缓存; N? 6.CS4
同时服务器关闭的时候把所有CacheRWObject类型缓存中的内容保存到数据库
查看本文来源