0基础学习Java开发之Java Wed编程----《第四章使用三层架构实现业务处理》--理解JNDL --连接池--理解三层架构--分层--使用三层架构--


什么是JNDL

 

JNDL就是java命名和目录接口,通过名称将资源与服务器进行关联,简单的说JNDL就是定位一个资源等... JNDL的优点就是它可以把我们整个资源和服务独立出来,所以说他完成了一个解耦的操作,还可以把我们资源和维护的工作也完全独立出来,他也简化了我们本应用的维护工作,同时只要我们定义了一个JNDL的资源,可以在不同的应用,不同的范围,大家都来调用这个资源,他也实现了我们资源的共享,比如说我们的公司名称,在我们服务器下有可能有十几个二十几个项目,我们这二十几个项目,都可以共享获取这样的资源,获取公司的名称,这样就不需要我们在每一个项目都来配置一个我们公司的名称,这就是我们JNDL的做i用与优点。

JNDL在Tomcat的使用

对于我们Tomcat他是支持我们Tomcat的技术的,这个时候我们使用Tomcat发布一条信息这个时候我们wed其他应用程序就可以通过JNDL技术来读取这样的一个信息,首先我们在下图发布信息找到文件地址context.xml文件在这个文件里面我们就可以配置我们文件的信息,在我们的文件里面我们找到<Context>的标签,在标签里面我们配置一个<Environment  代表的是我们资源的一个信息,我们这个资源信息他有三个属性,name 是用来写一个名称,然后我们使用JNDL来查找名称和资源, value就是我们具体的一个值,我们可以使用JNDL的name来查找这样的一个值, type指的是我们value里面的数据类型,但是在类型前面我们要写上我们的包名称,对于我们JNDL来说,它提供了一个接口查找JNDL ,然后从创建一个Context对象然后调用lookup()的方法,里面需要前缀,然后获取到我们的值了,把值输出来。

我们来演示一遍,首先在我们Tomacat目录下找到context.xml,找到Context标签,并配置,<Environment>,然后我们创建jndi.jsp页面,在创建一个jsp小脚本,首先我们创建Contex 接口 InitialContext() 来获取我们的资源,接下来我们就可以使用Contex来查找我们相应的资源了,Context里面有一个属性叫,lookup("")他前面要查找我们Tomcat到Context <Environment>他目录下的资源啊,前面是固定的,他为了防止我们资源的冲突,而为我们Tomcat里面这样的一个目录,前面我们Tomcat的目录写完了,接下来就是我们编写Tomcat的名称,"tjndi" ,我们把值付给哦我们查询出来的结果,他返回的是obbjace类型,我们使用强转String类型,这样我们的资源就写完了,我们把我们的资源打印出来,我们启动服务器到jndi.jsp运行一下,运行完成输出我们Tomcat里面定义的值,Tomcat里面的资源我们已经通过<Environment>,来获取出来了。

 

 

 

 

使用JNDL管理数据库资源 

为什么使用连接池

首先大家可以看见我们首先使用的是我们传统JDBC连接数据库的一种方式,当我们请求服务器的时候,服务器就会去判断,如果我们json请求要来操作我们的数据库,我们服务器就会执行这些操作,打开数据库的连接,执行相应的数据库操作,执行完后关闭我们的数据库连接 ,把相应的数据返回给我们浏览器,我们常用的开发模式有很大的问题,首先对于我们打开连接和关闭连接,他是一个多次重复的操作,只要我们的一次请求要来访问我们的数据库,我们的服务器就会来执行的我们的打开连接和关闭连接,这两个操作是我们避免不了的,我们打开连接和关闭连接本身的对我们性能会产生很大的影响,他是十分消耗我们系统资源的,如果我们的流量和并发特别的多的时候,关闭连接打开连接也会特别的频繁,我们系统的访问速度会大大的下降,二期我们把项目资源以及项目开关啊都写在代码里面了,我们还需要维护一些配置信息,本身就加大了代码的复杂度,就是说数量大,速度受到影响,需要维护一些配置文件,编码过度复杂,那么有没有什么办法来、解决这些问题呢,那么就用到了我们要学的连接池技术,那么连接池是什么,他是一个存放连接的池子,池子里面保存着Coonnection对象,对于这些Coonnection对象他们已经被实例化了,也就是说他们已经连接到了数据库,这个时候当我们的服务器要进行才操作的时候,它不需要打开连接,关闭连接,也不需要定义一个Coonnection对象他直接,到我们的连接池里面,来找到我们相应Coonnection对象,他就直接可以直接使用了,使用完也不需要关闭,只需要把我Coonnection还到我们的连接池,当我们其他要请求我们的服务器我们也可以,到我们的池子来访问相应的信息,这个就是我们连接池的一个概念。

 生活中的连接池

首先啊对于我们的10086来说,我们就可以把他认为是一个连接池,对于我们10086的客服来说,就是可连接的对象,每一个客服都是Coonnection对象,当我们的用户来拨打我们的10086的时候,我们就可以认为是一次请求,当我们的用户打到我们的客服中心的时候,客服中心会进行判断,首先目前有没有处于空闲状态的成员,和连接池进行对比,当我们需要对数据库进行连接的时候,我们的连接池就进行判断,我们的Coonnection对象有没有空闲的,如果发现有空闲的,他就会把我们的Coonnection和我们的数据库进行连接,我们就和我们的客服人员建立起连接,当我们处理完了我们就挂掉电话,就如关闭连接,我们的Coonnection就处于空闲状态,客服人员处于空闲状态,如果再次请求客服中心就会把空闲的再次进行连接,我们在拿连接池进行讲解,当我们的请求到达我们的连接的时候,我们连接池就会判断里面有没有我们空的Coonnection对象,如果有的话就把我们Coonnection对象分给我们的用户,同时拿check标志成忙的状态,也就是说,目前已经有人在使用Coonnection对象,当我们完成一系列操作后,我们就来释放我们check对象,我们并不是关闭,而是把我们你的Coonnection处于空闲的状态,当再次访问我们连接池就可以把空的Coonnection继续进行连接,这个就是我们连接池大概的工作原理,对于下面的图,就是对于我们连接池里面有非常多,Coonnection对象,当我们的服务器要来请求数据库的是时候,来到连接池来获取相应的对象,执行相应的操作,然后返回给我们的连接池。

        大家可能有疑问那么我们的连接池由谁来创建,什么时候创建呢,主要的是就是我们怎样具体的实例化,而不是概念,这里面就需要我们今天学的,DataSource也就是我们呢的数据源,

 
 什是数据源

        就是以连接池的形式对数据库连接进行管理,大家就可以把数据源理解成我们连接池的一种实现,我们可以通过接口来对数据进行属性和方法,

DataSource与连接池

DataSource接口对我们数据库进行管理,我们第三方框架以及第三方系统库可以实现DataSource也就是说,实现这个接口来完成,最终对连接池的管理,也就是说Tomcat他就实现了DataSource,我们的数据源,我们从Tomcat内部就看可以获取我们DataSource接口,的实例,当然是被实例化过的,通过我们获取的实例,我们就可以获取数据库连接,来执行数据库的操作。

 获取DataSource

如何从我们Tomcat来获取我们DataSource,首先我们通过Tomcat把我们DataSource发布为JNDL资源,接下来我们就可以,wed通过JNDL获得DataSource引用,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JNDI(Java Naming and Directory Interface)是Java命名和目录接口,是Java EE应用程序连接数据库的一种方式。下面是使用JNDI连接数据库的Java代码示例: 1. 首先,在Web服务器或应用服务器上配置数据源,例如,在Tomcat中,可以在server.xml或context.xml文件中添加如下配置: ```xml <Resource name="jdbc/myDataSource" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" username="myuser" password="mypassword" maxActive="100" maxIdle="20" maxWait="10000"/> ``` 2. 在Java程序中,使用如下代码获取数据源: ```java import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class JndiExample { public static void main(String[] args) { try { Context context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDataSource"); Connection connection = dataSource.getConnection(); // 在此处执行数据库操作 connection.close(); } catch (NamingException | SQLException e) { e.printStackTrace(); } } } ``` 在上面的代码中,使用InitialContext类获取Context对象,然后使用Context对象获取数据源,最后使用数据源获取数据库连接。在执行完数据库操作后,需要关闭连接。注意,上面的JNDI名称“java:comp/env/jdbc/myDataSource”需要根据实际情况修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值