tomcat使用JDNI配置信息和使用信息。用于JDBC连接池
JNDI:
JNDI(java Naming and Directory Interface),java命名和目录接口。JNDI的作用就是:在服务器上配置资源,然后通过统一的方式来获取配置的资源
在tomcat中配置资源:
配置在Context中。一般我们将JDNI配置的资源放在tomcat下的conf-->Catalina-->localhost文件夹中
配置文件名为: 项目名.xml
例子:
<Context>
<!--
name:指定资源的名称
factory:资源由谁负责创建.factory基本是固定的
type:资源的类型
其他的东西都是资源的参数
-->
<Resource name="jdbc/dataSource"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:mysql://127.0.0.1:3306/demo"
driverClass="com.mysql.jdbc.Driver"
user="guodaxia"
password="961012gz"
acquireIncrement="3"
initialPoolSize="10"
/>
</Context>
2、获取资源
配置资源的目的当然是为了获取资源了。只要你启动了Tomcat,那么就可以在项目中任何类中通过JNDI获取资源的方式
来获取资源了。
例子:
Context initCtx=new InitialContext();
Context envCtx=(Context)initCtx.lookup("java:comp/env"); //java:comp/env也基本上是固定的
DataSource dataSource=(DataSource)envCtx.lookup("jdbc/dataSource");
Connection con=dataSource.getConnection();
获取资源:
Context:javax.naming.Context;
InitialContext:javax.naming.InitialContext;
lookup(String)获取资源的方法,其中“java:comp/env"是资源的入口,这是固定的名称,"jdbc.dataSource"对应Resource
中配置的name值,这回获取的就是资源对象了
例子:
<Context> <!-- name:指定资源的名称 factory:资源由谁负责创建 type:资源的类型 其他的东西都是资源的参数 --> <Resource name="jdbc/dataSource" factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource" jdbcUrl="jdbc:mysql://127.0.0.1:3306/demo" driverClass="com.mysql.jdbc.Driver" user="guodaxia" password="961012gz" acquireIncrement="3" initialPoolSize="10" /> </Context> package cn.itcast.servlet; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; public class AServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { /* * 1、创建JNDI的上下文对象 */ Context context=new InitialContext(); // //2、查询进入入口 // context=(Context) context.lookup("java:comp/env"); // //3、查询创建指定bean // DataSource dataSource=(DataSource) context.lookup("jdbc/dataSource"); //第二和第三步骤可以合为一步 DataSource dataSource=(DataSource) context.lookup("java:comp/env/jdbc/dataSource"); //4、得到Connection对象 Connection conn=dataSource.getConnection(); System.out.println(conn); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } }
所用jar: