﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-落叶归根-文章分类-Tomcat</title><link>http://www.blogjava.net/allan-oy/category/4963.html</link><description>一个人首先要尊重别人，然后才能得到别人的尊重；一个人首先要对自己负责，然后才有资格去对别人负责。</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:26:20 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:26:20 GMT</pubDate><ttl>60</ttl><item><title>开源方案“黄页”</title><link>http://www.blogjava.net/allan-oy/articles/20962.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Tue, 22 Nov 2005 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/20962.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/20962.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/20962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/20962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/20962.html</trackback:ping><description><![CDATA[<DIV class=post>
<DIV class=postTitle><A href="http://blog.csdn.net/syliang2003/archive/2005/11/16/531168.aspx">开源方案“黄页”</A>
<SCRIPT language=javascript>document.title="开源方案“黄页” - "+document.title</SCRIPT>
 </DIV>
<DIV class=postText>
<P class=a14><FONT color=#0000ff>就在几年前，开源方案还很有限。除了Linux、Apache Web服务器、几款数据库服务器以及各种开发工具外，开源社区在应用软件方面没多少东西可以提供。基础已经打好了，但成熟的应用软件还没有出现。 
<P class=a14>不过，这种情况已经发生了变化。如今，市面上真正出现了大量的开源商用软件。企业的IT经理们已经可以非常自信地对开源软件进行评估了，只要他们知道有哪些选择。为此，本文编译了《InfoWorld》的相关文章，找出了12类软件当中的佼佼者，包括现有的项目和即将完成的项目，供读者参考。 </P></FONT>
<P></P>
<P class=a14>不过，这种情况已经发生了变化。如今，市面上真正出现了大量的开源商用软件。企业的IT经理们已经可以非常自信地对开源软件进行评估了，只要他们知道有哪些选择。为此，本文编译了《InfoWorld》的相关文章，找出了12类软件当中的佼佼者，包括现有的项目和即将完成的项目，供读者参考。 </P>
<P class=a14><B>开源商业智能</B> </P>
<P class=a14><B>很快市面上就会出现成本高昂的报表工具以外的低成本方案。</B> </P>
<P class=a14>如今，客户和独立软件开发商在购买现有商业智能（BI）软件的许可证时往往面临高昂费用，这也就难怪在开源社区内部BI方面的工作开展得如火如荼。首当其冲的是Eclipse基金会，它已把BI列为自己的七个最高级别项目之一。该基金会已在6月发布了1.0版本的商业智能软件和报表工具（BIRT），采用其自己的Eclipse许可证，该许可证得到了开源促进会（OSI）的批准。 </P>
<P class=a14>BIRT的主要目的是为基于Java的Web应用充当报表系统。它包括两个部分: 一个是JAR（Java Archive）文件，该文件包括可部署在应用服务器上的运行时组件; 另一个就是报告设计器，它可以作为Eclipse插件来交付，提供了方便的所见即所得的编辑功能以及标准报表项目调色板。该工具包基于名为开放数据访问的框架，这样在选择数据源时具有很大的灵活性。 </P>
<P class=a14>对需要专业支持、维护及培训的人来说，一家名为Actuate的公司为BIRT技术提供了所有这些服务。此外，Actuate提供的自己版本的BIRT使用商业许可证，该许可证含有知识产权保障条款。 </P>
<P class=a14>值得关注的另一家组织就是Pentaho，这家新兴公司致力于开发全面的开源BI平台，包括报表、分析、仪表板、数据挖掘及工作流等工具。该公司的开发队伍声称，队伍成员以前在Cognos、Oracle和SAS等公司从事过BI应用软件的开发。这个项目的主要服务器架构将搭建在J2EE上，与BIRT相似的地方是，相应的客户机环境将基于Eclipse平台。开发人员已努力把先进技术集成到平台里面，譬如对所有内容统一使用XML定义; 对分析组件使用Web服务界面，力求确保最大的灵活性等。 </P>
<P class=a14>截至发稿日，Pentaho还没有提供下载版本，不过该公司称，它计划在年底前交付所有项目的版本，采用宽通用公共许可证（LGPL）以及所谓的“类似LGPL”的许可证，其中包括Apache、BSD和Eclipse。公司网站上提供了详细的路线图。 </P>
<P class=a14>虽然Pentaho目前也许是个雾件（vaporware），但它具备了在BI市场成为重要竞争者的所有必要条件。该项目的开发人员说: “我们没指望用户仅仅是因为它是开放的就采用它。我们希望用户选择它，是因为它更好。至于这个项目结果如何，几个月后可见分晓。” </P>
<P class=a14><B>开源业务流程管理</B> </P>
<P class=a14><B>编制面向服务的架构（SOA）是项让人激动的任务，新项目正在积极采取行动。</B> </P>
<P class=a14>功能齐全的业务流程管理套件也许不会最先来自开源社区，不过这正是诸多项目在竭力使之实现的目标。随着SOA的兴起，人们对管理及编制不同服务和Enterprise JavaBeans（EJB）的业务流程引擎的需求空前高涨，甚至对以其他方式依靠开源技术的网站来说也是如此。 </P>
<P class=a14>这就是为什么Apache软件基金会考虑采用Project Agila的原因。在该基金会的Jakarta Java工具套件当中，这个项目可以说是 “皇冠上的宝石”。Agila是基于Gluecode软件公司在2004年10月捐献的初始代码开发的，这个轻便、可嵌入的开源业务流程管理引擎适合与J2EE和较低端的平台如J2ME一起使用。Apache的代表声称，正因为如此，Agila是Apache Java中间件系列当中的最后一个重要部分，可以同BEA或者IBM等主要商业开发商提供的产品相媲美。目前这个项目还处于孵化阶段，没有授权文件，不过已经向公众开放。但预计大规模的开发工作很快就会启动。 </P>
<P class=a14>Apache软件基金会不是惟一遵循这条思路的组织。JBoss 也在期望把产品系列扩大到其核心应用服务器以外的领域。JBoss近期购买了名为jBPM的开源工作流引擎，把其丰富的Java开发经验带到了业务流程管理市场上。 </P>
<P class=a14>与Project Agila一样，jBPM也可以作为独立的应用运行，或者作为另一个应用里面的嵌入式组件运行。与Apache项目不同的是，jBPM代码已经可以从JBoss的网站下载，采用该公司的定制的宽通用公共许可证　（LGPL）。除了引擎本身外，jBPM还包括图形化的流程设计器，用于创建工作流。该项目的未来计划包括: 增加对业务流程执行语言（BPEL）的本地支持; 就长远而言，项目的目标是要扩展jBPM的功能，使其成为一种成熟的企业服务总线（ESB）。 </P>
<P class=a14>除了这两个主角外，还有其他许多开源工作流引擎（有的正在拟议中），不过这些项目的发展状况往往很难确定。不过，管理业务流程这项复杂工作需要专门技能。如果你在寻求这类软件的开源方案，稳妥之计就是，选择得到像Apache或者JBoss这些财力雄厚、专业的组织支持的项目。 </P>
<P class=a14><B>开源企业服务总线</B> </P>
<P class=a14><B>中间件方案的数量在迅速增加，但现在离开商业开发商也许过于仓促了。</B> </P>
<P class=a14>随着Java应用服务器迅速成为一种大众化商品，难怪现在我们开始看到企业中间件系列的其他组件以开源方式实施。尤其是，近几个月已出现了许多极其成熟的企业服务总线（ESB）实施项目。 </P>
<P class=a14>Iona科技公司近期捐献了Celtix的源代码，这是采用GNU LGPL许可证的Java ESB，从而启动了ObjectWeb社区在ESB方面的工作。虽然迄今为止还没有提供授权文件，但Iona的代表声称，Celtix将支持最近推出的Java商业智能（JBI）规范，该规范为跨应用集成明确规定了标准化的对象容器。该项目还将支持Web服务描述语言（WSDL）、Java消息服务（JMS）、简单对象访问协议（SOAP）和XML，还会为Java和传统Java对象（POJO）提供应用扩展接口。其管理和配置工具将基于Eclipse。 </P>
<P class=a14>不甘落后的Sun也在今年的JavaOne大会上发布了自己的免费ESB。这个名为Java开放式企业服务总线的项目将放在Java.net上进行，第一个版本有望在今年夏末交付。Sun还计划把来自这个社区项目的代码包装成商用产品。与Celtix一样，Open ESB将基于JBI 1.0规范，并借助JBI参考实施方案。可是与Iona不同的是，Sun发布的代码将采用自己的公共开发和发行许可证，而不是GNU许可证。相关详细情况仍很少。 </P>
<P class=a14>虽然前面提到的项目仍处于初期阶段，但至少有一个开源ESB已经具有一定的发展历史。由SymphonySoft公司发起的Mule项目从2003年开始就在开发了。该项目的当前版本为1.1，支持可插拔的连接选项，适用于众多网络传输技术，包括JMS、POP3、TCP、UDP、服务器小程序和多点传送等。更先进的特性在路线图中有所介绍，譬如，JBI实施要到版本2.0才会出现等。另外，该项目采用SymphonySoft自己的许可证发布，而不是免费软件基金会或者开源促进会批准的许可证，这对一些人来说是个不足。 </P>
<P class=a14>有了代码，上述项目都有可能为部门级ESB部署打下良好基础。然而就大规模部署而言，没有一个项目可能会有太大的吸引力。由于许多ESB部署方案把JMS统一作为首选的消息传输方式，如果有些公司已经向Cape Clear Software、Fiorano Software或Sonic Software这些厂商购买了企业级JMS服务器，那么采用这些厂商的ESB产品，或者坚持使用较传统的中间件解决方案要比采用开源来得明智。 </P>
<P class=a14><B>开源内容管理系统</B> <IMG alt="" src="http://www2.ccw.com.cn/05/0541/d/pic/d03_1t2.jpg" align=right border=0> </P>
<P class=a14><B>挑选内容管理系统解决方案最困难的地方就是缩小选择范围。</B> </P>
<P class=a14>随着Web成为大多数企业进行联系的基础，你会发现如今市场上并不缺少Web内容管理系统（CMS），包括众多的开源方案。自然，如果你大胆地利用这些产品搭建内联网或者面向公众的网站，需要关注的不仅仅是许可费。所以重要的是不仅仅寻求产品的功能，还要注意有无经常更新、健康发展的用户社区以及专业支持等方面。 </P>
<P class=a14>OpenCms运行在Apache Tomcat上，适用于大多数操作系统，并采用宽通用公共许可证（LGPL）。众多注册的解决方案提供商可以提供实施支持及其他专业服务。此外，德国的Alkacon Software公司提供收费的支持协议、最终用户及开发培训课程（分英文和德文两种版本）以及定制的项目开发。 </P>
<P class=a14>表格和所见即所得的编辑器简化了编辑OpenCms里面的内容条目，而该软件使用方便的管理用户界面允许轻松定制。不过，OpenCms在几个高级方面也有所欠缺: 缺少安全套接层（SSL）加密和轻型目录访问协议（LDAP）验证; 提供的模板管理功能也很有限。虽然它具有成本效益，但如果你需要扩展多个网站，或者如果你期望获得企业性能管理功能如高速缓冲和负载平衡，不妨考虑其他产品。 </P>
<P class=a14>全世界的人都在使用基于PHP和MySQL的CMS Mambo，既用于构建简单的网站，也用于构建复杂的企业应用。Mambo的开发社区真正属于国际化，提供功能强大的支持论坛、优质的第三方专业服务以及用户大会。Mambo采用GPL许可证，但总部设在澳大利亚的Miro（该软件的开发者）也提供名为Jango的商用版本。 </P>
<P class=a14>Mambo提供相当不错的页面缓冲、RSS聚集以及在计划表上显示内容的功能。可以从Mambo社区获得许多功能强大的免费附件，包括文档管理特性、讨论论坛以及基本的电子商务购物手推车等。不过类似OpenCms的是，Mambo也缺少大规模实施所需的多重任务执行功能。 </P>
<P class=a14>最全面的开源CMS应用软件恐怕就要数eZ publish了，它提供内容分段（content staging）、工作流审批以及IT人员所需的数据中心的所有功能——包括负载平衡。另外，可以重复使用一些内容的功能使eZ publish适用于只要用一个CMS实例就可以托管的国际网站。 </P>
<P class=a14>现在可以获得GPL版本的eZ publish。总部设在挪威的eZ systems是这个软件的开发商，它还提供采用商业许可证的版本。这些许可费用于支付大约40名员工的薪水，他们在开发产品时遵守严格的质量保证周期，可以同纯粹的商业开发商的周期相比。它还提供支持、培训和咨询服务等。 </P>
<P class=a14><B>开源客户关系管理系统</B> </P>
<P class=a14><B>不用花大价钱购买软件就可以管理销售及客户关系。</B> </P>
<P class=a14>开源社区还无法在短期内取代Salesforce.com或者Siebel这类厂商提供的价格不菲的高端CRM软件。不过，现有的一些项目已经具有的先进程度可能会让你大吃一惊，尤其适用于中型组织。 </P>
<P class=a14>譬如说，SugarCRM就提供全面的企业级CRM系统，利用开源技术而建，包括PHP、MySQL和Apache Web服务器等。名为Sugar Open Source的基本套件可以免费下载，它采用SugarCRM的定制许可证。该公司还提供商业版本的软件，名为Sugar Professional。SugarCRM为该产品的商业版本和开源版本提供收费的支持套件。 </P>
<P class=a14>《InfoWorld》测试中心曾在4月测评了Sugar Professional 2.5，结果发现这款解决方案对中小企业来说还算不错。此外，说到对性能的改进，SugarCRM也决不含糊。版本3.0添加了营销活动和联系人名单管理、电子邮件营销、项目管理、员工目录及日历同步等工具。即将推出的版本3.5将添加面向移动销售人员的离线客户软件、可以扩展的模块化框架以及支持Oracle数据库的功能。 </P>
<P class=a14>Compiere主要是一款ERP解决方案，它也提供了一些CRM功能。Compiere不是为用户提供独立的模块，而是提供了解所有客户和潜在客户有关活动的逻辑视图，还提供线索跟踪、营销活动管理、客户盈利能力分析以及面向商业合作伙伴的自助式网上查询等。你可以从本专题“开源ERP”的介绍中进一步了解Compiere。 </P>
<P class=a14>Open for Business Project提供的电子商务应用软件套件采用麻省理工学院的许可证，包括民CRM、ERP和电子商务的特性。Open for Business Project类似于Compiere，也不是把功能分散到不同模块，而是把整个套件建立在通用数据模型上，从而便于销售、会计、设备管理及协作等众多活动。这有其优缺点: 这意味着众多活动在套件里面得到了很好的集成，但同时也意味着，你必须购买整个整体式软件包，才能充分利用其功能。许多一流的咨询组织提供对该软件包的支持。 </P>
<P class=a14>销售和客户支持活动对大多数公司来说太重要了，不能把CRM软件包不当回事。然而，开源模式的一个优点就是，你不会被有限的试用期所限制，而商业软件包或者Salesforce.com等厂商的托管方案对此都有所限制。此处列出来的所有软件包随时都可以下载，所以尽管放心试用吧——你不用花钱就可以试一下。 </P>
<P class=a14><B>开源ERP</B> </P>
<P class=a14><B>免费ERP软件包的特性差异很大，不过还是可以找到一些宝贝的。</B> </P>
<P class=a14>ERP的目的不仅仅是为公司业务流程的每个层面提供统一的应用界面，它还应力求包含固有的数据挖掘功能。但尽管JD Edwards、Oracle、SAP及其他厂商投入了大量资源，用于开发任何企业都可以定制的ERP软件，但这些厂商也把软件价格推到了许多企业根本无力承受的高度。 </P>
<P class=a14>这时开源ERP闪亮登场了。 </P>
<P class=a14>ERP的高昂价格有很大一部分是用于支付一大批业务流程和软件开发顾问的薪水，因为要为不同的业务部门定制商业软件，需要这些顾问。而使用开源ERP软件代码意味着，你可以在内部实现这种定制，另外还可以避免高昂的软件许可费。 </P>
<P class=a14>其中一款最知名的开源ERP软件就来自Compiere。这款软件着眼于业务分析功能，集成了CRM、销售点（POS）和库存管理模块，为多种商业场景提供了出众的灵活性。该产品可以使用Java数据库连接（JDBC），与大多数关系数据库进行集成，并且还提供了对Oracle和Sybase的特定支持。服务器和客户机平台包括: Linux、Solaris、Windows及其他平台。该软件的发行采用Mozilla公共许可证。 </P>
<P class=a14>采用GNU许可证的webERP是另一个生产级项目，它包括了全面的记账特性，包括总分类账、应付账款和应收账款账簿，还包括基于规则的安全及可以高度定制的基于Web的前端程序。它面向类似制造业的业务流程，包括对订单录入和库存管理的支持。与Compiere不同的是，它没有用于客户管理、人力资源或者类似资源的模块。全球有许多公司提供金牌、银牌、铜牌及语言翻译支持。 </P>
<P class=a14>还有其他一些项目，不过开源项目的一个特点就是，不同项目对这类软件的特性集的定义方式各不相同。对ERP软件包来说更是如此。譬如说，Linux-Kontor定义的ERP没有记账功能，而是专注于客户管理、订单录入、开票及库存。另一方面，虽然TUTOS自称是ERP，但更像是一个群件套件。显然，为了确保你真正获得期望从这类软件得到的功能，就需要作一番调查。 </P>
<P class=a14><B>开源目录服务</B> </P>
<P class=a14><B>LDAP服务器向大众化商品迈近了一步。</B> </P>
<P class=a14>随着越来越多的公司开始调查身份管理、单次登录（SSO）和自动配置等功能，目录服务随之迅速成了网络基础设施中的一个关键部分。不过迄今为止，还没有哪个开源项目在该领域获得像Apache在Web服务器市场的主导地位。 </P>
<P class=a14>长期以来的主要竞争者就是OpenLDAP，该项目提供了可靠、可扩展、稳定的LDAP目录服务器、复制服务器及一些基本工具。OpenLDAP基金会负责维护采用定制许可证的代码，已把代码移植到了众多平台上，包括AIX、FreeBSD、Linux、Mac OS X和Windows。OpenLDAP很成熟，可正常使用，但很难配置，尤其是在编写访问控制列表（ACL）时。另外，它主要是一种重负荷服务器，缺少微软、Novell和Sun这些厂商的商用LDAP目录所具有的一些增强特性。 </P>
<P class=a14>Novell已把开源作为其战略的核心部分，不过对网络管理员们来说，比较遗憾的是，eDirectory仍是其商用产品系列的一部分，这让竞争对手——Linux厂商Red Hat有机会采取行动，推出自己的开源产品。Red Hat目录服务器（RHDS）面向Windows、Solaris（采用Sparc处理器）和HP-UX（采用PA-RISC处理器），基于原先名为Netscape目录的产品上，Red Hat在2004年从Netscape手里买下了Netscape目录。RHDS是款历史悠久、性能成熟的产品，提供复制等高级特性—包括部分复制、专门面向大型数据库的特性以及基于WAN链路的复制，还提供与微软的活动目录和Windows NT 4 Server同步的功能。 </P>
<P class=a14>目前，RHDS仅提供给采用Red Hat的订购支持模式的客户。然而，该公司已经开始开放该软件的源码，这个采用GPL许可证的项目名为Fedora目录服务器。截至发稿日，只有核心LDAP服务器本身及一些命令行工具作为开源提供，不过其他服务器模块、管理控制台和管理服务器组件方面的工作正在开展当中。 </P>
<P class=a14>许多观察人士认为，从长远来看，对寻求开源目录服务器的人来说，Fedora项目可能是优于OpenLDAP的选择。但鉴于OpenLDAP作为经济型目录部署的事实上的标准，已牢牢确立了地位，所以不可能很快就会消亡。对基本的目录功能而言，两者都是可靠的选择，甚至对大型数据库而言也是如此。 </P>
<P class=a14><B>开源身份管理</B> </P>
<P class=a14><B>免费工具让开发人员在构建先进的安全基础设施方面领先一步。</B> </P>
<P class=a14>全面的身份管理解决方案由许多部分组成。正因为如此，任何单个开源项目都很难提供即插即用的身份管理系统。然而，有许多项目可以提供这类系统的某些部分，尤其是在身份联合和单次登录（SSO）方面。 </P>
<P class=a14>在SSO领域，耶鲁大学已开发了一组Java服务器小程序，名为集中授权服务（CAS）。提供的这组服务器小程序采用耶鲁大学自己的许可证，目前美国有许多大学在使用。同样采用定制许可证的另一个工具集是Java开放式单次登录（JOSSO）项目，可以为ASP、PHP和Java应用提供扩展接口。 </P>
<P class=a14>这两个项目都仅仅针对SSO，无法为全面的身份管理基础设施提供强大支持。但另一方面，开发身份联合标准的工作却大有希望——包括安全声明标记语言（SAML）、WS-*系列标准及自由联盟提议的众多标准等，这方面的许多开源项目工作已经在开展当中。 </P>
<P class=a14>Ping Identity是SourceID的发起者。SourceID这种身份联合工具集提供了对基于Java和.Net的SAML 1.1及Liberty-ID-FF 1.1两种协议的支持，另外还支持仅基于Java的Liberty-ID-FF 1.2协议。这些库允许开发人员实现跨域SSO和属性查询等特性。提供的代码采用SourceID自己的许可证。代码还为Ping Identity的商用身份联合服务器: PingFederate奠定了基础。 </P>
<P class=a14>最雄心勃勃的开源联合身份项目恐怕要数Shibboleth，主持该项目的是Internet2下属的教育中间件架构委员会。Shibboleth主要供Internet2网络上的教育机构使用，这种全面的验证和访问控制系统面向基于Web的资源，基于SAML而建，并采用定制许可证发行。该软件是纯粹的Java软件，目前许多组织（包括大学、图书馆和Napster数字音乐服务商）都已把它投入实际使用当中。 </P>
<P class=a14>这里提到的开源身份方案都需要一些开发技能，而且对本地网络环境要有透彻了解，那样才能得到有效实施。如果全面的身份管理解决方案正是你所寻求的，还是寻求不同的商业开发商为好。不过随着身份管理越来越受到关注，其中一些项目、尤其是Shibboleth会获得更显赫的地位。 </P>
<P class=a14><B>声明</B> </P>
<P class=a14>本报第37期应用与方案版第C9版所刊登《在SCO Unix系统中实现业务数据的自动备份》一文的作者系中国人民银行湖南省邵阳市中心支行科技科赵志斌。 </P>
<P class=a14>本报第38、39期应用与方案版第C12版所刊登《全新接入架构提升IT管理效能》一文中安莉芳集团公司CTO姓名应为王建平。 </P>
<P class=a14>特此声明。 </P>
<P class=a14><B>开源企业门户</B> </P>
<P class=a14><B>开源Java企业门户领域的竞争在不断加剧。</B> </P>
<P class=a14>是否支持标准是大多数企业开发项目的重要衡量标准。在企业门户服务器领域，这意味着符合J2EE的引擎支持多种标准，如门户组件（JSR 168）和面向远程门户组件的Web服务（WSRP）等。幸好，已有为数不少的开源项目在这一领域参与竞争。 </P>
<P class=a14>其中比较突出的一个项目就是eXo平台。这个项目已经进入了实际使用阶段，旨在充当可以定制的企业门户和内容管理系统。其门户组件容器实际上通过了认证，符合JSR 168标准，并已得到改进，具有高速缓存、连接池和共享会话等特性。门户本身基于JavaServer Faces（JSR 127）技术，并提供模型视图控制器架构。它采用两种许可证: 商业许可证和GPL许可证，eXo项目队伍可提供在线支持和上门培训这两种收费服务。 </P>
<P class=a14>另一个竞争者就是Liferay Portal，它拥有类似eXo的特性集，包括符合JSR 168和WSRP。但Liferay没有使用JavaServer Faces，而是使用了较成熟的Struts和Tiles技术。它可以运行在众多应用服务器和数据库上，并为单次登录（SSO）功能提供了扩展接口，不过默认状态下只支持耶鲁大学的SSO引擎。与eXo一样，Liferay开发人员本身也可以提供专业支持，不过支持费用很快就会高涨。软件本身采用麻省理工学院的许可证，类似Apache许可证。 </P>
<P class=a14>Apache软件基金会长期关注企业门户软件，目前拥有这方面的许多项目。Jetspeed-1软件就是基于JSP和XML等技术的基本门户系统。Jetspeed-2更加基于组件，提供了更先进的基于门户组件的方法。Apache还提供了门户组件容器的参考实施方案，即Pluto。所有这些都采用Apache许可证。 </P>
<P class=a14>JBoss也推出了JBoss门户，这是该公司的JBoss企业中间件系统（JEMS）Java应用开发系列当中的一部分。这是另一种符合JSR 168的门户组件容器，可通过JavaServer Faces、MyFaces和Spring提供定制功能，另外还提供额外的内容管理和其他管理功能。作为“专业的开源公司”，JBoss提供GNU LGPL和商业许可两种方式，另外还提供专业支持、咨询和培训。 </P>
<P class=a14>最后，GridSphere是另一种符合JSR 168的基于门户组件的门户服务器，并支持JavaServer Faces。值得注意的另一个功能就是额外的门户组件API，声称几乎可以与IBM的WebSphere保持完全兼容。可通过Gridwise科技公司获得咨询、培训和开发支持。不过，提供的这个软件采用未得到OSI批准的独立的GridSphere许可证。 </P>
<P class=a14><B>开源销售点</B> </P>
<P class=a14><B>免费的商业终端软件为大大小小的公司带来了灵活性。</B> </P>
<P class=a14>销售点（POS）的另一个术语就是“现金出纳机”。尽管现金出纳机的功能要求可能很有限，但从企业角度来看，这类应用涉及诸多不确定因素，包括硬件兼容性、面向垂直领域的定制数据收集及后端数据挖掘等。 </P>
<P class=a14>幸好，有一些方案可以供你选择。譬如，PHP销售点就是一种成熟的开源POS应用。它基于PHP和MySQL，采用GPL许可证，为基本的POS应用场景提供了非常丰富的特性集。它还可以与领先的开源电子商务应用: osCommerce实现集成。这意味着，你可以使用PHP POS进行网上交易，也可以用于传统的交易环境。该软件自2003年发布以来，下载次数已超过26000次。版本9.0正在开发当中，有望增强销售功能、提供更灵活的折扣方式以及经过改进的后台报表系统。 </P>
<P class=a14>值得关注的另一个对象是Tina POS，这个项目目前正处在实际使用阶段。Tina POS采用GPL许可证，拥有良好的硬件支持功能，包括支持条形码阅读器、触摸屏以及众多票据打印机。它可以通过JDBC连接至数据库，有一个Java前端程序，而且提供了出色的后端办公集成和报表功能。 </P>
<P class=a14>如果现有的端到端POS解决方案没有一款能够提供你所需要的所有定制选项，开源社区仍可以助你一臂之力。不妨看看jPOS，这是与J2EE兼容的框架库，适合嵌入到内部的定制解决方案里面。jPOS有一组出色的硬件扩展接口，支持基于角色的安全，甚至还有一支不断壮大的咨询队伍可以提供支持。如果你已经决定，自行开发POS系统是出路所在，那么jPOS绝对值得密切关注。可能存在的一个不足是，所提供的代码采用专有的 jPOS许可证，而不是得到OSI认可的任何现有许可证。 </P>
<P class=a14>虽然不是采用开源模式的所有应用软件都具有可持续性，但POS显然是个异数。开源社区不仅提供众多灵活的选择，还提供让这些应用软件真正可以使用的支持架构——甚至是对小企业而言。 </P>
<P class=a14><B>开源RFID</B> </P>
<P class=a14><B>免费的标签和EPC数据管理软件正处于初期阶段，但前景诱人。</B> </P>
<P class=a14>如果说在过去一年，IT行业有一个领域受到的关注程度不亚于开源本身，那么非无线射频（RFID）莫属。不过迄今为止，RFID还是属于昂贵的技术，最强有力的支持来自沃尔玛等大型零售商。公司企业不得不依靠昂贵的商用软件包在各自行业开展业务，但这种情况必然会发生变化。RadioActive基金会由两名加拿大企业家创办而成，旨在开发一系列开源RFID应用软件，以支持电子产品代码（EPC）及来自EPCGlobal Network的其他标准。 </P>
<P class=a14>它的第一个项目就是Fusion，这个中间件层用于管理及收集来自标签和传感阅读器的数据，然后把该数据传送到企业信息系统。拟议中的其他计划包括: Neutrino，这组工具用于在商业合作伙伴之间交换EPC数据; Graviton，这个基于驱动程序的模拟器可以模拟不同制造商的RFID硬件。RadioActive基金会的所有项目都采用Apache许可证发布。 </P>
<P class=a14>RadioActive基金会把其所有项目列为处于规划阶段，所以等实际代码开始出现可能需要一段时间。该基金会鼓励有关方面可以参与其新组建的开源RFID联盟，它希望这会激发人们的兴趣、加快相关软件的开发。无论这会不会真的发生，或者项目会不会失败，都仍有待观察。 </P>
<P class=a14><B>开源VoIP/电话</B> </P>
<P class=a14>有关PBX应用和交互语音应答系统的方案数量众多。 </P>
<P class=a14>Digium发起的Asterisk是首批开源VoIP项目之一，也是最早的VoIP PBX之一。Asterisk是一个非常成熟的平台，采用GPL许可证，它几乎支持连大企业都会希望VoIP网关解决方案提供的各种功能，包括语音邮件、呼叫转移、会议功能，甚至交互语音应答（IVR）等。它还有呼叫详细记录——这是VoIP的滚滚财源，以及适合用于虚拟教室或者虚拟会议室等场合的高级特性。其庞大的开发社区在为该平台贡献更多的附件，包括商业版本和开源版本。 </P>
<P class=a14>不过，尽管Asterisk也许是个开拓者，但肯定绝不是只有它一个。如今已出现了许多竞争性的新型开源VoIP平台，它们基于会话初始化协议（SIP）。Pingtel已为其商用SIPxchange PBX发布了代码，目前由一家名为SIP-Foundry的非营利组织旗下的sipX加以管理。虽然成熟程度不及Asterisk，但sipX更加严格遵守开放的SIP标准，从而提高了软硬件的兼容性——至少目前是这样。 </P>
<P class=a14>SIP快速路由器（SER）严格遵守SIP标准。它用C语言编写，采用GPL许可证发行，已被移植到Linux和Solaris上。除了充当SIP服务器外，SER还可以为短消息服务（SMS）、即时通信（IM）、RADIUS记账和授权以及基于Web的用户配置充当网关。基于SER的商用产品可从iptelorg购得。可启动的LiveCD版软件也可以获得，它扩展了SER的功能，添加了用起来方便得多的基于Web的管理工具，并支持思科和Mitel等厂商的通用VoIP硬件。 </P>
<P class=a14>Yate（另一个电话引擎）采用GPL发行，这是个异常灵活的平台。Yate非常成熟，包括了对SIP、H.323及其他协议的支持，可以运行在Linux或者Windows上。它具有所有常见的PBX增强功能: 语音邮件和呼叫转移等，还可以作为IVR服务器使用。 </P>
<P class=a14>不过，那些热衷于更稳定更可靠的IVR应用的人最好还是考虑Bayonne，这是GNU Project的脚本驱动的电话服务器。Bayonne历史悠久，为众多的电信级电话应用而设计。商业支持可以从许多途径获得。Bayonne最近已被纳入更齐全的GNU Telephony这面大旗麾下，GNU Telephony包括许多其他免费软件项目。 </P>
<P class=a14><B>链接</B> </P>
<P class=a14><B>形形色色的开源许可证</B> </P>
<P class=a14><B>你在使用开源代码之前，要确保了解相关条款。</B> </P>
<P class=a14>据最新统计，开源促进会（OSI）认可了近60种不同的开源许可证。如果你只想安装及使用软件包，那么采用哪种许可证并不重要。但特别重要的是，如果你想修改代码，或者把它用到自己的项目中，就要注意许可条款。 </P>
<P class=a14>GNU GPL（通用公共许可证）可能是知名度最高的开源许可证，也是最为开发人员熟悉的其中一种许可证。如果企业想开发专有应用软件，GPL很可能是个问题，因为它在相互共享代码方面有着严格规定。 </P>
<P class=a14>这个问题导致后来出现了GNU LGPL（宽通用公共许可证），它授权使用源代码，但仍允许源代码有限制地使用于专有产品，并不启动普通的源代码发布条款。JBoss喜欢使用这种许可证，各种代码库对这种许可证也是情有独钟。 </P>
<P class=a14>另一种对商业有利的开源许可证是BSD许可证。然而，许多开源的支持者认为LGPL、尤其是BSD许可证并不适宜，因为它们允许外部的开发人员不用提供任何回报，就可以利用来自开源项目的代码。 </P>
<P class=a14>为了取悦于这两个阵营，许多开源厂商采用了双许可模式。它们采用GPL发布代码，但也向那些不想受GPL条款限制的公司提供独立的商业许可证。MySQL和Red Hat就是采用这种模式的知名厂商。 </P>
<P class=a14>另外，还有众多得到OSI批准的开源许可证，但有许多在不得重新分发这一点上是相似的。另外值得一提的是，绝大多数的开源许可证授予开发人员完全不必承担质量保证和支持义务。 </P>
<P class=a14>然而对许多公司来说，一个特别头痛的问题源自所谓的自定义许可证大量出现。很多厂商坚持自己定义许可证，而不是统一采用OSI已经批准的许可证。虽然这些许可证的条款往往类似OSI批准的许可证，但一些细小问题通常会有出入，有时一些重大问题也会有出入。 </P>
<P class=a14>遗憾的是，每次你往自己的环境中添加一种新许可证，就需要新一轮的调查工作，确保该许可证的条款有利于贵公司的业务实践。这就意味着，要支付额外的成本，也错失了产品尽快上市的良机。而在某些情况下，新的许可证其实可能与你已经在使用的软件的许可证水火不相容。所以，有时坚持采用你熟悉的许可证还是值得的。 </P>
<CENTER><IMG alt="" src="http://www2.ccw.com.cn/05/0541/d/pic/d03_1t3.jpg" border=0></CENTER>
<P align=right>（计算机世界报 2005年10月24日 第41期 C10、C11、C12、C13）</P><BR><BR>
<P id=TBPingURL>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=531168</P></DIV>
<DIV class=postFoot>
<SCRIPT src="/PromoteIcon.aspx?Id=531168"></SCRIPT>
[<A href="javascript:StorePage()">点击此处收藏本文</A>]&nbsp;&nbsp; 发表于 2005年11月16日 11:40 PM </DIV></DIV><LINK href="http://blog.csdn.net/syliang2003/Services/Pingback.aspx" rel=pingback><!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://blog.csdn.net/syliang2003/archive/2005/11/16/531168.aspx"
dc:identifier="http://blog.csdn.net/syliang2003/archive/2005/11/16/531168.aspx"
dc:title="开源方案“黄页”"
trackback:ping="http://tb.blog.csdn.net/TrackBack.aspx?PostId=531168" />
</rdf:RDF>
--><img src ="http://www.blogjava.net/allan-oy/aggbug/20962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2005-11-22 14:34 <a href="http://www.blogjava.net/allan-oy/articles/20962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat4.01全攻略</title><link>http://www.blogjava.net/allan-oy/articles/20303.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Thu, 17 Nov 2005 11:31:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/20303.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/20303.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/20303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/20303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/20303.html</trackback:ping><description><![CDATA[<H2><A id=_ctl0__ctl2_TitleUrl href="http://java.mblogger.cn/allan_oy/posts/19864.aspx">Tomcat4.01全攻略</A> </H2>
<P>Tomcat4.01全攻略&nbsp;<BR><STRONG>一：简介&nbsp;</STRONG><BR>tomcat是jakarta项目中的一个重要的子项目，其被JavaWorld杂志的编辑选为<BR>2001年度最具创新的java产品(Most&nbsp;Innovative&nbsp;Java&nbsp;Product)，同时它又<BR>是sun公司官方推荐的servlet和jsp容器(具体可以见<BR>http://java.sun.com/products/jsp/tomcat/)，因此其越来越多的受到软件<BR>公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得<BR>到实现。&nbsp;<BR><BR><STRONG>二：安装及配置&nbsp;</STRONG><BR>tomcat最新版本为4.0.1，这个版本用了一个新的servlet容器Catalina，完整<BR>的实现了servlet2.3和jsp1.2规范。注意安装之前你的系统必须安装了jdk1.2以<BR>上版本。&nbsp;<BR><BR>(一)：安装&nbsp;<BR>1：windows平台&nbsp;<BR>从tomcat网站下载jakarta-tomcat-4.0.1.exe，按照一般的windows程序安<BR>装步骤即可安装好tomcat,安装时它会自动寻找你的jdk和jre的位置。&nbsp;<BR><BR><BR>2：linux平台<BR>下载jakarta-tomcat-4.0.1.tar.gz，将其解压到一个目录。&nbsp;<BR><BR>(二)：配置&nbsp;<BR>运行tomcat需要设置JAVA_HOME变量&nbsp;<BR>set&nbsp;JAVA_HOME=c:/jdk&nbsp;(win98，在msdos方式下使用，或者放入autoexec.bat中)&nbsp;<BR>export&nbsp;JAVA_HOME=/usr/local/jdk&nbsp;(linux下使用，放到/etc/bashrc或者/etc/profile中)&nbsp;<BR><BR>(三)：运行&nbsp;<BR>设置完毕后就可以运行tomcat服务器了，进入tomcat的bin目录，win98下用<BR>startup启动tomcat，linux下用startup.sh，相应的关闭tomcat的命令为<BR>shutdown和shutdown.sh。&nbsp;<BR>启动后可以在浏览器中输入http://localhost:8080/测试，由于tomcat本身具<BR>有web服务器的功能，因此我们不必安装apache，当然其也可以与apache集成<BR>到一起，下面会介绍。&nbsp;<BR>下面你可以测试其自带的jsp和servlet示例。&nbsp;<BR><BR><STRONG>三：应用&nbsp;</STRONG><BR><BR>(一):目录结构&nbsp;<BR>tomcat的目录结构如下：&nbsp;<BR>目录名:&nbsp;简介&nbsp;<BR>bin&nbsp;:&nbsp;存放启动和关闭tomcat脚本&nbsp;<BR>conf&nbsp;:&nbsp;包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml&nbsp;<BR>work&nbsp;:&nbsp;存放jsp编译后产生的class文件&nbsp;<BR>webapp:&nbsp;存放应用程序示例，以后你要部署的应用程序也要放到此目录&nbsp;<BR>logs&nbsp;:&nbsp;存放日志文件&nbsp;<BR>lib/japser/common&nbsp;:&nbsp;这三个目录主要存放tomcat所需的jar文件&nbsp;<BR><BR><BR>(二)：server.xml配置简介&nbsp;<BR>下面我们将讲述这个文件中的基本配置信息，更具体的配置信息见tomcat的文<BR>档&nbsp;<BR>server:&nbsp;<BR>port&nbsp;指定一个端口，这个端口负责监听关闭tomcat的请求&nbsp;<BR>shutdown&nbsp;指定向端口发送的命令字符串&nbsp;<BR>service:&nbsp;<BR>name&nbsp;指定service的名字&nbsp;<BR>Connector&nbsp;(表示客户端和service之间的连接):&nbsp;<BR>port&nbsp;指定服务器端要创建的端口号，并在这个断口监听来自客户端的请求&nbsp;<BR>minProcessors&nbsp;服务器启动时创建的处理请求的线程数&nbsp;<BR>maxProcessors&nbsp;最大可以创建的处理请求的线程数&nbsp;<BR>enableLookups&nbsp;如果为true，则可以通过调用request.getRemoteHost()进<BR>行DNS查询来得到远程客户端的实际主机名，若为false则不进行DNS查询，而是<BR>返回其ip地址&nbsp;<BR>redirectPort&nbsp;指定服务器正在处理http请求时收到了一个SSL传输请求后重定向<BR>的端口号&nbsp;<BR>acceptCount&nbsp;指定当所有可以使用的处理请求的线程数都被使用时，可以放到处<BR>理队列中的请求数，超过这个数的请求将不予处理&nbsp;<BR>connectionTimeout&nbsp;指定超时的时间数(以毫秒为单位)&nbsp;<BR>Engine&nbsp;(表示指定service中的请求处理机，接收和处理来自Connector的请<BR>求):&nbsp;<BR>defaultHost&nbsp;指定缺省的处理请求的主机名，它至少与其中的一个host元素的<BR>name属性值是一样的&nbsp;<BR>Context&nbsp;(表示一个web应用程序，通常为WAR文件，关于WAR的具体信息见<BR>servlet规范):&nbsp;<BR>docBase&nbsp;应用程序的路径或者是WAR文件存放的路径&nbsp;<BR>path&nbsp;表示此web应用程序的url的前缀，这样请求的url为<BR>http://localhost:8080/path/****&nbsp;<BR>reloadable&nbsp;这个属性非常重要，如果为true，则tomcat会自动检测应用程序<BR>的/WEB-INF/lib&nbsp;和/WEB-INF/classes目录的变化，自动装载新的应用程序，<BR>我们可以在不重起tomcat的情况下改变应用程序&nbsp;<BR><BR>host&nbsp;(表示一个虚拟主机):&nbsp;<BR>name&nbsp;指定主机名&nbsp;<BR>appBase&nbsp;应用程序基本目录，即存放应用程序的目录&nbsp;<BR>unpackWARs&nbsp;如果为true，则tomcat会自动将WAR文件解压，否则不解压，<BR>直接从WAR文件中运行应用程序&nbsp;<BR>Logger&nbsp;(表示日志，调试和错误信息):&nbsp;<BR>className&nbsp;指定logger使用的类名，此类必须实现<BR>org.apache.catalina.Logger&nbsp;接口&nbsp;<BR>prefix&nbsp;指定log文件的前缀&nbsp;<BR>suffix&nbsp;指定log文件的后缀&nbsp;<BR>timestamp&nbsp;如果为true，则log文件名中要加入时间，如下<BR>例:localhost_log.2001-10-04.txt&nbsp;<BR>Realm&nbsp;(表示存放用户名，密码及role的数据库):&nbsp;<BR>className&nbsp;指定Realm使用的类名，此类必须实现org.apache.catalina.Realm接口&nbsp;<BR>Valve&nbsp;(功能与Logger差不多，其prefix和suffix属性解释和Logger&nbsp;中的一<BR>样):&nbsp;<BR>className&nbsp;指定Valve使用的类名，如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信<BR>息&nbsp;<BR>directory&nbsp;指定log文件存放的位置&nbsp;<BR>pattern&nbsp;有两个值，common方式记录远程主机名或ip地址，用户名，日期，第<BR>一行请求的字符串，HTTP响应代码，发送的字节数。combined方式比common<BR>方式记录的值更多&nbsp;<BR><BR>注意：&nbsp;<BR>1：经过我测试，我设置Context&nbsp;的path="",reloadable=true，然后放一个<BR>WAR文件到webapps目录，结果tomcat不能检测出此文件(重起tomcat可<BR>以)，而把此文件解压，则tomcat会自动检测出这个新的应用程序。如果不能自动<BR>检测WAR文件，我们可以利用下面管理中讲的方法来部署应用程序。&nbsp;<BR><BR><BR>2：默认的server.xml中，Realm元素只设置了一个className属性，但此文件<BR>中也包含几个通过JDBC连接到数据库进行验证的示例(被注释掉了)，通过Realm<BR>元素我们可以实现容器安全管理(Container&nbsp;Managed&nbsp;Security)。&nbsp;<BR><BR><BR>3：还有一些元素我们没有介绍，如Parameter，loader，你可以通过tomcat<BR>的文档获取这些元素的信息。&nbsp;<BR><BR>(三)：管理&nbsp;<BR><BR>1：配置&nbsp;<BR>在进行具体的管理之前，我们先给tomcat添加一个用户，使这个用户有权限来进<BR>行管理。&nbsp;<BR>打开conf目录下的tomcat-users.xml文件，在相应的位置添加下面一行：&nbsp;<BR><BR><BR>&lt;user&nbsp;name="zf"&nbsp;password="zf"&nbsp;roles="standard,manager"/&gt;&nbsp;<BR><BR><BR>注意：这一行的最后部分一定是/&gt;,tomcat的文档掉了/符号，如果没有/符号的<BR>话，tomcat重起时将无法访问应用程序。通过logs/catalina.out文件你可以看<BR>到这个错误的详细信息。&nbsp;<BR><BR><BR>然后重起tomcat，在浏览器中输入http://localhost:8080/manager/，会弹<BR>出对话框，输入上面的用户名和密码即可。<BR>&nbsp;<BR><BR>2：应用程序列表&nbsp;<BR>在浏览器中输入http://localhost:8080/manager/list，浏览器将会显示如下<BR>的信息：&nbsp;<BR><BR>OK&nbsp;-&nbsp;Listed&nbsp;applications&nbsp;for&nbsp;virtual&nbsp;host&nbsp;localhost&nbsp;<BR>/ex:running:1&nbsp;<BR>/examples:running:1&nbsp;<BR>/webdav:running:0&nbsp;<BR>/tomcat-docs:running:0&nbsp;<BR>/manager:running:0&nbsp;<BR>/:running:0&nbsp;<BR><BR>上面的信息分别为应用程序的路径，当前状态(running&nbsp;或者stopped)，与这个<BR>程序相连的session数。&nbsp;<BR><BR>3：重新装载应用程序&nbsp;<BR>在浏览器中输入&nbsp;http://localhost:8080/manager/reload?<BR>path=/examples，浏览器显示如下：&nbsp;<BR><BR>OK&nbsp;-&nbsp;Reloaded&nbsp;application&nbsp;at&nbsp;context&nbsp;path&nbsp;/examples&nbsp;<BR><BR>表示example应用程序装载成功，如果我们将server.xml的Context元素的<BR>reloadable属性设为true(见上面表格)，则没必要利用这种方式重新装载应用程<BR>序，因为tomcat会自动装载。&nbsp;<BR><BR>4：显示session信息&nbsp;<BR>在浏览器中输入http://localhost:8080/manager/sessions?<BR>path=/examples，浏览器显示如下：&nbsp;<BR><BR>OK&nbsp;-&nbsp;Session&nbsp;information&nbsp;for&nbsp;application&nbsp;at&nbsp;context&nbsp;path&nbsp;/examples<BR>&nbsp;Default&nbsp;maximum&nbsp;session&nbsp;inactive&nbsp;interval&nbsp;30&nbsp;minutes&nbsp;<BR><BR>5：启动和关闭应用程序&nbsp;<BR>在浏览器中输入http://localhost:8080/manager/start?path=/examples<BR>和http://localhost:8080/manager/stop?path=/examples分别启动和关<BR>闭examples应用程序。&nbsp;<BR><BR>6：部署及撤销部署&nbsp;<BR>WAR有两种组织方式，一种是按一定的目录结构组织文件，一种是一个后缀为<BR>WAR的压缩包，因此它的部署方式也有两种：&nbsp;<BR>(1)：在浏览器中输入：http://localhost:8080/manager/install?<BR>path=/examples&amp;war=file:/c:examples&nbsp;<BR><BR>就会将按目录结构组织的WAR部署&nbsp;<BR><BR><BR>(2)：如果输入:http://localhost:8080/manager/install?path=/examples&amp;war=jar:file:/c:examples.war!/&nbsp;<BR>就会将按压缩包组织的WAR部署，注意此url后半部分一定要有!/号。&nbsp;<BR>部署后就可以用&nbsp;http://localhost:8080/examples访问了。&nbsp;<BR><BR>在浏览器中输入：http://localhost:8080/manager/remove?path=/examples&nbsp;就会撤销刚才部署的应用程序。&nbsp;<BR><BR><BR>(四)：与apache集成&nbsp;<BR>虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其<BR>作为web服务器的功能远不如apache,因此我们想把apache和tomcat集成起<BR>来。&nbsp;<BR>我们以linux系统为例介绍.&nbsp;<BR>从apache网站下载apache1.3.22源代码版本，然后使用如下命令配置安装<BR>apache：&nbsp;<BR><BR>mkdir&nbsp;/usr/local/apache&nbsp;<BR>tar&nbsp;zxvf&nbsp;apache.1.32.tar.gz&nbsp;<BR>cd&nbsp;apache.1.32&nbsp;<BR>./configure&nbsp;--prefix=/usr/local/apache&nbsp;--enable-module=so&nbsp;<BR>make&nbsp;<BR>make&nbsp;install&nbsp;<BR><BR>注意configure命令指定目标安装目录，并且加入DSO(Dynamic&nbsp;Shared&nbsp;<BR>Object)支持，注意一定不要忘了这一个选项。&nbsp;<BR><BR>然后下载webapp模块，将解压后mod_webapp.so文件放入apache的<BR>libexec目录，编辑apache的conf目录下的httpd.conf，在这个文件的最后加入<BR>下面三行：&nbsp;<BR><BR>LoadModule&nbsp;webapp_module&nbsp;libexec/mod_webapp.so&nbsp;<BR>WebAppConnection&nbsp;warpConnection&nbsp;warp&nbsp;localhost:8008&nbsp;<BR>WebAppDeploy&nbsp;examples&nbsp;warpConnection&nbsp;/examples/&nbsp;<BR><BR>第一行是加入webapp模块，如果编译apache时不增加DSO支持，则无法使用<BR>LoadModule指令，第二行指定tomcat与apache的连接，第三行指定部署那个<BR>应用，这两个指令使用格式如下：&nbsp;<BR><BR>WebAppConnection&nbsp;[connection&nbsp;name]&nbsp;[provider]&nbsp;[host:port]&nbsp;<BR>WebAppDeploy&nbsp;[application&nbsp;name]&nbsp;[connection&nbsp;name]&nbsp;[url&nbsp;path]&nbsp;<BR><BR>其中connection&nbsp;name指定连接名，provider只能是warp，port端口与你的<BR>tomcat的配置文件server.xml最后几行指定的要保持一致。文件如下：&nbsp;<BR><BR><BR>&lt;Service&nbsp;name="Tomcat-Apache"&gt;&nbsp;<BR>&lt;Connector&nbsp;className="org.apache.catalina.connector.warp.WarpConnector"&nbsp;<BR>port="8008"&nbsp;minProcessors="5"&nbsp;maxProcessors="75"&nbsp;<BR>enableLookups="true"&nbsp;<BR>acceptCount="10"&nbsp;debug="0"/&gt;&nbsp;<BR>******&nbsp;<BR>&lt;/Service&gt;&nbsp;<BR><BR>application&nbsp;name与你在tomcat中部署的应用名一致，url&nbsp;path指定访问这个<BR>应用的url。例如上面的例子可以通过http://localhost/examples/来访问<BR>tomcat中的examples应用。&nbsp;<BR><BR>(五)：中文问题&nbsp;<BR>一般jsp的乱码问题可以通过在jsp中加入&lt;%@&nbsp;page&nbsp;contentType="text/html;charset=GB2312"&nbsp;%&gt;来解决，至于servlet的乱<BR>码在可以使用servlet2.3中提供的HttpServeletRequest.setCharacterEncoding函数。更详细的中文问题请见<BR>JSP/Servlet&nbsp;中的汉字编码问题。&nbsp;<BR><BR><STRONG>四：综述</STRONG>&nbsp;<BR>tomcat作为一个servlet(jsp也被编译为servlet执行)容器，其应用前景是非常<BR>好的，如果与jboss结合起来，则可以实现sun的j2ee规范(用jboss作ejb服务<BR>器)。jboss的官方网站也提供集成了tomcat3.2*的jboss以供下载。另外一个开<BR>源的应用服务器(enhydra)&nbsp;也是基于tomcat的，其提供了更友好的管理界面，部署应用程序也更简单，功能也更强大。<BR><BR><FONT color=#ff1493>来源</FONT>：<A href="http://www.cnjsp.org/view.jsp?column=2&amp;id=454">http://www.cnjsp.org/view.jsp?column=2&amp;id=454</A></P><img src ="http://www.blogjava.net/allan-oy/aggbug/20303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2005-11-17 19:31 <a href="http://www.blogjava.net/allan-oy/articles/20303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat中的开发应用系统常见的配置</title><link>http://www.blogjava.net/allan-oy/articles/20228.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Thu, 17 Nov 2005 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/20228.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/20228.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/20228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/20228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/20228.html</trackback:ping><description><![CDATA[<FONT size=4>tomcat中的开发应用系统常见的配置</FONT> 
<P><STRONG>1.设置环境变量<BR></STRONG>Linux系统，修改catalina.sh和catalina.50.sh<BR>JAVA_HOME=/usr/local/j2sdk1.4.2_06<BR>JAVA_OPTS='-Xms512m -Xmx512m'<BR>CATALINA_HOME=/usr/local/jakarta-tomcat-5.0.28<BR>Windows系统，修改catalina.bat和catalina.50.bat<BR>set JAVA_HOME=D:\j2sdk1.4.2_06<BR>set CATALINA_HOME=D:\jakarta-tomcat-5.0.28</P>
<P><BR><FONT class=f14 id=zoom><STRONG>2. 如何加大tomcat连接数<BR></STRONG>在tomcat配置文件server.xml中的&lt;Connector /&gt;配置中，和连接数相关的参数有：<BR>minProcessors：最小空闲连接线程数，用于提高系统处理性能，默认值为10<BR>maxProcessors：最大连接线程数，即：并发处理的最大请求数，默认值为75<BR>acceptCount：允许的最大连接数，应大于等于maxProcessors，默认值为100<BR>enableLookups：是否反查域名，取值为：true或false。为了提高处理能力，应设置为false<BR>connectionTimeout：网络连接超时，单位：毫秒。设置为0表示永不超时，这样设置有隐患的。通常可设置为30000毫秒。<BR>其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数，应同时加大这两个参数。<BR>web server允许的最大连接数还受制于操作系统的内核参数设置，通常Windows是2000个左右，Linux是1000个左右。tomcat5中的配置示例：<BR>&nbsp;&nbsp;&nbsp; &lt;Connector port="8080"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableLookups="false" redirectPort="8443" acceptCount="100"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="0" connectionTimeout="20000" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disableUploadTimeout="true" /&gt;<BR>对于其他端口的侦听配置，以此类推。<BR><BR><B>3.&nbsp;tomcat中如何禁止列目录下的文件</B><BR>在{tomcat_home}/conf/web.xml中，把listings参数设置成false即可，如下：<BR>&lt;init-param&gt;<BR>&lt;param-name&gt;listings&lt;/param-name&gt;<BR>&lt;param-value&gt;false&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR><B><BR>4.如何加大tomcat可以使用的内存<BR></B>tomcat默认可以使用的内存为128MB，在较大型的应用项目中，这点内存是不够的，需要调大。<BR>Unix下，在文件{tomcat_home}/bin/catalina.sh的前面，增加如下设置：<BR>JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'<BR>需要把这个两个参数值调大。例如：<BR>JAVA_OPTS='-Xms256m -Xmx512m'<BR>表示初始化内存为256MB，可以使用的最大内存为512MB <BR><BR><STRONG>5. 如何添加默认访问页面<BR></STRONG>修改文件web.xml，在<FONT face="Courier New">welcome-file</FONT>里面加入需要的页面即可。<BR><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><FONT face="Courier New" color=#000000>&lt;welcome-file-list&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<BR>&lt;/welcome-file-list&gt;</FONT><BR><BR></FONT><STRONG><FONT face=Arial color=#000000>6. 如何添加出错页面</FONT></STRONG></SPAN></FONT></SPAN> 
<DIV class=postbody><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><FONT face=Arial color=#000000>修改文件web.xml，在location里面加入出错页面<BR>&nbsp;&lt;error-page&gt;<BR>&nbsp;&nbsp;&lt;error-code&gt;404&lt;/error-code&gt;<BR>&nbsp;&nbsp;&lt;location&gt;/error.jsp&lt;/location&gt;<BR>&nbsp;&lt;/error-page&gt;<BR>&nbsp;&lt;error-page&gt;<BR>&nbsp;&nbsp;&lt;error-code&gt;500&lt;/error-code&gt;<BR>&nbsp;&nbsp;&lt;location&gt;/error.jsp&lt;/location&gt;<BR>&nbsp;&lt;/error-page&gt;</FONT></FONT></SPAN></FONT></SPAN></DIV>
<P class=postbody><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial><STRONG>7.如何配置虚拟主机 <BR></STRONG></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>为了实现基于域名（IP地址）的虚拟主机，修改文件server.xml，加入以下内容：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host appBase="C:/webapp1" name="www.test1.com" unpackWARs="true" autoDeploy="true"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;www.test1.com&lt;/Alias&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;192.168.1.110&lt;/Alias&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host appBase="C:/webapp2" name="www.test2.com" unpackWARs="true" autoDeploy="true"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;www.test2.com&lt;/Alias&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;192.168.1.120&lt;/Alias&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<BR>在conf\Catalina\目录下建立文件夹，文件夹的名称为”www.test1.com”和“www.test2.com”，然后在这两个目录下建立文件ROOT.xml，其“www.test1.com“目录下ROOT.xml内容为：<BR>&lt;?xml version='1.0' encoding='utf-8'?&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;!--<BR>&nbsp;Context configuration file for the&nbsp;test1 App<BR>--&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;Context displayName=www.test1.com path="/"&nbsp; docBase="" useNaming="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="0" privileged="true" reloadable="true"&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="C:/webapp1/WEB-INF/logs"&nbsp;prefix="test1_log."<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suffix=".txt" timestamp="true"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.valves.AccessLogValve"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="logs"&nbsp; prefix="test1_access_log." suffix=".txt"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pattern="combined" resolveHosts="false"/&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;/Context&gt;</FONT></FONT></SPAN></FONT></SPAN></P><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>
<P class=postbody><BR><STRONG>8. 如何配置mysql数据源<BR></STRONG>在本机建立数据库test，将mysql的JDBC驱动mysql-connector-java-3.0.9-stable-bin.jar拷贝到目录common\lib下，<BR>修改文件web.xml，加入以下内容：<BR><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;resource-ref&gt;<BR>&nbsp;&nbsp;&lt;description&gt;MySQL Datasource example&lt;/description&gt;<BR>&nbsp;&nbsp;&lt;res-ref-name&gt;jdbc/test&lt;/res-ref-name&gt;<BR>&nbsp;&nbsp;&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<BR>&nbsp;&nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt; <BR>&nbsp;&lt;/resource-ref&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial><BR>在WEB应用的配置文件里加入以下内容：<BR><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/&gt; <BR>&nbsp;&lt;ResourceParams name="jdbc/test"&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;factory&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&lt;!-- Class name for mm.mysql JDBC driver --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;driverClassName&lt;/name&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;org.gjt.mm.mysql.Driver&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt; <BR>&nbsp;&lt;!-- The JDBC connection url for connecting to your MySQL dB.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;The autoReconnect=true argument to the url makes sure that the mm.mysql JDBC Driver will automatically reconnect if mysqld closed the connection.&nbsp; mysqld by default closes idle connections after 8 hours.&nbsp;--&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;url&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:mysql://localhost:3306/test?autoReconnect=true&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/parameter&gt; <BR>&nbsp;&lt;!-- MySQL dB username and password for dB connections&nbsp; --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;username&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;password&lt;/name&gt; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR>&nbsp;&lt;!-- Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle all of your db connections. Set to 0 for no limit. &nbsp;--&gt;<BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxActive&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;100&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp; <BR>&nbsp;&lt;!-- Maximum number of idle dB connections to retain in pool. Set to 0 for no limit. --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxIdle&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;30&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR>&nbsp;&lt;!-- Maximum time to wait for a dB connection to become available in ms, in this example 10 seconds. An Exception is thrown if this timeout is exceeded.&nbsp; Set to -1 to wait indefinitely. &nbsp;--&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxWait&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;10000&lt;/value&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;/ResourceParams&gt;</FONT></FONT></SPAN></FONT></SPAN></FONT></FONT></SPAN></FONT></SPAN></P></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;resource-ref&gt;<BR>&nbsp;&nbsp;&lt;description&gt;MySQL Datasource example&lt;/description&gt;<BR>&nbsp;&nbsp;&lt;res-ref-name&gt;jdbc/test&lt;/res-ref-name&gt;<BR>&nbsp;&nbsp;&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<BR>&nbsp;&nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt; <BR>&nbsp;&lt;/resource-ref&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial><BR>在WEB应用的配置文件里加入以下内容：<BR><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/&gt; <BR>&nbsp;&lt;ResourceParams name="jdbc/test"&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;factory&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&lt;!-- Class name for mm.mysql JDBC driver --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;driverClassName&lt;/name&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;org.gjt.mm.mysql.Driver&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt; <BR>&nbsp;&lt;!-- The JDBC connection url for connecting to your MySQL dB.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;The autoReconnect=true argument to the url makes sure that the mm.mysql JDBC Driver will automatically reconnect if mysqld closed the connection.&nbsp; mysqld by default closes idle connections after 8 hours.&nbsp;--&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;url&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:mysql://localhost:3306/test?autoReconnect=true&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/parameter&gt; <BR>&nbsp;&lt;!-- MySQL dB username and password for dB connections&nbsp; --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;username&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;password&lt;/name&gt; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR>&nbsp;&lt;!-- Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle all of your db connections. Set to 0 for no limit. &nbsp;--&gt;<BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxActive&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;100&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp; <BR>&nbsp;&lt;!-- Maximum number of idle dB connections to retain in pool. Set to 0 for no limit. --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxIdle&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;30&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR>&nbsp;&lt;!-- Maximum time to wait for a dB connection to become available in ms, in this example 10 seconds. An Exception is thrown if this timeout is exceeded.&nbsp; Set to -1 to wait indefinitely. &nbsp;--&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxWait&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;10000&lt;/value&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;/ResourceParams&gt;</FONT></FONT></SPAN></FONT></SPAN></FONT></FONT></SPAN></FONT></SPAN><FONT face="宋体, MS Song"> </FONT>
<P class=postbody><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><STRONG>9.<!--StartFragment --> </STRONG><STRONG>tomcat连接池的配置</STRONG> </FONT></SPAN></SPAN></SPAN></SPAN><!--StartFragment --></P></FONT>
<P></P>
<DIV class=postbody><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><FONT face=Arial color=#000000>修改文件web.xml，在location里面加入出错页面<BR>&nbsp;&lt;error-page&gt;<BR>&nbsp;&nbsp;&lt;error-code&gt;404&lt;/error-code&gt;<BR>&nbsp;&nbsp;&lt;location&gt;/error.jsp&lt;/location&gt;<BR>&nbsp;&lt;/error-page&gt;<BR>&nbsp;&lt;error-page&gt;<BR>&nbsp;&nbsp;&lt;error-code&gt;500&lt;/error-code&gt;<BR>&nbsp;&nbsp;&lt;location&gt;/error.jsp&lt;/location&gt;<BR>&nbsp;&lt;/error-page&gt;</FONT></FONT></SPAN></FONT></SPAN></DIV>
<P class=postbody><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial><STRONG>7.如何配置虚拟主机 <BR></STRONG></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>为了实现基于域名（IP地址）的虚拟主机，修改文件server.xml，加入以下内容：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host appBase="C:/webapp1" name="www.test1.com" unpackWARs="true" autoDeploy="true"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;www.test1.com&lt;/Alias&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;192.168.1.110&lt;/Alias&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host appBase="C:/webapp2" name="www.test2.com" unpackWARs="true" autoDeploy="true"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;www.test2.com&lt;/Alias&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;192.168.1.120&lt;/Alias&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<BR>在conf\Catalina\目录下建立文件夹，文件夹的名称为”www.test1.com”和“www.test2.com”，然后在这两个目录下建立文件ROOT.xml，其“www.test1.com“目录下ROOT.xml内容为：<BR>&lt;?xml version='1.0' encoding='utf-8'?&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;!--<BR>&nbsp;Context configuration file for the&nbsp;test1 App<BR>--&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;Context displayName=www.test1.com path="/"&nbsp; docBase="" useNaming="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="0" privileged="true" reloadable="true"&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="C:/webapp1/WEB-INF/logs"&nbsp;prefix="test1_log."<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suffix=".txt" timestamp="true"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.valves.AccessLogValve"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="logs"&nbsp; prefix="test1_access_log." suffix=".txt"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pattern="combined" resolveHosts="false"/&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;/Context&gt;</FONT></FONT></SPAN></FONT></SPAN></P><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>
<P class=postbody><BR><STRONG>8. 如何配置mysql数据源<BR></STRONG>在本机建立数据库test，将mysql的JDBC驱动mysql-connector-java-3.0.9-stable-bin.jar拷贝到目录common\lib下，<BR>修改文件web.xml，加入以下内容：<BR><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;resource-ref&gt;<BR>&nbsp;&nbsp;&lt;description&gt;MySQL Datasource example&lt;/description&gt;<BR>&nbsp;&nbsp;&lt;res-ref-name&gt;jdbc/test&lt;/res-ref-name&gt;<BR>&nbsp;&nbsp;&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<BR>&nbsp;&nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt; <BR>&nbsp;&lt;/resource-ref&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial><BR>在WEB应用的配置文件里加入以下内容：<BR><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/&gt; <BR>&nbsp;&lt;ResourceParams name="jdbc/test"&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;factory&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&lt;!-- Class name for mm.mysql JDBC driver --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;driverClassName&lt;/name&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;org.gjt.mm.mysql.Driver&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt; <BR>&nbsp;&lt;!-- The JDBC connection url for connecting to your MySQL dB.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;The autoReconnect=true argument to the url makes sure that the mm.mysql JDBC Driver will automatically reconnect if mysqld closed the connection.&nbsp; mysqld by default closes idle connections after 8 hours.&nbsp;--&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;url&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:mysql://localhost:3306/test?autoReconnect=true&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/parameter&gt; <BR>&nbsp;&lt;!-- MySQL dB username and password for dB connections&nbsp; --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;username&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;password&lt;/name&gt; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR>&nbsp;&lt;!-- Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle all of your db connections. Set to 0 for no limit. &nbsp;--&gt;<BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxActive&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;100&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp; <BR>&nbsp;&lt;!-- Maximum number of idle dB connections to retain in pool. Set to 0 for no limit. --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxIdle&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;30&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR>&nbsp;&lt;!-- Maximum time to wait for a dB connection to become available in ms, in this example 10 seconds. An Exception is thrown if this timeout is exceeded.&nbsp; Set to -1 to wait indefinitely. &nbsp;--&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxWait&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;10000&lt;/value&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;/ResourceParams&gt;</FONT></FONT></SPAN></FONT></SPAN></FONT></FONT></SPAN></FONT></SPAN></P></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;resource-ref&gt;<BR>&nbsp;&nbsp;&lt;description&gt;MySQL Datasource example&lt;/description&gt;<BR>&nbsp;&nbsp;&lt;res-ref-name&gt;jdbc/test&lt;/res-ref-name&gt;<BR>&nbsp;&nbsp;&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<BR>&nbsp;&nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt; <BR>&nbsp;&lt;/resource-ref&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial><BR>在WEB应用的配置文件里加入以下内容：<BR><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/&gt; <BR>&nbsp;&lt;ResourceParams name="jdbc/test"&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;factory&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&lt;!-- Class name for mm.mysql JDBC driver --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;driverClassName&lt;/name&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;org.gjt.mm.mysql.Driver&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt; <BR>&nbsp;&lt;!-- The JDBC connection url for connecting to your MySQL dB.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;The autoReconnect=true argument to the url makes sure that the mm.mysql JDBC Driver will automatically reconnect if mysqld closed the connection.&nbsp; mysqld by default closes idle connections after 8 hours.&nbsp;--&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;url&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:mysql://localhost:3306/test?autoReconnect=true&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/parameter&gt; <BR>&nbsp;&lt;!-- MySQL dB username and password for dB connections&nbsp; --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;username&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;password&lt;/name&gt; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR>&nbsp;&lt;!-- Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle all of your db connections. Set to 0 for no limit. &nbsp;--&gt;<BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxActive&lt;/name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;100&lt;/value&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;&nbsp; <BR>&nbsp;&lt;!-- Maximum number of idle dB connections to retain in pool. Set to 0 for no limit. --&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxIdle&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;30&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR>&nbsp;&lt;!-- Maximum time to wait for a dB connection to become available in ms, in this example 10 seconds. An Exception is thrown if this timeout is exceeded.&nbsp; Set to -1 to wait indefinitely. &nbsp;--&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&lt;parameter&gt;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&lt;name&gt;maxWait&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;10000&lt;/value&gt;&nbsp; <BR>&nbsp;&nbsp;&lt;/parameter&gt;<BR></FONT></FONT></SPAN></FONT></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=宋体><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><FONT face=Arial>&lt;/ResourceParams&gt;</FONT></FONT></SPAN></FONT></SPAN></FONT></FONT></SPAN></FONT></SPAN><FONT face="宋体, MS Song"> </FONT>
<P class=postbody><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US style="COLOR: blue"><SPAN lang=EN-US style="COLOR: blue"><FONT color=#000000><STRONG>9.<!--StartFragment --> </STRONG><STRONG>tomcat连接池的配置</STRONG> </FONT></SPAN></SPAN></SPAN></SPAN><!--StartFragment --></P>
<DIV class=postText>
<P>&lt;Resource name="jdbc/testDB" auth="Container"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource"/&gt; <BR>&lt;ResourceParams name="jdbc/testDB"&gt;<BR>&nbsp;&nbsp; &lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;factory&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<BR>&nbsp;&nbsp; &lt;/parameter&gt;<BR>&nbsp;&nbsp; &lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;driverClassName&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt;<BR>&nbsp;&nbsp; &lt;/parameter&gt;<BR>&nbsp;&nbsp; &lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;url&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>&lt;value&gt;jdbc:microsoft:sqlserver://218.246.85.65:1433;DatabaseName=ZCMIS&lt;/v</P>
<P>alue&gt;<BR>&nbsp;&nbsp; &lt;/parameter&gt;<BR>&nbsp;&nbsp; &lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;username&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;sa&lt;/value&gt;<BR>&nbsp;&nbsp; &lt;/parameter&gt;<BR>&nbsp;&nbsp; &lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;password&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;sa&lt;/value&gt;<BR>&nbsp;&nbsp; &lt;/parameter&gt;<BR>&nbsp;&nbsp; &lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxActive&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;30&lt;/value&gt;<BR>&nbsp;&nbsp; &lt;/parameter&gt;<BR>&nbsp;&nbsp; &lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxIdle&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;10&lt;/value&gt;<BR>&nbsp;&nbsp; &lt;/parameter&gt;<BR>&nbsp;&nbsp; &lt;parameter&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxWait&lt;/name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;1000&lt;/value&gt;<BR>&nbsp;&nbsp; &lt;/parameter&gt;<BR>&lt;/ResourceParams&gt;</P>
<P><BR>把下面的东西加到web.xml中<BR>&nbsp;&nbsp; &lt;resource-ref&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;DB Connection&lt;/description&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-ref-name&gt;jdbc/testDB&lt;/res-ref-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;res-auth&gt;Container&lt;/res-auth&gt;<BR>&nbsp; &lt;/resource-ref&gt;<BR>类的内部实现</P>
<P>&nbsp;try{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context initCtx = new InitialContext();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context ctx = (Context) initCtx.lookup("java:comp/env");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取连接池对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object obj = (Object) ctx.lookup("jdbc/testDB");&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javax.sql.DataSource ds = (javax.sql.DataSource)obj;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection conn = ds.getConnection();</P>
<P>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;catch(Exception e)<BR>&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp; System.out.print(e.toString());<BR>&nbsp;}</P></DIV><A href="http://blog.csdn.net/wangyin5200/"></A><BR>
<DIV style="FONT-SIZE: 14px; LINE-HEIGHT: 25px"><STRONG>来源：<A href="http://dev.csdn.net/article/77199.shtm">http://dev.csdn.net/article/77199.shtm</A></STRONG></DIV><img src ="http://www.blogjava.net/allan-oy/aggbug/20228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2005-11-17 13:56 <a href="http://www.blogjava.net/allan-oy/articles/20228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>