JNDI
1.什么是JNDI
Java Naming and Directory Interface,Java命名和目录接口
通过名称将资源与服务进行关联
2.JNDI的作用与优点
在应用与Java对象或资源之间建立松耦合的逻辑关联,简化应用对于资源的配置及维护工作
可以在更大范围、不同应用之间共享资源
3.配置JNDI
修改tomcatconfContext.xml文件
<invironment name="tjndi" value="hello JNDI" type="java.lang.String" />
获取页面 使用lookup进行查找
// javax.naming.Context提供了查找JNDI 的接口
Context ctx = new InitialContext();
// java:comp/env/为前缀
String testjndi = (String) ctx.lookup("java:comp/env/tjndi");
连接池
1.什么是连接池
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
2.为什么使用连接池
传统数据库连接方式的不足
需要经常与数据库建立连接,在访问结束后必须关闭连接释放资源
当并发访问数量较大时,执行速度受到极大影响
系统的安全性和稳定性相对较差
3.连接池的原理
客户端向服务器端请求连接, 服务器端先看连接池中是否有空的连接,如果有空的连接就让该客户端连接, 如果没有空的连接,那就看现有连接数是否达到连接池限定的个数,如果没有达到就为该客户端创建一个连接,如果达到了那就让该客户端排队,等其他客户端断开连接了,就让该客户端连接。
连接池会设定一个等待时间,超过这个时间就就是连接超时了, 一般服务器性能和网速都会有影响。
4.DataSource与连接池
javax.sql.DataSource接口的实现类
负责管理与数据库的连接
以连接池的形式对数据库连接进行管理
如何获取DataSource的实例
Tomcat支持将DataSource实现发布为JNDI资源
Web应用通过JNDI获得DataSource引用
5.实现连接池实现与数据库的连接
1.配置Context.xml文件
<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="用户名" password="密码" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/数据库名? useUnicode=true&characterEncoding=utf-8" />
属性名称 |
说明 |
name |
指定Resource的JNDI名称 |
auth |
指定管理Resource的Manager |
type |
指定Resource所属的Java类 |
maxActive |
指定连接池中处于活动状态的数据库连接的最大数目 |
maxIdle |
指定连接池中处于空闲状态的数据库连接的最大数目 |
maxWait |
指定连接池中的连接处于空闲的最长时间 |
2.在web.xml上配置resource-ref
<resource-ref> <res-ref-name>jdbc/test</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
3.添加数据库驱动文件
把数据库驱动jar文件,加入到Tomcat的lib中
4.进行代码编写 查找并获取数据源
lookup()
三层架构
1.分层模式
为什么使用分层
页面展示和逻辑掺杂在一起阅读起来不清晰。编码职责不清,修改时互相影响,难以扩展和重用
2.三层架构
1.表示层:最外层,使用户直接能够访问,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面
2.业务逻辑层:业务逻辑层的主要功能就是提供对业务逻辑处理的封装,在业务逻辑层中,通常会定义一些接口,表示层通过调用业务逻辑层的接口来实现各种操作
3.数据访问层:数据访问层就是实现对数据的保存和读取操作,数据访问,可以访问关系数据库,文本文件或XML文档等
3.层与层之间的关系
表示层依赖业务逻辑层,业务逻辑依赖于数据访问层各层之间的数据传递方向为请求与响应两个方向
4.使用三层开发的原则
1.上层依赖其下层,依赖关系不跨层
表示层不能直接访问数据访问层
上层调用下层的结果,取决于下层的实现
2.下一层不能调用上一层
3.下一层不依赖上一层
上层的改变不会影响下一层
下层的改变会影响上一层得到的结果
4.在上一层中不能出现下一层的概念
分工明确,各司其职
5.分层开发的优势
1. 职责划分清晰
2. 复用代码,提高代码的使用效率
3. 降低了系统内部的依赖程度
4. 无损替换:不会降低代码执行效率
6.三层与两层的区别
两层:
(当任何一个地方发生变化时,都需要重新开发整个系统。"多层"放在一层,分工不明确耦合度高——难以适应需求变化,可维护性低、可扩展性低)
三层:
(发生在哪一层的变化,只需更改该层,不需要更改整个系统。层次清晰,分工明确,每层之间耦合度低——提高了效率,适应需求变化,可维护性高,可扩展性高)
综上,三层架构的优势:
- 1,结构清晰、耦合度低
- 2,可维护性高,可扩展性高
- 3,利于开发任务同步进行, 容易适应需求变化
三层架构的优劣势:
- 1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
- 2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码
- 3、增加了代码量,增加了工作量
总结: