`

Tomcat 配置JNDI服务

 
阅读更多

Generic JavaBean Resources

 

【通过/WEB-INF/context.xml配置】

第一步,新建一个Bean

 

package model;

public class Foo {
	private String ip;
	private int port;
	private String signSequence;
	
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	public int getPort() {
		return port;
	}
	public void setPort(int port) {
		this.port = port;
	}
	public String getSignSequence() {
		return signSequence;
	}
	public void setSignSequence(String signSequence) {
		this.signSequence = signSequence;
	}
	@Override
	public String toString() {
		return "Foo [ip=" + ip + ", port=" + port + ", signSequence="
				+ signSequence + "]";
	}
	
	
}

 

第二步,在src/main/webapp/下创建META-INF目录,接着新建context.xml文件

 

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="demo" path="/demo" reloadable="true">
	<Resource name="bean/Foo" auth="Container"
				type="model.Foo"
				factory="org.apache.naming.factory.BeanFactory"
				ip="10.0.0.1"
				port="9900"
				signSequence="111111"/>
</Context>

 

第三步,创建一个Servlet,在init()中进行JNDI资源的获取(容器启动时便开始获取资源)

 

package servlet;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import model.Foo;

public class InitServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		try {
			Context initCtx = new InitialContext();
			Context envCtx = (Context)initCtx.lookup("java:comp/env");
			Foo foo = (Foo)envCtx.lookup("bean/Foo");
			System.out.println(foo);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

 

第四步,在web.xml中配置InitServlet

 

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<servlet>
		<servlet-name>InitServlet</servlet-name>
		<servlet-class>servlet.InitServlet</servlet-class>
		<load-on-startup>0</load-on-startup>
	</servlet>  
	<servlet-mapping>
		<servlet-name>InitServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>

 

第五步,Eclipse中通过Maven打包(clean package -DskipTests),并将war包添加到Tomcat Server中,启动服务

 

context.xml中配置将自动被拷贝到server.xml中的Engine/Host标签下

 

<Context docBase="demo" path="/demo" reloadable="true">
	<Resource auth="Container" factory="org.apache.naming.factory.BeanFactory" ip="10.0.0.1" name="bean/Foo" port="9900" signSequence="111111" type="model.Foo"/>
</Context>

 

【另一种配置,直接在server.xml中配置Context元素,在Eclipse中就不需要通过/WEB-INF/context.xml方式配置了,配置内容与上面的相同】

 

<Context docBase="demo" path="/demo" reloadable="true">
	<Resource auth="Container" factory="org.apache.naming.factory.BeanFactory" ip="10.0.0.1" name="bean/Foo" port="9900" signSequence="111111" type="model.Foo"/>
</Context>

 

 

Context Parameters

Environment Entries

Resource Definitions

以上3种资源配置都可以通过不同方式实现

1. 通过/WEB-INF/context.xml进行配置(此文件中的配置最终会被复制到对应的<Host/>中)

2. 直接在conf/server.xml对应的Host下使用Context标签进行配置

3. 直接在conf/context.xml(该配置文件中的内容会附加到所有应用中,范围太大)

 

仍基于第一种方式配置Parameter、Environment、Resource、ResourceLink

/WEB-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>

<Context docBase="demo" path="/demo" reloadable="true">

	<!-- 只能配置字符串,通过ServletContext.getInitParameter()进行获取 -->
	<Parameter name="serverEnv" value="Test" description="Specify which environment is running"/>
	
	<!-- 可以配置各种java数据类型,通过JNDI获取 -->
	<Environment name="ThreadPoolSize" value="100"
         type="java.lang.Integer" override="false"/>
	
	<!-- 通过JNDI返回一个对象 -->
	<Resource name="bean/Foo" auth="Container"
				type="model.Foo"
				factory="org.apache.naming.factory.BeanFactory"
				ip="10.0.0.1"
				port="9900"
				signSequence="111111"/>
	<!-- 引用server.xml中GlobalNamingResources配置的Resource -->	
    <ResourceLink global="sharedDataSource" name="appDataSource" type="javax.sql.DataSource" /> 
</Context>

 

server.xml

数据源一般采用全局配置,所以在GlobalNamingResources中配置,

   当然也可以在/WEB-INF/context.xml中配置,导致仅当前项目可用,没有复用性

<GlobalNamingResources>	
		...

		<!-- 全局数据源配置 -->
		<Resource auth="Container" closeMethod="close"
			driverClassName="com.mysql.jdbc.Driver" maxActive="20" maxIdle="10"
			maxWait="10000" name="sharedDataSource" password="root"
			type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/electronic"
			username="root" />
</GlobalNamingResources>

 

获取JNDI资源

package servlet;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.sql.DataSource;

import model.Foo;

public class InitServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		try {
			//通过JNDI获取Bean对象
			Context initCtx = new InitialContext();
			Context envCtx = (Context)initCtx.lookup("java:comp/env");
			Foo foo = (Foo)envCtx.lookup("bean/Foo");
			System.out.println(foo);
			
			//直接通过getServletContext().getInitParameter()获取Context中配置的Parameter
			String serverEnv = this.getServletContext().getInitParameter("serverEnv");
			System.out.println(serverEnv);
			
			//通过JNDI获取Environment
			int poolSize = (Integer)envCtx.lookup("ThreadPoolSize");
			System.out.println(poolSize);
			
			//通过JNDI获取数据源(Tomcat默认使用DBCP连接池管理Connection)
			DataSource ds = (DataSource)envCtx.lookup("appDataSource");
			Connection conn = ds.getConnection();
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery("select count(*) from client");
			if(rs.next()) 
				System.out.println(rs.getInt(1));
			rs.close();
			stmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			
		}
		
	}
	
}

 

 

 

 注意:

 /WEB-INF/context.xml本身是不存在的,需要在/src/webapps目录下手动创建

 

如果通过/WEB-INF/context.xml创建,则该文件中的内容会自动拷贝到Tomcat的conf/server.xml中(对应的Host下)。

 

如果直接在conf/server.xml中的Host中配置JNDI,则不需要手动创建/WEB-INF/context.xml进行JNDI的配置

 

如果通过conf/context.xml进行配置,则不需要手动创建/WEB-INF/context.xml进行JNDI的配置(注意,该方式为全局配置,对所有应用都生效)

 

Eclipse中引入Tomcat后,workspace中会有一个Server文件夹

当Eclipse中设置Server Location为Tomcat Installation的情况下:

其中的server.xml与context.xml文件就是Tomcat的conf目录下的文件,对这2个文件的编辑等效于直接编辑conf目录下对应的文件

 

 

 

 

分享到:
评论

相关推荐

    Tomcat配置JNDI数据源的N种方法

    Tomcat配置JNDI数据源的N种方法

    在Tomcat配置JNDI数据源的三种方式

    在Tomcat配置JNDI数据源的三种方式

    eclipse+mysql+tomcat配置JNDI

    2. **在Tomcat中配置JNDI数据源**: 在Tomcat的`conf/server.xml`文件中,找到`&lt;GlobalNamingResources&gt;`标签,然后添加一个新的`&lt;Resource&gt;`标签来定义数据源。例如: ```xml type="javax.sql.DataSource" ...

    tomcat配置jndi数据源

    Tomcat 配置 JNDI 数据源 Tomcat 是一个流行的 Java Web 服务器,JNDI(Java Naming and Directory Interface)是 Java 中的一种命名和目录接口规范。Tomcat 中的 JNDI 数据源是指将数据库连接信息注册到 JNDI ...

    tomcat配置JNDI数据源

    【标题】:“Tomcat配置JNDI数据源” 【描述】:“在Tomcat服务器上配置JNDI数据源,特别是通过DBCP连接池的方式” 【标签】:“tomcat,配置,JNDI数据源” 【内容】:配置JNDI数据源在Java Web应用程序中是一个...

    tomcat配置jndi有全局配置和局部配置

    JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称...本文档主要是tomcat配置jndi有全局配置和局部配置:

    Tomcat中JNDI原理

    在部署该应用时,管理员可以在Tomcat的配置文件中设置相应的JNDI条目: ```xml type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mydb" username=...

    tomcat6.0 配置jndi

    【标题】:“Tomcat6.0配置JNDI” 在Java Web开发中,Tomcat作为常用的Servlet容器,经常被用于部署和运行Java EE应用程序。JNDI(Java Naming and Directory Interface)是Java平台的一项服务,它允许应用程序通过...

    intellij idea使用tomcat开发时自动部署jndi数据源

    在这个场景中,“intellij idea使用tomcat开发时自动部署jndi数据源”是一个重要的知识点,它涉及到如何在IDE中配置和管理数据库连接,以便于在应用运行时动态地查找和使用数据源。 JNDI(Java Naming and ...

    tomcat配置jndi

    **Tomcat配置JNDI详解** Java Naming and Directory Interface (JNDI) 是Java平台提供的一种标准服务,用于管理和查找应用程序中的资源,如数据源、邮件服务器等。在Tomcat应用服务器中,JNDI被用来注册和查找数据...

    tomcat-jndi

    Tomcat的JNDI服务也支持自定义命名空间,可以通过扩展`NamingResources`类并配置在`server.xml`中来实现。此外,Tomcat还支持JNDI属性文件,这使得在部署应用时可以方便地改变配置,而无需修改代码。 总结来说,...

    Tomcat6配置JNDI出错

    在本文中,我们将深入探讨“Tomcat6配置JNDI出错”这一主题,这是一个常见的问题,很多开发者在搭建和配置Java企业级应用时可能会遇到。 JNDI,全称Java Naming and Directory Interface,是Java平台的一个标准接口...

    tomcat6中配置JNDI方法

    ### Tomcat6中配置JNDI方法详解 #### 一、引言 在Java Web开发过程中,连接数据库是一项基础而重要的工作。常见的连接方式包括直接使用JDBC(Java Database Connectivity)以及通过JNDI(Java Naming and Directory...

    Tomcat6.0 JNDI数据源经典实例

    首先,我们来看配置JNDI数据源的步骤。在Tomcat的`conf/server.xml`文件中,你需要添加一个新的`&lt;Resource&gt;`元素来定义数据源。例如: ```xml &lt;!-- Edit the following lines to configure your data source --&gt; ...

    JNDI tomcat

    Tomcat,作为流行的开源Java Servlet容器,也支持JNDI服务,以便于应用部署和管理资源。 **一、JNDI基础知识** 1. **JNDI的工作原理**:JNDI通过提供统一的API,隐藏了不同命名和目录服务的实现细节。它允许开发者...

    Tomcat JNDI配置

    Tomcat JNDI 配置是 Java Web 应用程序中的一种常见配置,用于将数据库连接信息以 JNDI(Java Naming and Directory Interface)的形式存储在 Tomcat 服务器中,以便于应用程序可以通过 JNDI 来获取数据库连接信息。...

    Tomcat通过JNDI方式连接SqlServer数据库

    JNDI(Java Naming and Directory Interface)是一种Java API,用于访问命名和目录服务。在Tomcat中,我们可以使用JNDI来连接数据库。 首先,我们需要配置Tomcat来连接SqlServer数据库。我们可以在Tomcat的管理界面...

Global site tag (gtag.js) - Google Analytics