关于WEB三层架构的思考
1.MVC设计思想
MVC程序设计思想是眼下比較流行的WEB开发的模式,当中,M(model)是模型。即JavaBean,用来封装和保存数据;V(view)是视图,即JSP。用来显示内容;C(controller)是控制器,即servlet,用来处理业务逻辑。大致流程是这种:编写一个JSP页面用来获取信息(如登录页面获取用户登录名、password)。并将信息封装到JavaBean中,提交到server端由WEB容器将数据封装成request请求。交给servlet来处理。
servlet从请求中获取用户信息到数据库中查询。并返回对应的结果(登录成功或失败),再将结果封装成response响应发送给client浏览器,浏览器依据response头和其它信息进行对应的显示。
如图:
MVC设计思想将数据封装、显示和业务处理分开,JavaBean、JSP和servlet都仅仅做自己最擅长的事,模块化使整个过程更加清晰,符合Java低耦合的思想,提高代码的灵活性,易于扩展和维护。
详细分工例如以下图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk5MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
2.WEB三层架构
从上图能够看出。数据訪问层中JavaBean既要存储数据内容又要获取数据内容,这违背了单一职责原则。
我们希望JavaBean仅仅是单纯的用来封装数据。其它的交给别人来做,因此在WEB开发中,将数据訪问层进一步细化。用JavaBean来封装数据,而数据是持久化存储在数据库中(也能够是XML等文件里)。通过DAO(Data
Access Object)数据訪问对象来查询数据库(或解析XML文件等)。有时,视图层不一定仅仅有JSP。,有些内容须要通过servlet技术显示,如登录页面的验证码。当业务逻辑过多时,业务逻辑层就会显得特别臃肿。不利于扩展和维护。这时能够将业务功能抽象成接口,详细功能由子类实现。
那么问题来了,怎么知道哪个类去处理哪个业务逻辑呢?解决方式是定义一个核心servlet。用来接收全部的client请求,通过推断将请求交给相应的业务处理子类去处理。这里可參见Struts2的实现原理。这里不再赘述。
这样,业务逻辑层就分成了两部分:用于显示的servlet和分发业务的servlet。例如以下图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk5MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
3.真实案例
然而。真正开发中,以上并非终于的解决方式。
拿一个实际案例来说。开发一个简单的B2C电子交易平台系统(功能包含:用户登录、注冊、邮箱验证、查看商品、加入商品、购物车、下单、在线支付等),包结构例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk5MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
~~未完待续~~
以上均为个人观点。如有疑问。欢迎交流~~
关于WEB三层架构的思考的更多相关文章
- WEB三层架构与MVC
web三层架构是指: >用户接口层(UI Layer) >业务逻辑层(Bussiness Layer) >持久化层 关于业务逻辑和用户接口 在早期的web开发中,因为业务比较简单,并 ...
- 简单的web三层架构系统【第二版】
昨天写了 web三层架构的第一版,准确的说是三层架构的前期,顶多算是个二层架构,要慢慢完善. 第一版里,程序虽说能运行起来,但是有一个缺陷,就是里面的SQL语句,是使用的拼接字符进行执行.这样安全系数 ...
- Django——WEB三层架构与MVC
而我发此文的目的有二:一者,让初学者能够听到一家之言,是为解惑:二者,更希望抛砖引玉,得到专家的批判. 许多学生经常问我,MVC到底和WEB三层架构有啥关系? 开始时,我也只能给他们一些模糊的回答.时 ...
- Java Web 三层架构详解
java 三层架构ssh 一个spring2.5+hibernate3.2+struts2.0组合框架,使用spring的 IoC来管理应用的 所有bean,包括struts2的 action,充分发 ...
- 简单的web三层架构系统【第五版】
接上一版,今天差不多就是三层架构后台代码的完结了,这一版写完,接下来就是前台的制作了,前台不太熟悉,还在深入学习.过一段时间在写,今天先把后台代码写完. 三层架构包括DAL层, BLL层, UI层(也 ...
- JavaWeb -学生信息管理实践(JDBC+web+三层架构+DBUtil构造思路)
前言: 1 该程序使用动态web项目 2 该程序使用SQL server需导入对应包( 具体可看前篇----JDBC的使用) 3 三层架构思想: ①表示层 前台:jsp/html等 作为前台与用户交互 ...
- 简单的web三层架构系统【第三版】
今天是第三版,和前几天一样今天还是要对代码进行优化,三层架构是一种思想,具体能不能使得整个系统安全和高性能,还是要看代码编写的是否合理,逻辑性是否严谨. 昨天偶然间看到别人写的三层架构中,竟然没有在方 ...
- 转:从web三层架构解析软件测试内容
B/S架构的系统,都会使用如下的基础软件架构: 数据访问层:实现对数据的访问功能,如增加.删除.修改.查询数据. 业务逻辑层:实现业务的具体逻辑功能,如学生入学.退学.成绩管理等. 页面显示层:将业务 ...
- 简单的web三层架构系统【第四版】
上一次写了第三版, 因为之前无意之间看到一段视频,说是把系统中所有的SQL语句都做成存储过程.可以在很大程度上优化系统的SQL执行速度.所以百度了一下细节问题,之后我把所有的SQL语句,都做成了存储过 ...
随机推荐
- Unable to connect to your virtual device!解决方法
使用Genymotion安卓模拟器的用户,很多朋友在启动安卓系统的时候就弹出了以下英文,不知道如何处理,今天电脑知识网小编来教您处理Genymotion安卓模拟器启动出错的问题. Error Unab ...
- [置顶] IT屌丝的离职申请
各位好,很遗憾在如此关键的时刻和大家说告别.我为金三也付出了近一年的心血,几乎没怎么休过令人舒心的周末,熬了多少夜更不用说,如此的离开,请相信我也非常心痛. 尽管直到现在我的水 ...
- windows 下一个mysql password忘记改变
到场mysql简介 my.ini 于[mysqld]以下被加入 skip-grant-tables win+R 热键 进cmd 然后输入命令net stop mysql 最后一点,使文件夹mysql ...
- 字符相等(E - 暴力求解、DFS)
判断字符相等 Description Today on a lecture about strings Gerald learned a new definition of string equiva ...
- 如何设置gen_server在退出时执行相关操作
如果gen_server在监控树中不需要stop函数,gen_server会由其supervisor根据shutdown策略自动终止掉.如果要在进程终止之前执行清理,shutdown策略必须设定一个t ...
- ZOJ 3490 String Successor 字符串处理
一道模拟题,来模拟进位 暴力的从右往左扫描,按规则求后继就好了.除了Sample已给出的,还有一些需要注意的地方: 9的后继是10,而不是00: (z)的后继是(aa),而不是a(a): 输入虽然最长 ...
- USACO Party Lamps 【Binary code solvution】【规律】
写这道题目的时候遇到了一个令人诧异的问题,就是平台上跑来的结果和我本机跑起来的结果不一样. 后来Debug了之后才发现是我数组开小了,只开到100 的数组竟然都去访问他170位的地址肯定要跪成翔啊.. ...
- UVALive 6467 Strahler Order 拓扑排序
这题是今天下午BNU SUMMER TRAINING的C题 是队友给的解题思路,用拓扑排序然后就可以了 最后是3A 其中两次RE竟然是因为: scanf("%d",mm); ORZ ...
- Ubuntu 12.04 安装JDK 8和Eclipse
Ubuntu 12.04 下安装 JDK8 方法一:(缺点是安装时附加openjdk等大量程序并无法去除,长处是安装简单) $ sudo apt-get install eclipse 方法二:(长处 ...
- Android的BUG(三) - 广为人知的诟病:频繁重启问题
使用过Android的同学,尤其是用过山寨pad,应该对Android的重启问题印象深刻吧.Android由于其设计的复杂性,可能会使得系统在不经意时陷入异常状态,因此Android设计了一套看门狗机 ...