1.JNDI是什么:
JNDI(Java Naming and Directory Interface)是一个有关应用程序设计的API,为开发人员提供了查找和访问各种命名目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。
2.JNDI可访问的现有的目录及服务有:
DNS、文件服务 、数据库 目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
3.JNDI的简单实用:
3.1Tomcat根目录\conf\context.xml文件为全局上下文配置文件,对所有的Web应用有效,所以发布的信息配置在此文件中,再通过JNDI来查找信息。
3.2可以在context.xml文件添加以下:
<Context>
<Environment name="jndi/name" value=" hello JNDI " type="java.lang.String"/>
</context>
3.3介绍:
<Environment >元素用于配置命名的值,它的属性有:
Name:环境条目名称,相当于 java:comp/env的名称。
Type: 环境条目的Java类名全称。
Value: 通过JNDI context 请求时,返回给应用的参数值。
3.4如何通过JSP代码访问到<Environment>内的值 代码如下:
<%@page import="javax.naming.Context"%>
<%
Context ctx = new InitialContext();
String textjndi = (String) ctx.lookup("java:comp/env/jndi/name");
out.print(textjndi);
%>
4. 数据库连接池:
4.1什么是连接池:
连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。 连接池的主要优点有以下三个方面。
第一、减少连接创建时间。连接池中的连接是已准备好的、可重复使用的,获取后可以直接访问数据库,因此减少了连接创建的次数和时间。
第二、简化的编程模式。当使用连接池时,每一个单独的线程能够像创建一个自己的JDBC连接一样操作,允许用户直接使用JDBC编程技术。
第三、数据库连接池在初始化时创建一定数量的数据库连接并放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库是否被使用,连接池都将确保至少拥有这么多连接数量。连接池的最大数据库连接数量限定了这个连接池能占有最大连接数,当连接超过最大连接数时,这些请求将被加入等待队列中。
5.JNDI+Tomcat配置数据源的两种方式
5.1、全局jndi配置
此种配置需要在server.xml中配置数据源,具体的配置步骤如下:
1、在tomcat服务器的lib目录下加入数据库连接的驱动jar包
2、修改tomcat服务器的conf目录下server.xml配置文件
编辑server.xml文件,添加全局JNDI数据源配置,配置如下:
<!-- |-
name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,
为了不与其他的名称混淆,所以使用jdbc/oracle,现在配置的是一个jdbc的关于oracle的命名服务。
auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
type:此名称所代表的类型,现在为javax.sql.DataSource
maxActive:表示一个数据库在此服务器上所能打开的最大连接数
maxIdle:表示一个数据库在此服务器上维持的最小连接数
maxWait:最大等待时间。10000毫秒
username:数据库连接的用户名
password:数据库连接的密码
driverClassName:数据库连接的驱动程序
url:数据库连接的地址
-->
<!--配置MySQL数据库的JNDI数据源-->
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="40"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/NewsManagerSystem"/>
3、创建一个web测试项目text,在web.xml中添加JNDI配置的资源引用
<!--MySQL数据库JNDI数据源引用 -->
<resource-ref>
<description>MySQL DB Connection</description>
<res-ref-name>mysqlDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
简介:
Description:对所引用的资源说明
Res-ref-name:指定所引用资源的JNDI名字,与<Resource>元素中name属性对应
Res-type:指所引用资源的类名字,与<Resource>元素中type属性对应
Res-auth:指管理所引用资源的Manager,与<Resource>元素中auth属性对应
4.查询数据库topic 表中的 标题。进行输出。
<%
Connection conn = null;
PreparedStatement ps =null;
ResultSet rs = null;
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
conn = ds.getConnection();
ps = conn.prepareStatement("select * from topic");
rs=ps.executeQuery();
while(rs.next()){
%>
<a href="#"><%=rs.getString(“tname”) %></a></br>
<%
}
%>
5. 在使用JNDI获取数据源对象时,分为四步骤:
(1) 配置context.xml文件。
(2) 配置web.xml文件。
(3) 添加数据库驱动。
(4) 编写代码.使用lookup()方法获得数据源对象。
6、什么是三层?
UI(表现层):主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。
BLL:(业务逻辑层):UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
DAL:(数据访问层):与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLL,BLL反映给DAL,DAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)
思想来源于生活:
服务员:只管接待客人;
厨师:只管做客人点的菜;
采购员:只管按客人点菜的要求采购食材;
7,为什么使用三层?
使用三层架构的目的:解耦!!!
拿饭店的例子来讲:
(1)服务员(UI层)请假——另找服务员;厨师(BLL层)辞职——招聘另一个厨师;采购员(DAL)辞职——招聘另一个采购员;
(2)顾客反映:1>你们店服务态度不好——服务员的问题。开除服务员;
2>你们店菜里有虫子——厨师的问题。换厨师;
任何一层发生变化都不会影响到另外一层!!!