tomcat怎么配置JNDI连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat怎么配置JNDI连接相关的知识,希望对你有一定的参考价值。

网上有好多方法,有的改server.xml 有的改context.xml 我看了个大概,迷糊的很
具体有哪几种配置连接的方法呢? 和服务器的类型有关系吗?比如tomcat5和tomcat6的连接有区别么?
还有如果是修改context.xml有修改tomcat/conf目录下的,也有为web项目METE-INF下添加的;这2种都可以吗?有什么区别?

方法有两种
与服务器类型是无关的,主要是jar包的放入有关
第一种(C3P0的配置方法为例)
第一步:加载数据驱动包。(C3P0还要导入C3P0连接池使用的Jar:c3p0-0.9.0.jar)
Tomcate 5.5 将数据库驱动包拷贝到tomcathome/common/lib目录下。
Tomcate 6.0 将数据库驱动包拷贝到tomcathome/lib目录下。
地二步:配置tomcat中service.xml:
<!--在tomcat中配置连接池属性说明
docBase web工程的文件路径
path web工程url的根目录
reloadable 当tomcat重启时候,是否重新加载配置文件
name 数据源的JNDI名
type 资源的类型,此处是数据源
driverClass数据库驱动类,根据不同的数据库 驱动类不同(我用的是MS SQL SERVICE2005)
jdbcUrl 连接字符串
factory 连接工厂类-->
<Context docBase="DataSrc61" path="/DataSrc61" reloadable="true">
<Resource name="jdbc/ds" auth="Container" type="com.mchange.v2.c3p0.ComboPooledDataSource"
maxPoolSize="200" minPoolSize="1" initialPoolSize="100" acquireIncrement="2"
idleConnectionTestPeriod="60" maxIdleTime="60"
driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
user="sa" password=""
jdbcUrl="jdbc:sqlserver://localhost:1433;DatabaseName=pubs"
factory="org.apache.naming.factory.BeanFactory"/>
</Context>
第三步:配置工程中的web.xml文件
<!– 声名工程所需资源-->
<resource-ref>
<!– JDNI资源名 -->
<res-ref-name>jdbc/ds</res-ref-name>
<!– 资源类型 -->
<res-type>com.mchange.v2.c3p0.ComboPooledDataSource</res-type>
<!– 资源范围 -->
<res-auth>Container</res-auth>
</resource-ref>

第四步:写连接类
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
public class JndiDao
public static Connection getConnectionPool3()throws Exception

Connection con=null;
Context conx=new InitialContext();
DataSource ds=(DataSource)conx.lookup("java:comp/env/jdbc/ds");
con=ds.getConnection();
return con;




第二种:(DBCP为例)
第一步:
导入DBCP连接池用到的Jar:naming-factory-dbcp.jar(JVM使用)
(commons-dbcp-1.2.2.jar为tomcat中默认有的DBCP连接池的包,而C3P0的话就要在tomcat中导入C3P0连接池使用的Jar:c3p0-0.9.0.jar)
和数据库驱动包
第二步:
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;//数据源
import org.apache.tomcat.dbcp.dbcp.ConnectionFactory;
import org.apache.tomcat.dbcp.dbcp.DataSourceConnectionFactory;

import java.sql.Connection;

public class DbcpDao
static BasicDataSource bds=null;
static ConnectionFactory cf=null;
static

bds=new BasicDataSource();
bds.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
bds.setUrl("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=pubs");
bds.setUsername("sa");
bds.setPassword("123");

//对连接池进行设置
bds.setMaxActive(300);
bds.setInitialSize(100);
bds.setMaxWait(10000);
bds.setMaxIdle(50);


public static Connection getConnectionPool()throws Exception

Connection con=null;
//创建出一个位于jvm中的DBCP连接池
cf=new DataSourceConnectionFactory(bds);
//从创建好的连接池中取得连接
con=cf.createConnection();
return con;


public static void main(String[] args)
try
long time1=System.currentTimeMillis();
//测试获得200个连接所用的时间
Connection[] cons=new Connection[200];
for(int i=0;i<cons.length;i++)

cons[i]=DbcpDao.getConnectionPool();

long time2=System.currentTimeMillis();
System.out.println(time2-time1);
catch (Exception e)
// TODO: handle exception
e.printStackTrace();



参考技术A 我常用的web项目METE-INF下添加,修改方便些
<?xml version="1.0" encoding="UTF-8" ?>
- <Context>
<Resource name="o10g" type="javax.sql.DataSource" password="tiger" driverClassName="oracle.jdbc.driver.OracleDriver" maxIdle="5" maxWait="5000" username="scott" url="jdbc:oracle:thin:@localhost:1521:test" maxActive="50" />
</Context>本回答被提问者采纳
参考技术B 我知道

怎样配置tomcat的jndi数据库连接?

参考技术A 是JDBC数据库连接吧?
先建立ODBC
一、jsp连接Oracle8/8i/9i数据库(用thin模式)
testoracle.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) %>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
二、jsp连接Sql Server7.0/2000数据库
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) %>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
三、jsp连接DB2数据库
testdb2.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) %>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
四、jsp连接Informix数据库
testinformix.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) %>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
五、jsp连接Sybase数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/tsdata";
//tsdata为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) %>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
六、jsp连接MySQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) %>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
七、jsp连接PostgreSQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/soft"
//soft为你的数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) %>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
参考技术B 1楼的答非所问,还是我来答吧。

如果是tomcat5以下,则修改conf/server.xml文件,tomcat5及以上则修改/conf/Catalina/localhost目录中的一个xml文件。在</Host>行之前插入如下的一段标签:

(以oralce为例,假设你应用的上下文根是/test,jndi是jdbc/test)

<Context path="/test" docBase="E:\test" >

<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/test">
<parameter>
<name>username</name>
<value>system</value>
</parameter>
<parameter>
<name>password</name>
<value>manager</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@192.168.0.27:1521:titan</value>
</parameter>
</ResourceParams>
</Context>

有点乱,但相信你看得懂。本回答被提问者采纳

以上是关于tomcat怎么配置JNDI连接的主要内容,如果未能解决你的问题,请参考以下文章

FineReport 部署到tomcat后配置jndi连接

Tomcat,Jboss,Weblogic通过jndi连接数据库

Spring+Tomcat的JNDI数据源连接池简单配置

Tomcat:我搞砸了我的 jndi 连接设置还是啥?

配置hibernate 4通过tomcat 7中的JNDI Datasource连接数据库

在tomcat下context.xml中配置各种数据库连接池(JNDI)