一、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校验用户名:
解决乱码
获取用户名
检查用户名是否已经存在