其实不管什么技术只要看懂了官方文档其实都不难下面展示一个简单的JNDI示例。
然后点击4按照上边的提示做就可以了。
1、第一步:
首先复制第二条到项目的web.xml下边,并作修改如下:
<resource-ref>
<!-- 说明 -->
<description>
jndiTest
</description>
<!-- JNDI的虚拟名称 可以随便起 但要保证和context.xml中的resource的name同名 -->
<res-ref-name>
java/jndiTest
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<!-- 容器 -->
<res-auth>
Container
</res-auth>
</resource-ref>
2、第二步在页面引用注册的JNDI数据源
<%
//构造一个初始化的上下文
Context initCtx = new InitialContext();
//env环境是一个私有的环境,只能在该组件内部存取。对其它组件是不可见的。
//1.EJB1不能存取EJB2的ENV。
//2.任何一个客户端代码,不管它是运行在应用服务器的同一个JVM内或者是远程调用,均不能访问这些JNDI。
//3.组件之间是相互隔离的,不同组件之间可以定义它自己的环境参数。比如EJB1可以定义自己的环境变量参
//数:java:comp/env/red
// java:comp/env 凡是绑定在java: 名字下面的子环境,均只能在JBOSS 服务器内部才能进行访问。
//无法进行远程访问,比如DataSource 均被绑定在 java:下面。不能远程访问。而EJB,JTA均被绑定在全局范//围之内,能进行远程访问。
//检索指定的对象
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//检索 jndi数据源的虚拟路径 查询它时返回一个和它相对应的一个目录空间!
DataSource ds = (DataSource)envCtx.lookup("java/jndiTest");
Connection conn = ds.getConnection();
Statement statement=conn.createStatement();
ResultSet rs=statement.executeQuery("select * from student");
while(rs.next())
{
out.println(rs.getObject(1)+"\t"+rs.getObject(2)+"\t"+rs.getObject(3)+"</br>");
}
%>
这一步需要导入如下的类:(注意千万别导入错误):
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
3、第三步
在tomcat的apache-tomcat-7.0.30\conf配置目录下边选择context.xml在</Context>结束标签之前添加如下内容:(其中name的名字必须和项目的web.xml配置相同)
<Resource name="java/jndiTest"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.37.44.26:3306/jnditest"
maxActive="8"
maxIdle="4"/>
4、最终结果展示(从数据库查找的结果如下:)
一个简单的JNDI应用程序完成了
此示例是按照tomcat官方文档doc做的文档目录在tomcat的apache-tomcat-7.0.30/webapps/docs/index.html下边,打开之后可以在左边看到:
然后点击可以看到如下:
然后点击4按照上边的提示做就可以了。
1、第一步:
首先复制第二条到项目的web.xml下边,并作修改如下:
<resource-ref>
<!-- 说明 -->
<description>
jndiTest
</description>
<!-- JNDI的虚拟名称 可以随便起 但要保证和context.xml中的resource的name同名 -->
<res-ref-name>
java/jndiTest
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<!-- 容器 -->
<res-auth>
Container
</res-auth>
</resource-ref>
2、第二步在页面引用注册的JNDI数据源
<%
//构造一个初始化的上下文
Context initCtx = new InitialContext();
//env环境是一个私有的环境,只能在该组件内部存取。对其它组件是不可见的。
//1.EJB1不能存取EJB2的ENV。
//2.任何一个客户端代码,不管它是运行在应用服务器的同一个JVM内或者是远程调用,均不能访问这些JNDI。
//3.组件之间是相互隔离的,不同组件之间可以定义它自己的环境参数。比如EJB1可以定义自己的环境变量参
//数:java:comp/env/red
// java:comp/env 凡是绑定在java: 名字下面的子环境,均只能在JBOSS 服务器内部才能进行访问。
//无法进行远程访问,比如DataSource 均被绑定在 java:下面。不能远程访问。而EJB,JTA均被绑定在全局范//围之内,能进行远程访问。
//检索指定的对象
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//检索 jndi数据源的虚拟路径 查询它时返回一个和它相对应的一个目录空间!
DataSource ds = (DataSource)envCtx.lookup("java/jndiTest");
Connection conn = ds.getConnection();
Statement statement=conn.createStatement();
ResultSet rs=statement.executeQuery("select * from student");
while(rs.next())
{
out.println(rs.getObject(1)+"\t"+rs.getObject(2)+"\t"+rs.getObject(3)+"</br>");
}
%>
这一步需要导入如下的类:(注意千万别导入错误):
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
3、第三步
在tomcat的apache-tomcat-7.0.30\conf配置目录下边选择context.xml在</Context>结束标签之前添加如下内容:(其中name的名字必须和项目的web.xml配置相同)
<Resource name="java/jndiTest"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.37.44.26:3306/jnditest"
maxActive="8"
maxIdle="4"/>
4、最终结果展示(从数据库查找的结果如下:)
一个简单的JNDI应用程序完成了