科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道J2EE技术网站开发经验

J2EE技术网站开发经验

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

J2EE技术网站开发经验

作者:zhangpip 来源:赛迪网技术社区 2007年11月4日

关键字: 经验 网站 J2EE

  • 评论
  • 分享微博
  • 分享邮件
计采用了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类型缓存中的内容保存到数据库
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章