在Tomcat下配置jndi

最近在tomcat 下配了下jndi 觉得这篇文章比较好,如下

 

准备工作:
安装tomcat5.5(注意这点)
安装mysql
拷贝mysql驱动到tomcat_home/common/lib下
新建一个web工程
在工程中加入index.jsp

<%@pageimport="java.util.*,javax.naming.*,java.sql.*,javax.sql.*"%>
<%@pagecontentType="text/html;charset=BIG5"%>
<%
Contextctx=newInitialContext();
StringstrLookup="java:comp/env/jdbc/test";
DataSourceds=(DataSource)ctx.lookup(strLookup);
Connectioncon=ds.getConnection();
if(con!=null) {
out.print("success");
}else {
out.print("failure");.
}
%>

web.xml中加入

<resource-ref>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

配置tomcat
这一步的目的就是告诉tomcat如何连接数据库
可以分为两种大的类型,每种类型又有很多种配置方式
配置类型一:
(直接配置的类型,这种方式最简单)

方法一:
直接在tomcat_home/conf/localhost/下建立一个xml文件,文件名是.xml
例如我的工程名叫jndi,对应的名字叫jdni.xml
内容如下:

<Context>
<Resource
name="jdbc/test"
type="javax.sql.DataSource"
password="bb"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="50"
username="root"
url="jdbc:mysql://localhost:3306/test"
maxActive="4"/>
</Context>


方法二:
只需在tomcat_home\webapps\myapps\META-INF\context.xml中增加:

<context>
<Resource
name="jdbc/test"
type="javax.sql.DataSource"
password="bb"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="50"
username="root"
url="jdbc:mysql://localhost:3306/test"
maxActive="4"/>
</context>


说明:这种配置需要告诉tomcat resource的内容,resource应用于什么地方
第一种方法通过文件名知道了app的name
第二种方式本身就在app内部,所以name肯定知道
两种方式都要放在context中

配置类型二
(配置全局resource,然后通过resourcelink来映射)

步骤一:配置全局resource(这一步对于所有的配置都是一样的)
打开tomcat_home/conf/server.xml加入

<Resource
name="jdbc/test"
type="javax.sql.DataSource"
password="bb"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="50"
username="root"
url="jdbc:mysql://localhost:3306/test"
maxActive="4"/>


步骤二:映射
(映射可以配置在多个地方,也就有多个配置方法:)

方法一:(对比类型一的配置理解)
直接在tomcat_home/conf/localhost/下建立一个xml文件,文件名是.xml
例如我的工程名叫jndi,对应的名字叫jdni.xml加入如下内容

<Context>
<ResourceLinkglobal="jdbc/test"name="jdbc/test"type="javax.sql.DataSource"/>
</Context>


方法二:(对比类型一的配置理解)
在tomcat_home\webapps\myapps\META-INF\context.xml的Context中增加:

<context>
<ResourceLinkglobal="jdbc/test"name="jdbc/test"type="javax.sql.DataSource"/>
</context>


方法三:(上边两种方法都是把全局的resource 映射给jndi这个web应用,第三种方法就是把这个
全局的resource直接公开给所有的应用)
在tomcat_home/conf/context.xml的之间加入


运行测试:
打开ie,输入http://localhost:8080/jndi/index.jsp
看到success

常见错误:
1,Name jdbc is not bound in this Context
2,Cannot create JDBC driver of class '' for connect URL 'null' conf localhost
原因:
大多数是因为配置了全局的resource,但没有link造成的。
解决:
加入link就行了,link的方式见类型二的三种方法。

分析:
看到上边这么多方法,是否感觉眼花缭乱,其实不要死记配置,按照原理分析一下就好了。
你需要的是告诉tomcat哪个应用如何连接数据库。

类型一的方式对应一个应用单独使用这个配置的情况
就是直接告诉tomcat"应用名" "连接数据库需要的参数"

类型二的方式对应多个应用共享一个配置的情况
这样先配置server.xml告诉tomcat全局范围的"连接数据库需要的参数"
然后映射,映射的时候
1,如果不知道"app name(应用名)"就只需要通过文件名来传递这个信息
2,如果"app name"都知道就只需要加入映射的内容
3,如果要配置成全局公用的,就不需要"app name",本身放在tomcat的context.xml中

最后再次提醒一下:所有的配置必须放在之间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Tomcat配置JNDI,你可以按照以下步骤进行操作: 1. 打开Tomcat配置文件`tomcat/conf/server.xml`。 2. 在`<GlobalNamingResources>`元素中配置全局资源,例如数据库连接池。例如,你可以添一个`<Resource>`元素来定义一个连接池: ```xml <GlobalNamingResources> <Resource name="jdbc/myDataSource" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="your_username" password="your_password" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/your_database"/> </GlobalNamingResources> ``` 在上面的示例中,我们定义了一个名为`jdbc/myDataSource`的资源,它是一个`javax.sql.DataSource`类型的数据库连接池。 3. 在`<Context>`元素中引用全局资源。在你的Web应用程序的上下文配置文件(通常是`META-INF/context.xml`)中,你可以使用`<ResourceLink>`元素引用全局资源。例如: ```xml <Context> <ResourceLink name="jdbc/myLocalDataSource" global="jdbc/myDataSource" type="javax.sql.DataSource"/> </Context> ``` 在上面的示例中,我们将全局资源`jdbc/myDataSource`映射到本地资源`jdbc/myLocalDataSource`。 4. 在你的应用程序中使用JNDI查找资源。你可以通过在代码中使用JNDI查找资源来获取连接池实例。例如,在Java中可以这样做: ```java Context initContext = new InitialContext(); Context envContext = (Context) initContext.lookup("java:/comp/env"); DataSource dataSource = (DataSource) envContext.lookup("jdbc/myLocalDataSource"); Connection connection = dataSource.getConnection(); ``` 在上面的示例中,我们通过JNDI查找资源`jdbc/myLocalDataSource`来获取`javax.sql.DataSource`实例,并从中获取数据库连接。 请注意,这只是一个基本的示例,具体的配置和使用方法可能会因你的需求和环境而有所不同。你可以根据你的实际情况进行相应的调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值