9.MVC模式 -- 改造源代码
一、MVC设计模式
软件可以认为有 Model View Controller 来组成 MVC设计模式 要求这三部分 应该尽量独立 互不干扰 使程序结构清晰 便于开发和维护
二、JAVAEE经典三层架构
将整个JAVAEE的开发过程分为 Web Service Dao 三层
案例:改造EasyMall 为 三层架构
分层的优势:
~1.分层目的在于 代码具有更加优良的结构 便于开发和调试
~2.便于在层与层之间实现代码的复用 减少代码冗余
~3.在更改模块时可以不影响其他模块的使用 实现模块的复用
如 需要将底层的数据库 从mysql 切换到oracle 此时 只需要去修改Dao层 web层和service层不需要修改。
再例如 ,需要将web层 切换为 用Android 或 IOS 移动端实现 ,此时 只需要 替换web 层 Service 和 Dao层不需要修改。
为了实现第三个优点,三层架构要求,层与层之间尽量的独立,不要胡乱传递层特有的对象,例如不要将web层特有的对象传递给其他层,dao层 特有的对象返回给其他层,因为,一旦这样做,这些某一层特有的对象就入侵到了其他层,一旦需要替换这一层时,不可避免的要跟着修改其他层中使用了这一层特有对象的地方的代码。这种由于乱传递对象而造成 层与层之间关系变得过于紧密的情况,称之为层与层之间发生了耦合。
这种层与层之间过于紧密的关系是有害的,应该尽量的避免或消除,解决这些耦合的过程就称之为 解耦。最终希望实现 高内聚 低耦合 的状态。
解耦的实现:
不要胡乱传递层特有的对象人为的造成耦合。
但是再小心,层与层之间早晚要发生关系的,这些耦合是无法避免的,此时 需要将耦合管理起来 - 管理耦合有很多种方案 - 我们介绍 - 接口+配置文件+工厂 实现解耦。
接口:
使层可以面向接口编程 而不需要关注下面层具体的实现
在切换底层时 不需要修改上层代码 因为接口没有变动
为层的实现提供了统一的标准 方便 实现不同实现类
工厂+配置文件:
基于配置来实现产生接口的实现类
由工厂来根据配置来生产接口的具体实现类对象,在底层实现类变化时,可以不需要修改代码 只需要改配置即可
单例 泛型 反射
单例模式:
解决的问题:保证一个类在一个程序中只能有唯一的一个实例
2种情况:
1. 需要唯一的一个对象进行统一的管理,如果对象多了,就会出问题
2. 相对于频繁创建对象,使用唯一的对象可以提高效率
如何实现单例模式?
1. 私有的构造器
2. 私有的静态的自身实例,作为唯一的实例
3. 公有的静态的返回当前类的唯一实例的方法
代码重构:
jsp中的java代码用标签技术替代
配置虚拟主机,实现www.easymall.com访问
在[tomcat]/conf/server.xml配置虚拟主机<Host name="www.bingou.com" />
修改Hosts文件增加 127.0.0.1 bingou.com
在[tomcat]/conf/www.bingou.com/ROOT.xml 中编写<Context docBase="工程的WebRoot目录"/>直接让tomcat中的www.bingou.com虚拟主机管理工程目录下的WebRoot,好处是不用发布,直接修改工程中的文件立即可以起作用。
**此种方式下没有了发布过程,myeclipse就不会自动帮我们加入jstl开发包了,需要自己导入。
用javabean保存信息
整理代码结构,实现软件分层
注册用户:
RegistServlet
解决请求响应乱码
验证验证码
获取用户提交的数据
校验数据
将数据封装到bean中,调用Service的方法注册用户
注册成功后回到主页
UserService
注册用户的方法:
检查用户名是否存在
注册用户到数据库
UserDao
根据用户名查找用户
加入用户数据到数据库中
登录用户:
LoginServlet
处理乱码
获取用户名密码
记住用户名的处理
调用Service根据用户名密码查找用户
找不到就提示用户名密码不正确
找到就登录用户回到主页
UserService
登录用户的方法
调用到根据用户名密码查找用户
UserDao
根据用户名密码查找用户的方法
AJAX校验用户名:
解决乱码
获取用户名
检查用户名是否已经存在


代码修改
链接:https://pan.baidu.com/s/1stneiwMhgVxw03VV28PDZg 密码:py2j
9.MVC模式 -- 改造源代码的更多相关文章
- 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- 二十七、EFW框架BS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- Dot Net设计模式—MVC模式
1 MVC设计模式简介 MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离.MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定 ...
- 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)
一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...
- Android中MVP模式与MVC模式比較(含演示样例)
原文链接 http://sparkyuan.me/ 转载请注明出处 MVP 介绍 MVP模式(Model-View-Presenter)是MVC模式的一个衍生. 主要目的是为了解耦,使项目易于维护. ...
- SSH和三层架构的MVC模式的对应关系
1.MVC(Model-View-Controller)设计模式: 首先让我们了解下MVC(Model-View-Controller)的概念: MVC全名是Model View Controller ...
- 编码风格:Mvc模式下SSM环境,代码分层管理
本文源码:GitHub·点这里 || GitEE·点这里 一.分层策略 MVC模式与代码分层策略,MVC全名是ModelViewController即模型-视图-控制器,作为一种软件设计典范,用一种业 ...
- Android 腾讯入门教程( 智能手表UI设计 和 MVC模式 )
*****注意到mvc 在android 中是如何进行分层分域执行各自的功能.**** 官方推荐的按钮尺寸是48像素 前端之Android入门(1):环境配置 前端之Android入门(2):程序目录 ...
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
随机推荐
- python关于时间的计算,time模块
import time, datetime # time.time 返回当前时间的时间戳(1970纪元后经过的浮点秒数)(格林尼治时间). # 1分钟60秒,1小时3600秒,1天86400秒. pr ...
- struts2 的学习
1.struts.xml 中的action不是代表一个action类(控制器),而是代表一次访问,所以action的name属性和访问路径有关.配置文件中的package的namespace属性其实就 ...
- 201621123010《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...
- 安装sybase服务器并连接数据库
一. 安装sybase服务器(根据安装指南安装) win32位的系统安装1550_winx86_32+补丁包eBF18157 win64位的系统安装ase157_winx64_安装包 如果不创建服务器 ...
- "Incorrect string value: '\\xE7\\x89\\x8C\\xE5\\xB1\\x80...' for column 'name' at row 1")
出现这个错误的原因是,数据库的编码格式为latin1 而我要将utf8的中文插入到数据库中. mysql> alter database xxx default character set ut ...
- 《TensorFlow实战》读书笔记(完结)
1 TensorFlow基础 ---1.1TensorFlow概要 TensorFlow使用数据流图进行计算,一次编写,各处运行. ---1.2 TensorFlow编程模型简介 TensorFlow ...
- 端到端文本识别CRNN论文解读
CRNN 论文: An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Applica ...
- 配置阿里云ECS支持IPv6,解决苹果app审核失败问题
前几天iOS的App提交给苹果审核没通过,给出的原因是:该应用在 IPv6 的环境下无法使用.检查发现:阿里云优化过的系统没有启用IPv6协议,需要配置启用一下,但是只单独启用IPv6也是无法直接提供 ...
- 黑电-逻辑地址-0X4EB9FDE3- %o %d %x
****************************************************************************** 编程语言通常规定是以0开头的数字是八进制数 ...
- stenciljs 学习十三 @stencil/router 组件使用说明
@stencil/router 组件包含的子组件 stencil-router stencil-route-switch stencil-route stencil-route-link stenci ...