`

J2EE网站经验共享

阅读更多
自己感觉不错的一篇文章,粘过来与看到的人共享<来自J道>,也算为J道做点贡献吧,呵呵
aill

发表文章: 131
注册时间: 2004年06月02日 15:20

J2EE网站经验共享! 发表: 2006年06月02日 11:19 回复
网站包括 商家博客,个人博客,论坛,新闻等

设计采用了MVC模式,具体调用的时候采用了命令模式
数据操作层Model中,例如;BlockDAO,TopicDAO,ResponseDAO,UserDAO等。
里面封装了一个对象所有的数据操作

视图/传输层 View 例如BlockDTO,TopicDTO等,主要是对象的属性
jsp用它来显示,dao用它作为DTO


最后就是控制层 Controll 控制层的类都继承了Service接口
里面有一个方法
execute(ServletContext context, HttpServletRequest request,
HttpServletResponse response) {
}
,因为使用命令模式,后面会说明
例如 ManageBlock, ManageTopic等
主要是接收请求然后调用DAO,把结果返回给jsp


调用的时候,我采用的是命令模式
一个所有请求的总入口Servlet被影射到controll.do;他获取Service的类名,然后
实例化这个类,调用对应的方法
例如 ../controll.do?Service=ManageBlock&action=save

																						
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){}


下面说说安全架构:
网站采用J2EE的身份认证系统,通过对不同路径的权限限制来做到不用角色具有不同操作捐献
例如:bbs/user/* 下主要是普通用户的操作权限
想新建帖子的时候,请求地址是 bbs/user/insertTopic.jsp

bbs/blockAdmin/*主要是板块管理员的权限
bbs/bbsAdmin/* 下是论坛管理员的权限
bbs/sysAdmin/* 下主要是系统管理员的权限

最后再说说缓存,
缓存的内容主要是数据源,所有板块分类,所有板块的信息[因为这些内容不多,而且使用
比较频繁];还缓存了最新的N个帖子,和点击率最高的N个帖子;
另外还缓存了N[差不多是每个板块前5页的]个帖子点击数

因为缓存主要有两类,一个是只读,一种是读写。数据源就属于只读的,点击数就属于读写的

我设计了两个缓存接口,一个CacheRObject,一个CacheRWObject
CacheRObject里有个init()和 get(key)方法,
init()当然是初始化或者更新缓存的时候用 get方法就是获取被缓存的对象
CacheRWObject里有init(),save()和get(key)方法
这里多出来的save()就是把缓存里的内容更新到sql数据库中

具体要缓存什么东西,只要写一个类继承CacheRObject,或者CacheRWObject

例如
																						
public class BlockKindCache implements CacheRWObject{
HashMap cache=new HashMap();
int size; //还有其他一些属性,
init(){调用dao获取初始化的内容}
save(){ //保存}
get(key){ //获取}
}

缓存的属性设置都是些在cache.xml配置文件中,包括缓存大小,要更新那些缓存对象
更新的间隔等等
服务器启动的时候,获取这些设置,初始化缓存;
同时服务器关闭的时候把所有CacheRWObject类型缓存中的内容保存到数据库

---其实做这个网站前我从来没做过什么大的java项目,在jdon中也只是一个潜水者,通过这个网站真的学了很多东西,在这里要特别感谢bang大哥和其他各位jdon的兄弟,

说实在的这个网站还有很多自己不满意的地方,希望大家一起交流一起进步

哦,网站地址:www.cityxiu.com 大家可以去看看

还有bang大哥,我把咱们jdon的logo放到我们论坛的下面了,算是做点贡献吧

banq

发表文章: 7507
注册时间: 2002年08月03日 17:08

Re: J2EE网站经验共享! 发表: 2006年06月06日 11:08 回复
不错,先Mark一下,等会儿好好看一下。多谢aill的对jdon支持。

aill

发表文章: 131
注册时间: 2004年06月02日 15:20

Re: J2EE网站经验共享! 发表: 2006年06月06日 16:18 回复
bang大哥客气了,学java几年了,真正提高还是来jdon以后,还有您的书,真心感谢!

banq

发表文章: 7507
注册时间: 2002年08月03日 17:08

Re: J2EE网站经验共享! 发表: 2006年06月08日 11:52 回复
客气。整体设计把握了良好架构和优异性能两个点,作为经验不多的初学者实属难能可贵。

如果你希望在现在架构上有所提高,下面提供几点建议:

1.表现层的controller是通过class.forName来加载业务Service的,一般业务Service都比较大,在并发很大情况下,new Service尚且觉得耗时,所以这里是否需要优化一下?使用资源池pool来预先生成这些大的Service。当然,小型的代码少的service现在这样就可以了。

2.安全架构使用了J2EE的容器验证,但是ACL除了URL资源、还有组件方法的ACL,提供了组件方法的ACL,基本杜绝了安全漏洞,否则,多个Jsp调用同一个组件方法,不同级别权限设置的Jsp资源必然导致这个组件方法访问权限的漏洞。


3.对你缓存分成读和写比较感兴趣,特别是缓存写专门做了一个接口,说明你充分认识到缓存重要性,缓存作为数据库一种临时替代,起到减少数据库连接池的占用等,象这个帖子中询问数据库连接池设置问题,当我们觉得数据库连接池设置再大都不能解决问题时,我们是需要象你这样考虑缓存了,原帖:
http://www.jdon.com/jive/thread.jsp?forum=46&thread=27083

但是使用缓存写需要考虑因素很多,比如两个用户同时写,如何解决资源争夺,如何解决死锁等问题,这些都要求写缓存质量相当高,所以一般在访问大情况下发生这样问题,我们还是依赖数据库强大的ACID事务机制来解决冲突;或者使用支持事务的缓存如JBossTreeCache等。

一般应用下,读缓存就可以了,关键要做好读缓存的更新问题,特别是模型类的嵌套情况下,一个AModel嵌套BModel,那么如何保证AModel中的BModel就是读缓存中的那个BModel,也就是两者同一,这样,万一BModel更新时,只要更新缓存中BModel即可,否则就麻烦了,这些都是非常复杂的域模型缓存问题,这些在JiveJdon3中有些解决,当然还有待提高。

我一直认为:缓存属于业务逻辑编写,因为数据库操作也属于业务逻辑部分,为什么不把等同于数据库的缓存也作为业务逻辑对待呢?正是缓存属于业务逻辑组件,所以,处理缓存是不能完全使用框架替代的,除非使用EJB,但是使用EJB不了解其缓存机制,也会走上使用误区,最后唾弃EJB,这是一些所谓高人经常范的毛病。

aill

发表文章: 131
注册时间: 2004年06月02日 15:20

Re: J2EE网站经验共享! 发表: 2006年06月08日 12:18 回复
谢谢老大的点评!

mythmoon

发表文章: 207
注册时间: 2005年03月21日 01:09

Re: J2EE网站经验共享! 发表: 2006年06月18日 11:57 回复
当你的VIEW(JSP或actionForm)需要对应两个以上的实体bean并且要进行操作你是直接传两个DTO,还是把两个实体转成一个DTO(hashMap)再传到VIEW。
然后,你的DAO又是怎么处理的呢!
我比较疑惑这个问题!

jgtang

发表文章: 3
注册时间: 2006年06月20日 17:13

Re: J2EE网站经验共享! 发表: 2006年06月20日 19:46 回复
IService receiver = (IService)Class.forName(serviceName).newInstance();
ICommand cmd = new CommandXX();
cmd.setReceiver(receiver);
cmd.getParams.add(request);
cmd.getParams.add(response);
cmd.execute();

class CommandXX extends ICommand{
private List params = new ArrayList();
private <T> receiver;
public void execute(){
receiver.method();//method的内容和你的service.execute相同
}
public getter/setter;
}
按我对command的理解,如果让我做的话,我会这么写,不知道合不合理?

jgtang

发表文章: 3
注册时间: 2006年06月20日 17:13

Re: J2EE网站经验共享! 发表: 2006年06月20日 19:46 回复
ICommand cmd = new CommandXX();
cmd.setReceiver(receiver);
cmd.getParams.add(request);
cmd.getParams.add(response);
cmd.execute();

class CommandXX extends ICommand{
private List params = new ArrayList();
private <T> receiver;
public void execute(){
receiver.method();//method的内容和你的service.execute相同
}
public getter/setter;
}
按我对command的理解,如果让我做的话,我会这么写,不知道合不合理?

jgtang

发表文章: 3
注册时间: 2006年06月20日 17:13

Re: J2EE网站经验共享! 发表: 2006年06月20日 20:02 回复
呵呵,不好意思,CommandXX里的params不对,不能是一个ArrayList应该让它是一个Object里面有像struts的Action Formbean, request, response,等这样的东西.

charrot

发表文章: 1
注册时间: 2006年06月23日 10:48

Re: J2EE网站经验共享! 发表: 2006年06月23日 10:49 回复
呵,原来是厦门的啊,我也是啊,楼主,有空聊聊啊
我的**58061178

limb

发表文章: 19
注册时间: 2006年06月14日 18:01

Re: J2EE网站经验共享! 发表: 2006年06月28日 10:14 回复
不错!
做个标记先!

tocow

发表文章: 4
注册时间: 2006年07月27日 17:26

Re: J2EE网站经验共享! 发表: 2006年07月27日 17:29 回复
大牛啊!那个登记注册码图片怎么生成的呀,是不是只是一个随机码+一张背景图片,呵呵,我的msn:hpj2001@hotmail.com

aill

发表文章: 131
注册时间: 2004年06月02日 15:20

Re: J2EE网站经验共享! 发表: 2006年07月30日 15:26 回复
哈哈,没想到厦门的道友这么多,有空聊聊啊。另外工作很忙,基本不上**或msn,有问题可以到秀城论坛的java板块留言!

feiren2004

发表文章: 1
注册时间: 2006年08月16日 11:52

Re: J2EE网站经验共享! 发表: 2006年08月16日 11:59 回复
终于找到组织了!赞一个

junglesong

发表文章: 36
注册时间: 2006年06月07日 14:05

Re: J2EE网站经验共享! 发表: 2006年09月05日 16:19 回复
请问Banq大哥,Service类中方法是静态的好还是非静态的好?

icesyc

发表文章: 3
注册时间: 2007年02月08日 10:55

re:J2EE网站经验共享! 发表: 2007年02月08日 10:56 回复
test

分享到:
评论

相关推荐

    j2ee项目开发经验分享

    j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发经验分享j2ee开发...

    J2EE考试资料分享

    J2EE考试资料分享,我们学校出的考试题,J2EE考试资料分享,我们学校出的考试题,J2EE考试资料分享,我们学校出的考试题,J2EE考试资料分享,我们学校出的考试题,J2EE考试资料分享,我们学校出的考试题,

    j2ee在线购物网实例源码

    【描述】"j2ee在线购物网实例源码,转载供大家共同学习"表明这是一个共享的学习资源,旨在促进开发者之间的知识交流和技能提升。通过分析和研究这个源码,开发者可以深入理解如何在实际项目中运用J2EE技术栈,包括...

    j2ee考试题汇总分享.pdf

    j2ee考试题汇总分享.pdf

    J2EE API(J2EE中文帮助文档/J2EE中文版指南/JavaEE_CN)

    社区内的成员可能会分享他们使用J2EE API的经验,提供解决常见问题的策略,或者讨论最新的J2EE发展趋势和更新。 总的来说,J2EE API的压缩包提供了完整的中文学习资料,涵盖了从基础到高级的所有方面。开发者通过...

    J2EE教学全程(1) J2EE教学全程(1)

    学习J2EE不仅是技术上的积累,也是实践经验的积累,通过与他人的交流,可以更好地提升自身的技能水平。 总之,《J2EE教学全程(1)》是一个全面、详尽的入门教程,旨在帮助读者扎实掌握J2EE的基础知识,为后续深入...

    j2ee期末考试题下载

    控制共享资源的并发访问,需要用到Java 关键字synchronized。 session 的标志符可能存放在cookie 和URL 中。在JSP 中, tag 文件中,用attribute 指令表示输入参数,用variable 指令表示输出参数。在JSF 语句中,...

    基于J2EE短信共享网站 论文

    【基于J2EE短信共享网站】是一个以Java企业级应用平台(J2EE)为基础,构建的用于短信分享和交流的在线平台。论文的主题聚焦在如何利用先进的软件技术和架构来设计这样一个系统,以满足用户对短信存储、分享、搜索的...

    J2EE,J2EE,J2EE_设计模式

    J2EE_设计模式,不错的资源,共享给大家

    J2ee的口腔网站

    - 互动模块:提供论坛、问答等交互功能,让用户能够提问、分享经验。 - 管理模块:管理员负责内容审核、用户管理、数据统计等。 4. 系统实现 通过JSP技术实现动态页面展示,利用Servlet处理HTTP请求,通过DAO层与...

    J2ee个人博客系统

    在当今互联网时代,个人博客系统已经成为人们分享知识、表达观点和记录生活的重要平台。本项目是一个使用J2EE框架开发的个人博客系统,它集成了数据库管理、用户交互、内容发布等功能,为用户提供了一个便捷、个性化...

    jsp j2ee5 j2ee6 中文帮助文档打包

    "表明这些文档经过验证,质量可靠,并且作者愿意与社区共享这些宝贵的资料。 【标签解读】 "jsp api j2ee中文帮助"标签进一步强调了关键内容:API(Application Programming Interface)通常指的是官方提供的接口...

    郭克华 J2ee PPT

    作为有多年项目经验和教学背景的专家,郭克华博士将分享他在实际项目中的经验,帮助学习者更好地理解和应用J2EE技术,解决可能出现的问题。 通过深入学习郭克华博士的J2EE PPT,我们将能够掌握J2EE的核心概念,理解...

    j2ee学习笔记-j2ee学习笔记

    **J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是一个由Sun Microsystems(现已被Oracle收购)开发的平台,主要用于构建企业级的分布式应用系统。它提供了服务器端组件模型、服务和API,支持...

    J2EE期末复习资料

    `Session`对象在J2EE中用于存储用户会话信息,跨页面共享数据。 JDBC(Java Database Connectivity)是Java访问数据库的API,包括固定的连接、创建Statement、执行查询、处理结果集以及关闭连接的步骤。 开发J2EE...

    j2ee个人博客系统

    【标题】"j2ee个人博客系统"是一个基于Java企业级平台(J2EE)开发的个人博客项目,旨在提供一个展示个人思想、分享技术经验的在线平台。这个项目是作者初次尝试使用SSH(Struts2 + Spring + Hibernate)框架进行...

    J2EE-API-7和J2EE-API-6中英文对照版

    它包含了详细的接口定义、方法描述、示例代码,以及相关的规范说明,对于初学者和经验丰富的开发者来说都是宝贵的资源。通过对比J2EE API-6和J2EE API-7的差异,开发者可以了解到技术演进的方向,更好地适应不断变化...

    J2EE 全面简介.doc

    此外,J2EE通过中间件服务如状态管理、持续性服务和分布式共享数据对象CACHE,极大地提高了开发效率和程序性能。其异构环境的支持意味着应用程序可以在不同操作系统和硬件平台上部署,提供了良好的可移植性。再者,...

    j2ee相关试题 j2ee相关试题

    这种类型的Bean没有实例变量来保存客户端的状态信息,因此可以在不同的客户端请求之间共享,提高了资源利用效率。 ### 7. EJB组件模型 EJB(A选项)是用于开发企业级应用的安全、可扩展、事务级别的组件模型。EJB...

Global site tag (gtag.js) - Google Analytics