月度归档:2013年07月

Windows 系统下Git安装图解

来源:互联网

简单来说Git是一个免费的、开源的版本控制软件,从功能上讲,跟我们比较熟悉的Subversion(SVN)这类版本控制软件没什么两样。由于工作的需求,需要在WinXP下安装git配合团队完成相应的工作,以前一直在别的系统下使用,今天经Drupal花园的龙马指点终于安装成功了,特意贴出来与有需要的童鞋一起分享。

获取Git软件:

大家可以通过两种方式获取Git的软件,一个是在官网上获取,另一个可以点击这里下载。只是有一点需要说明就是需要下载支持WinXp系统的版本。

Git在WinXP安装过程

在WinXP下安装Git详细步骤参考如下安装示意图:

wps_clip_image13158_thumb[1]

wps_clip_image638_thumb[1]

wps_clip_image32409_thumb[1]

wps_clip_image17364_thumb[1]

wps_clip_image9841_thumb[1]

wps_clip_image2781_thumb[1]

wps_clip_image3905_thumb[1]

wps_clip_image10701_thumb[1]

wps_clip_image27886_thumb[1]

点击上图的“Finish”后Git的安装就完成了,安装完成后需要在进行一下环境变量的设置,改变环境变量的具体步骤可以参考下图:

wps_clip_image3443_thumb[1]

wps_clip_image18332_thumb[1]

wps_clip_image31141_thumb[1]

wps_clip_image26347_thumb[1]

wps_clip_image26146_thumb[1]

生成ssh公钥

双击桌面上的git运行程序:

wps_clip_image24534_thumb[1]

启动git的运行程序:

wps_clip_image26468_thumb[1]

在程序中依次输入:

1、配置email,命令如下:

$git config --global user.name "your name"

$git config --global user.email "your@email.address"

其中"your name"换成你的名字,"your@email.address"换成你的邮箱地址。

2、生成公钥,用于身份认证:

ssh-keygen.exe -C "your@email.address" -t rsa

这样就可以在你的用户下取得需要的公钥匙,公钥位于你的电脑中“C:\Documents and Settings\Airen\.ssh”的“id_rsa.pub”文件下:

wps_clip_image8872_thumb[1]

你使用文本编辑器打开“id_rsa.pub”就可以看到公钥的内容:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAs1c3zL3IbjhMbSCwooZ7WHlkga7xq+5inQUCTqmZ7xqBclvEwofDd4BYts99X+xfNXgGSlil85wrOfXX9ZH27ZmPR3Z8KWp3pekFOvk7iLmt0b9lZqhgpUll76Q7D2KED8se9gV4FNxg05ZK6AUZm70cBj9sZqjV//weE7ufkibcqd3ngHsTKB+0Js8NcMwldHmxIxZEwufxgT/D4EGQCA6ijjuj9ILIydzzLwWzKoH1wuGDU5LAE1qptIpAt50uWxPNlsBPoqZnbJjHg+As9If6tRkG4YzkwzSBTP725bJDcWkArhWRRkJ2cwUgcJYRyCY+8jI2oxDawYjWQ+w9HQ== airenliao@gmail.com

此时只要把你的公钥放进你项目的服务中就可以进行git的相关操作。

关于git的命令更多操作,可以到官网查阅,或点击这里查看更多的命令操作。

顺便列出解决中文目录支持问题:

1、ls不能显示中文目录

解决办法:在git/etc/git-completion.bash中增加一行:

alias ls='ls --show-control-chars --color=auto'

2、git commit不能提交中文注释

解决办法:修改git/etc/inputrc中对应的行:

set output-meta on

set convert-meta off

3、git log无法显示中文注释

解决办法:在git/etc/profile中增加一行:

export LESSCHARSET=iso8859

到这时有关于git在winxp下安装就介绍完了,希望这个能给一些朋友带来一定的帮助。同时更希望朋友们关注W3CPLUS,因为只有你们的关注才能带来我的成长。

原文地址:http://www.w3cplus.com/node/74

用virtualbox虚拟机在mac os下安装linux

近期由于个人原因更换了新的工作单位, 在新单位由于单位担心软件版权问题, 都要慢慢将操作系统过渡到有版权的系统中, 大部分采用linux系统,我分配了到了一个mac os的迷你版, 这个操作系统是购买时自带的, 因此是正版的。

本人多mac了解不多,更了解的是linux系统,因此有了mac上用虚拟机安装linux的考虑。

mac 上虚拟机本身不多, 还要考虑版权问题, vmware就淘汰出局了。

最后选择了virtualbox, 这个是免费的虚拟机软件,如下图

image_thumb[2]

https://www.macupdate.com/download/24801/VirtualBox-4.2.12-84980-OSX.dmg

下面是相关介绍:

VirtualBoxis a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers, it is also the only professional solution that is freely available as Open Source Software under the terms of the GNU General Public License (GPL).(个人使用没有问题的)

Presently, VirtualBox runs on Windows, Linux and Mac hosts and supports a large number of guest operating systems including but not limited to Windows (NT 4.0, 2000, XP, Server 2003, Vista), DOS/Windows 3.x, Linux (2.4 and 2.6), and OpenBSD. more...

VirtualBox For MAC 软件介绍

VirtualBox是德国一家软件公司InnoTek所开发的虚拟系统软件(现在被oracle收购了),它不仅具有丰 富的特色,而且性能也很优异。更是开源的,成为了一个发布在GPL许可之下的自由软件。VirtualBox 可以在 Linux 和 Windows 主机中运行,并支持在其中安装 Windows (NT 4.0、2000、XP、Server 2003、Vista)、DOS/Windows 3.x、Linux (2.4 和 2.6)、OpenBSD 等系列的客户操作系统。

假如你曾经有用过虚拟机软件的经历的话,相信使用 VirtualBox 不在话下。即便你是一个新手,也没有关系。VirtualBox 提供了详细的文档,可以助你在短期内入门。

下载地址如下:

https://www.macupdate.com/download/24801/VirtualBox-4.2.12-84980-OSX.dmg

下载完成了, 鼠标双击打开下载文件,拖动到应用程序里面就完成安装

然后是创建虚拟机了。

下图是采用virtualbox安装后的3个linux虚拟机

image_thumb[1][1]

一个是用来工作的,另外两个 用来安装 mysql,nginx来进行测试

关于创建虚拟机我们后面在介绍。

wordpress数据库结构分析

来源:互联网

最近研究了下wordpress的数据库结构,经典的wordpress必然有其经典的设计。下面是所有的表如下:

wordpress 数据库表wordpress database

以下表结构所列出的字段并不完全,只是一些关键的和比较特殊的

数据库结构-wp_posts 涉及到文章,菜单,媒体文件,操作记录等功能

字段描述
ID编号
Post_author发布者,用户ID
Post_date发布日期
Post_content内容,上传文件的描述
Post_title标题
Post_excerpt上传文件的说明
Post_status发布状态
Post_password访问密码
Post_name发布名称,媒体文件名称
Post_modified修改日期
Post_parent继承自,ID
Guid访问的url,媒体文件路径
Menu_order菜单排序
Post_type发布方式
Post_type文件格式

 

发布状态:publish-发布,draft-草稿,trash-垃圾箱,inherit-继承,private-外人不可见,pending-待审核

访问密码:发布状态为publish时,需要输入密码才可访问

发布名称:显示在url中

访问的url:将有两个url可以访问 http://localhost:42378/?p=guid和http://localhost:42378/post_name

发布方式:post,page,nav_menu_item,revision,attachment

文件格式:image/jpeg,application/msword,就是系统的文件类型

数据库结构-wp_terms 涉及到文章栏目分类,连接分类,菜单,非常容易扩展的分类方式

字段描述
Term_id项编号
Name项名称
Slug项的别名,用作友好的参数
Term_group项组多人项目会用到,yoga的每个用户是否有分类信息可以用

项的分类 数据库结构-wp_term_taxonomy

字段描述
Term_taxonomy_id项的分类编号
Term_id项id
Taxonomy分类
Description描述
Parent父级,0是顶级
Cout分类下包含内容数量

项的关系 数据库结构-term_relationships

字段描述
Object_id用到项的内容的编号
Term_taxonomy_id项的分类编号
Term_order项的排序,应该是同一个项的内容的排序

链接 数据库结构-wp_links

字段描述
Link_id链接编号
Link_urlLink_name
Link_name链接名称
Link_image链接的图片
Link_target打开方式
Link_description链接描述
Link_visible是否可见

 

权限设置

管理员 数据库结构-wp_users

字段描述
Id
User_login登陆名
User_passMd5格式密码
User_nicename昵称,自己可以看到的
User_email邮箱,用于找回密码,备份
User_url用户链接,blog
User_resistered注册时间
User_status0为可用,叶可以不分配角色或权限,
Display_name显示名称,显示在文章作者

用户数据 数据库结构-

字段描述
Umeta_id
User用户编号
Meta_key元 关键字
Meta_value元 值

元:用户的一些配置数据,比如用户所用主题,描述,昵称,是否显示管理工具,角色,权限,姓名,联系方式等,具体设置在程序中设定,格式不清楚含义

MSM Memcached Session Manager介绍及使用

对于一些大型的web2.0的网站,在正式部署时一般是部署在不同故障域的多台应用服务器上,以j2ee应用为例,一般我们都会部署在 tomcat下,假如我们部署了10台tomcat服务器,那这10台tomcat可能是部署在不同的机器上,然后将应用程序copy到这10台 tomcat下,然后启动所有tomcat,一般来说这样做的目的是为了达到负载均衡以及避免单点故障,另外也考虑到国内网络环境的原因,避免跨网络运营 商访问而导致访问速度低下的问题,当然不要忘了坐镇这10台tomcat前端的还有我们的反向代理服务器,比如nginx,这个就是另一个话题了,我今天 主要讲的是,对于这种分布式tomcat环境,我们如何保证session 的唯一性(我假定你知道session是什么)。这也是在日期公司的一个项目中负责解决的一个问题,当然实际上这并不是什么新的议题,之前就有很多解决方案,但是一般来说的大体的解决方案是自己通过编写一段代码或者通过配置tomcat的filter,将产生的session放到同一个内存数据库中,事实 上这确实可行的,只不过我比较懒,我总是觉得这种问题应该有更省事更成熟的解决方案,那确实是有的,也就是我马上介绍的 Memcached_Session_Manager,简称msm,这就是一个用于解决分布式tomcat环境下session共享的问题的开源解决 方案。

一 简介

(以下内容由个人根据msm官网大意翻译,原文地址:http://code.google.com/p/memcached-session-manager/

引言

MSM--memcached session manager是一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。

对于非黏性Session,memcached直接存储session。

除memcached外,还可以其他缓存组件如memcachedb, membase等。

特性

支持Tomcat6、Tomcat7

支持黏性、非黏性Session

无单一故障点

可处理tomcat故障转移

可处理memcached故障转移

插件式session序列化

允许异步保存session,以提升响应速度

只有当session有修改时,才会将session写回memcached

JMX管理&监控

MSM解决的问题

假设你有一个Tomcat集群,使用黏性session,如何应对单点故障问题?为了应对更多的并发量和可用性,你可以不断的增加Tomcat节点,但是单点故障仍旧会是个问题:如果使用黏性Session,一个Tomcat故障时,其他Tomcat并不能接管故障Tomcat节点的Session。

解决此问题的思路就是将黏性Session同时保存在Memcached中,如果单个Tomcat发生故障,集群中的其他Tomcat可以从Memcached中得到Session信息。

【注】对于非黏性Session,MSM  V1.4.0及以后版本已经支持。

MSM如何工作

【注】以下论述仅针对黏性Session

安装在Tomcat上的MSM使用本机内存保存session,和StandardManager一样。另外,当一个请求结束时,session会被送回Memcached进行备份。当下一次请求开始时,本地Session可用,直接服务,请求结束后,session又被送回Memcached备份。

当集群中的一个Tomcat挂掉,下一次请求会被路由到其他Tomcat上。负责处理此此请求的Tomcat并不清楚Session的信息。此时它会从Memcached查找该Session,更新该Session并将其保存在本机内容。此次请求结束,session被修改,送回Memcached备份。

.clip_image001

What else

上边介绍的是处理Tomcat故障转移,MSM又是如何处理Memcached故障转移呢?

如果一个Memcached故障,当前Memcached中的Session会转移到其他Memcached节点,同时,JSESSIONID被修改并送回浏览器。

如果使用黏性Session,应确保loadbalancer中配置生成的JSESSIONID无任何后缀。

SESSIONID的格式

MSM知道Memcached节点列表,这些节点标识会存储在SESSIONID中,SESSIONID值类似:602F7397FBE4D9932E59A9D0E52FE178-n1 【其中n1为Memcached节点标识】

二 安装

参考网站:http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

环境

1. Linux 环境

2. Tomcat7.X (3台),在同一台机器上启动三台Tomcat需要修改conf/server.xml中的三个端口:8080,8005,8009

3. MemBase (1台),也可采用memcached,使用方法一样,只是在java客户端连接时有不同。

4. nginx

准备的jar包

注意:不同的tomcat版本(tomcat6,tomcat7)所需的包不一样,需要针对tomcat版本下载对应的包.

1.这是采用的最新稳定版1.6.1,序列化方式使用的是kryo,注意版本要求与msm版本基本一致,建议统一采用最新稳定版,如下。其中序列化方式是可选的。

clip_image003

2.这是采用的javolution的序列化方式所有需要的包

clip_image005

建议采用kryo序列化方式,效率更高。

配置

1. 将上面所提到的包全部拷贝到tomcat的lib下(三台tomcat都需要)

2. 修改每台tomcat的conf目录下得context.xml文件或者server.xml文件,在其中加入如下任意一段代码(注意:当使用多台tomcat时,一定要使用non-sticky模式):

A:使用默认的sticky session,kryo序列化方式,memcached缓存

Java代码

  1. <Context>
  2.   ...
  3.   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  4.     memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"
  5.     failoverNodes="n1"
  6.     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
  7.     transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
  8.     />
  9. </Context>

B:使用non-sticky session

Java代码 clip_image008

  1. <Context>
  2.   ...
  3.   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  4. memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"
  5.     sticky="false"
  6.     sessionBackupAsync="false"
  7.     lockingMode="uriPattern:/path1|/path2"
  8.     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
  9. transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
  10.     />
  11. </Context>

C:使用membase

Java代码

  1. <Context>
  2.   ...
  3.   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  4.     memcachedNodes="http://host1.yourdomain.com:8091/pools"
  5.     username="bucket1"
  6.     password="topsecret"
  7.     memcachedProtocol="binary"
  8.     sticky="false"
  9.     sessionBackupAsync="false"
  10.     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
  11. transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
  12.     />
  13. </Context>

当使用javolution序列化方式时将:

Java代码 clip_image008[1]

  1. transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory”

替换为:

Java代码 clip_image008[2]

  1. transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

配置完成后,分别启动tomcat,正常启动说明msm配置成功。

3. 最后附上nginx配置:

修改配置文件nginx\conf\nginx.conf

1. 找到内容server {

在它的上面加入如下内容:

Java代码

  1. upstream  10.6.53.120 {
  2. ip_hash;  ----#ip_hash策略将同一IP的所有请求都转发到同一应用服务器
  3. server   10.6.53.120:8080;---------我的tomcat端口号
  4. server   10.6.53.120:7080;
  5. server   10.6.53.120:6080;
  6. }<span>(</span><span style="">这是负载切换使用的服务器网站</span><span>IP)</span>

2. 找到

Java代码 clip_image008[3]

  1. location / {
  2. root   html;
  3. index  index.html index.htm;
  4. }

把内容更改如下:

Java代码

  1. location / {
  2. proxy_pass http://10.6.53.120
  3. proxy_redirect default;
  4. proxy_connect_timeout 10;  added by me(跟代理服务器连接的超时时间,必须留意这个time out时间不能超过10秒.当一台服务器当掉时,过10秒转发到另外一台服务器)
  5. }

3.  找到

Java代码 clip_image008[4]

  1. server {
  2. listen       80;
  3. server_name  localhost;

把内容改成如下:

Java代码 clip_image008[5]

  1. server {
  2. listen       80;
  3. server_name  10.6.53.120;

(这是监听访问域名绑定那台服务器80端口的请求)

到这里所有的配置已经完成,现在准备一个简单的web工程,并分别部署到三台tomcat下。启动memcached(membase),启动三台tomcat,启动nginx,然后在地址栏输入url地址,看能否成功访问。关闭其中一台tomcat,看是否仍然能够正常访问,能够则说明配置nginx配置成功。

三 原理

MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪。Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持 sticky  和 non-sticky 模式。需要注意的是使用sticky模式时需要配置jvmroute参数,配置方式如下:

配置$CATALINA_HOME/conf/server.xml

Java代码 clip_image008[6]

  1. <Engine name="Catalina"defaultHost="localhost"jvmRoute="tomcat2">

注意每台tomcat的jvmroute参数都不能一样

Sticky 模式:tomcat session 为 主session, memcached 为备 session。Request请求到来时, 从memcached加载备 session 到 tomcat (仅当tomcat jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。下面是sticky模式时响应的流程图(图片来源网络):

clip_image009

Non-Sticky模式:tomcat session 为 中转session, memcached1 为主 sessionmemcached 2 为备session。Request请求到来时,从memcached 2加载备 session 到 tomcat,(当 容器 中还是没有session 则从memcached1加载主 session 到 tomcat, 这种情况是只有一个memcached节点,或者有memcached1 出错时),Request请求结束时,将tomcat session更新至 主memcached1和备memcached2,并且清除tomcat session 。以达到主备同步之目的,如下是non-sticky模式的响应流程图:(图片来源网络)。

clip_image010

结束

声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。

对java:comp/env的研究

来源:互联网

这两天研究了一下 context.lookup("java:comp/env/XXX")和直接context.lookup("XXX")的区别

网上关于这两个的文章也很多,但是都说得很难理解,比如什么ENC环境啊什么的,各种概念。

其实说得简单点:context.lookup("java:comp/env/XXX")只能用在J2EE环境,即是如果你自己写一个main 函数,想通过context.lookup("java:comp/env/XXX")这样的方式来访问JNDI服务,这是不可能的。
因为:java:comp/env/是一个J2EE环境的定义,说白了就是代表当前J2EE应用的环境,比如你自己项目的Web环境或者是EJB 环境,那是不是只要是个Web项目,就能用context.lookup("java:comp/env/XXX")这种方式访问JNDI服务了呢?也不 是!!!
使用这样的方式必须做一次 当前应用环境 到 资源名 的映射。
在web.xml文件中有这样的标签:
<resource-env-ref></resource-env-ref>
<resource-ref></resource-ref>
<ejb-local-ref></ejb-local-ref>
<ejb-ref></ejb-ref>
这些标签就是用来建立当前应用环境到服务器资源的映射的。
有了这样的映射之后,就能采用context.lookup("java:comp/env/XXX")的方式来访问JNDI资源了。

注意:context.lookup("XXX")在任何时候都是有效的,只要XXX确实是一个存在的JNDI名。

举个例子:
用weblogic10的控制台定了了一个oracle数据源,这个数据源的JNDI名称是:adsl,那么只要正确连接上了 weblogic(当然需传递URL,用户名和密码还有weblogic的JNDI工厂对象,这不属于该文的讨论范围)在任何地方都能用 context.lookup("xxx")得到这个数据源了,但是想通过context.lookup("java:comp/env/jdbc /adsl")访问到这个数据源,就不行了。如果想这样写的话需要做两件事情:
1、确保你的调用程序是一个web项目或者EJB项目,并部署到weblogic上。(例子使用web项目)
2、在web项目的web.xml里面加上如下配置:
<resource-ref>
<res-ref-name>jdbc/adsl</res-ref-name>
<res-auth>Container</res-auth>
<mapped-name>adsl</mapped-name> <!-- 这个必须和你的全局JNDI数据源名称一样 -->
</resource-ref>
那么你就能在你的web程序里通过context.lookup("java:comp/env/jdbc/adsl")访问到这个数据源了。

关于EJB的访问也类似这样,可以直接访问全局EJB的JNDI名,和可以映射之后从java:comp/env/下进行访问。

以上的讲解有错。。。。。
上面的情况只适用于weblogic和J2EE 2.5的规范下。
一:如果不是J2EE 2.5的规范:那么在你的web项目的web.xml内将根本不会存在<mapped-name>这个标签,那么怎样才能映射全局JNDI资源到你的项目呢?
以weblogic为例,你需要在和web.xml同级的目录下建立:weblogic.xml文件,在该文件里面写上:
<weblogic-web-app>
<resource-description>
<res-ref-name>jdbc/adsl</res-ref-name>
<jndi-name>adsl</jndi-name><!-- 这个就是全局JNDI资源名 -->
</resource-description>
</weblogic-web-app>

然后你仍然需要在web.xml里面配置上:
<resource-ref>
<res-ref-name>jdbc/adsl</res-ref-name>
<res-auth>Container</res-auth>
</resource-ref>
这样你才可以在你的程序里面通过context.lookup("java:comp/env/jdbc/adsl")访问到这个数据源。
这个是weblogic.xml的官方帮助文档:http://edocs.weblogicfans.net/wls/docs92/webapp/weblogic_xml.html

二:如果不是使用weblogic,可参见这篇文章:http://blog.csdn.net/lovingprince/article/details/6577920
其实各种不同的J2EE容器,都用不同的配置方式,以我目前的测试来看,weblogic似乎不能配置“私有的JNDI资源”,就是不能配置自己项目单独的JNDI资源(这只是我的观点,我目前没发现怎么在weblogic里面配置私有JNDI资源)
但是研究tomcat6之后发现,tomcat可以配置 全局JNDI 和私有JNDI(注意这里说的Tomcat6):
!!!首先想要说明的是Tomcat的配置不需要修改web.xml里面的任何内容!!!!!
!!!Tomcat的全局JNDI资源不能直接访问,必须有java:comp/env/前缀!!!!!!
全局的JNDI配置在server.xml里面的<GlobalNamingResources>标签里面添加如下配置:
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/test"
username="root"
password="root"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
然后某一个项目想要引用这个全局的JNDI,就需要在项目的META-INF下面建立context.xml文件,在里面写上:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<ResourceLink name="jdbc/test" global="jdbc/test" type="javax.sql.DataSource"/>
</Context>
这样就可以在程序里面通过context.lookup("java:comp/env/jdbc/test")进行访问了。

私有的JNDI有三种方式可以配置:
1、可以直接在server.xml里面的<Host>节点下添加如下配置:
<Context path="/test_tomcat6_jndi">
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/test"
username="root"
password="root"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
</Context>
这样就可以直接在程序中通过context.lookup("java:comp/env/jdbc/test")访问了,需要注意的是 path="/test_tomcat6_jndi",这个名字必须和你的项目名称相同,而且不能少了那个斜杠,而且你的项目是通过拷贝文件夹到 webapps下面的方式进行的部署。

2、 也可以在conf/context.xml里面增加如下配置:
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/test"
username="root"
password="root"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
这样就可以直接在程序中通过context.lookup("java:comp/env/jdbc/test")访问了

3、还可以在项目的WebRoot下面的META-INF文件夹下面创建context.xml文件,再在context.xml文件里面写上
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/test"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/test"
username="root"
password="root"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
</Context>
这样就可以直接在程序中通过context.lookup("java:comp/env/jdbc/test")访问了

你可以发现的是:以上的Tomcat6中的配置不管是全局还是局部,都没有修改项目的web.xml文件,但是仍然建议在web.xml中进行引用,主要是为了项目的迁移,因为有的服务器需要在web.xml中进行声明!

总之:各种服务器有时候确实有比较大的出入,特别是感觉J2EE中类似<resource-ref>这样的一些标签仍然不是很理解。