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;
}
}