JNDI-( Java Name and Driectory Interface)

       JNDI– Java Name and Driectory Interface。

       JNDI主要用于在容器中配置某些资源,让所有项目可以使用。

       JNDI可以提供:

              1:数据库连接池。

                     自定义连接池

                     第三方连接池

                                   Dbcp

                                   C3p0

                     JNDI

              2:邮件服务器定义。

              3:加载任意的类,让所有项目都可以使用。

       JNDI:[定义在tomcat容器中,所有项目必须要通过查找的方式获取这个服务

                     Javax.naming.Context 环境(ENV)上下文。

                     它的一个了类:InitialContext   

 

 

 

Tomcat支持JNDI,到tomcat的docs查看说明:

 

配置JNDI:

由于 JNDI需要在server.xml中进行配置,所以就不用发布项目。

第一步:在tomcat/conf/server.xml中配置:

	<Context path="/aaa" docBase="D:/programfiles/MyEclipse10/wk3/day25/WebRoot"> 
					<Resource name="jdbc/mysql" auth="Container"
						type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
						url="jdbc:mysql:///db909?characterEncoding=UTF8"
						username="root" password="1234" maxActive="10" maxIdle="30"
						maxWait="-1"/>
			</Context>

name为JNDI的名字
auth JNDI的拥有者

第二步:将mysql-connection.jar放到tomcat/lib目录下

第三步:在java项目中引用


在代码中直接查询这个jndi:

第一种获取的方式:

public class TwoServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		try {
			//1声明Context上下文查找对象
			Context ctx = new InitialContext();
			//第二步:查找apache环境
			Context ctx1 = (Context) ctx.lookup("java:/comp/env");
			//第三步:从环境中找jNDI
			Object obj = ctx1.lookup("jdbc/mysql");
			System.err.println(obj);
			//第四步:测试连接是否成功
			DataSource ds = (DataSource) obj;
			Connection con = ds.getConnection();
			System.err.println(">>"+con);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

第二种:


try {
			//1声明Context上下文查找对象
			Context ctx = new InitialContext();
			//第二步:查询
			Object obj = ctx.lookup("java:/comp/env/jdbc/mysql");
			System.err.println(obj);
			DataSource ds = (DataSource) obj;
			Connection con = ds.getConnection();
			System.err.println(">>"+con);
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery("select * from users");
			while(rs.next()){
				System.err.println(rs.getString(1));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

配置的方式:


标准的池:


public class DatasourceUtils {
	private  static DataSource ds;
	static{
		try{
			Context ctx = new InitialContext();
			ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/mysql");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static DataSource getDs(){
		return ds;
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值