您的位置:首页 > 运维架构 > Tomcat

怎样安装和配置Tomcat中的JNDI

2010-08-11 14:28 169 查看
Tomcat Administration Web Application添加

Tomcat 5 可以通过以运行在网页浏览器的配置应用程序非常方便地进行服务器的配置。这个应用程序称为 Tomcat Administration Web Application。然而,Tomcat 5.5 以后的binary 核心安装版不再提供 Tomcat Administration Web Application。要安装后者,需要单独下载和安装。Tomcat 并没有为 Administration Web Application提供一种自动整合的安装程序。本文将讲述安装和配置的详细过程:

第一步,确认你的Tomcat 中是否已安装了Administration Web Application。首先确定Tomcat Service 正在运行。然后在浏览器中,键入 http://localhost:8080/admin,如果看到Tomcat Web Server Administration Tool 的页面,说明Administration Web Application 已安装好了。你可以省点时间,不必读下文了。如果看到的是 Tomcat's administration web application is no longer installed by default. Download and install the "admin" package to use it. 那么这篇文章就算你看对了,就是专门为你写的。

第二步,下载admin package。说实话,很多人居然找不到在哪里下载。这不怪你们。Apache Tomcat 的下载页面的指示不是很清楚,当然技术文档也不甚详尽。但是人家已经给你提供了功能强大的open source 软件,你还能抱怨什么呢?要怪就怪的工夫没下到,功夫不够深。 仔细看,http://tomcat.apache.org/download-55.cgi , 在下载页面的Binary Distributions栏下的第四大项,Administration Web Application 即是。

第三步,当解压下载的Administration Web Application 文件,比如放在c:/tom中,你会发现解压后的文件为 c:/tom/apache-tomcat-5.5.17。 这时键入 http://localhost:8080/admin 去检验admin,会发现Tomcat什么都没有改变。因为解压的admin文件还没有配置到Tomcat 的系统中。下面的步骤告诉你如何将admin文件配置到Tomcat 的服务器中。 第四步,将 c:/tom/apache-tomcat-5.5.17/conf/Catalina/localhost/admin.xml的 admin.xml 文件拷贝到c:/Program Files/Apache Software Foundation/Tomcat 5.5/conf/Catalina/localhost. 的文件夹中。注意一定要放在正确的路径的文件夹中。

Tomcat Administration Web Application配置

第一步: http://127.0.0.1:8080,进入tomcat页,用tomcat的 Tomcat Administration--->Resources--->Data Sources页面添加,参数如下:

JNDI Name:         jdbc/mysql
Data Source URL:   jdbc:mysql://localhost:3306/gamedb?autoReconnect=true&useUnicode=true&characterEncoding=GB2312
JDBC Driver Class: com.mysql.jdbc.Driver
User Name:         gamedb
Password:          gamedb
Max. Active Connections: 4
Max. Idle Connections:   2
Max. Wait for Connection:5000
Validation Query ://不添


第二步: 试页内加入代码你自己在mysql里建个表检单测试一下吧,我这里以ght_users表为例,在你的应用下做一个测试用的test.JSP,然后http访问这个jsp页,test.jsp代码如下

<%@ page contentType = "text/html; charset=gb2312" %>
<%@ page import = "java.sql.*" %>
<%@ page import = "javax.naming.*" %>
<%@ page import = "javax.sql.*" %>
<%
Context ctx=null;
DataSource ds=null;
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;

try{
ctx = new InitialContext();
if( ctx == null )
out.println("no context");
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
if( ds == null )
out.println("no datasource");
conn = ds.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
String strSql = " select * from ght_users";
rs = stmt.executeQuery(strSql);
while(rs.next()){
out.println(rs.getString(1));
}
}
catch(Exception ex){
ex.printStackTrace();
out.println(ex.toString());
}
finally{
if( rs != null )
rs.close();
if( stmt != null )
stmt.close();
if( conn != null)
conn.close();
if( ctx != null )
ctx.close();
}
%>


常见问题

Q:出现javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

A: 在yourWebApp/WEB-INF/web.XML中增加

<resource-ref>
<description>jdbc/mysql</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>


Q:出现org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '?' for onnect URL 'null',这是为什么?

A: 在%TOMCAT_HOME%/conf/Catalina/localhost下找到你的web应用对应的.xml文件,如test.xml,并在此文件的下添入代码:

<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSourcer"/>

重启tomcat。
注意:

for tomcat-5.0.18
i use ROOT in tomcat as by web app i put the following entry in E:/jakarta-tomcat-5.0.18/conf/Catalina/localhost/ROOT.xml file
for tomcat-4.1.18
i use ROOT in tomcat as my webapp i put the following entry in E:/qrules/tomcat/jakarta-tomcat-4.1.18/conf/server.xml

<ResourceLink name="jdbc/quickstart" type="javax.sql.DataSource" global="jdbc/quickstart"/>

Web界面配DBCP时,生成的是服务器的全局JNDI资源,查看%TOMCAT_HOME%/conf/server.xml可以得知tomcat修改了server.xml,在<server>下的<GlobalNamingResources>下添入了一些数据后的server.xml:

<?xml version='1.0' encoding='utf-8'?>
<Server>
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<GlobalNamingResources>
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
<Resource name="jdbc/mysql" type="javax.sql.DataSource"/>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
<ResourceParams name="jdbc/mysql">
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>password</name>
<value>gamedb</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/gamedb?autoReconnect=true&useUnicode=true&characterEncoding=GB2312</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<parameter>
<name>username</name>
<value>gamedb</value>
</parameter>
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<Service name="Catalina">
<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25">
</Connector>
<Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
</Connector>
<Engine defaultHost="localhost" name="Catalina">
<Host apPBase="webapps" name="localhost">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
</Host>
<Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
</Engine>
</Service>
</Server>


Q:如何配制DBCP只应用于指定的web application呢?

A:tomcat 5.x以后将web application的从server.xml里分离了出来,放在了 %TOMCAT_HOME%/conf/Catalina/localhost下,如你的应用为test, 那么在这个目录下就会有一个相应的test.xml与之对应,如:

<?xml version='1.0' encoding='utf-8'?>
<Context displayName="Tomcat Test Application"
docBase="C:/Program Files/Apache Software Foundation/Tomcat 5.5/server/webapps/test" path="/test" privileged="true" workDir="work/Catalina/localhost/test">
...
</Context>


Q:我如何解决中乱码问题?

A:在配制mysql的数据库url时我们加入了useUnicode=true&characterEncoding=GB2312参数,指定数据库编码方式为GB2312,其它还需要做的就是常用的一些方式,如指定 <%@ page contentType = "text/html; charset=gb2312" %>、使用filter等,这方面的资料很多,这里不再累述。

这里需要注意的是url中的“&“符号,如果手动在.xml内配制时,需将其转换为“&”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: