博威---云架构决胜云计算

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6908|回复: 12

Tomcat全攻略

[复制链接]
发表于 2010-2-19 20:36:12 | 显示全部楼层 |阅读模式
Tomcat全攻略
内容:
一:简介
二:安装及配置
三:应用
四:综述
参考资料
关于作者

宗 锋
西北大学计算机系硕士
2001 年 12 月
随着java的流行,其在web上的应用也越来越广,tomcat作为一个开源的servlet容器,应用前景越来越广,本文将向你讲述tomcat的一些知识。

[url=]一:简介[/url]
tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品(Most Innovative Java Product),同时它又是sun公司官方推荐的servlet和jsp容器(具体可以见http://java.sun.com/products/jsp/tomcat/),因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。
[url=]二:安装及配置[/url]
tomcat最新版本为4.0.1,这个版本用了一个新的servlet容器Catalina,完整的实现了servlet2.3和jsp1.2规范。注意安装之前你的系统必须安装了jdk1.2以上版本。
(一):安装
1:windows平台
从tomcat网站下载jakarta-tomcat-4.0.1.exe,按照一般的windows程序安装步骤即可安装好tomcat,安装时它会自动寻找你的jdk和jre的位置。
2:linux平台
下载jakarta-tomcat-4.0.1.tar.gz,将其解压到一个目录。
(二):配置
运行tomcat需要设置JAVA_HOME变量
set JAVA_HOME=c:/jdk (win98,在msdos方式下使用,或者放入autoexec.bat中)export JAVA_HOME=/usr/local/jdk (linux下使用,放到/etc/bashrc或者/etc/profile中)



(三):运行
设置完毕后就可以运行tomcat服务器了,进入tomcat的bin目录,win98下用startup启动tomcat,linux下用startup.sh,相应的关闭tomcat的命令为shutdown和shutdown.sh。
启动后可以在浏览器中输入http://localhost:8080/测试,由于tomcat本身具有web服务器的功能,因此我们不必安装apache,当然其也可以与apache集成到一起,下面会介绍。
下面你可以测试其自带的jsp和servlet示例。
[url=]三:应用[/url]
(一):目录结构
tomcat的目录结构如下:
目录名简介
bin存放启动和关闭tomcat脚本
conf包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
work存放jsp编译后产生的class文件
webapp存放应用程序示例,以后你要部署的应用程序也要放到此目录
logs存放日志文件
lib/japser/common这三个目录主要存放tomcat所需的jar文件



(二):server.xml配置简介
下面我们将讲述这个文件中的基本配置信息,更具体的配置信息见tomcat的文档
元素名属性解释
serverport指定一个端口,这个端口负责监听关闭tomcat的请求
shutdown指定向端口发送的命令字符串
servicename指定service的名字
Connector
(表示客户端和service之间的连接)
port指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
minProcessors服务器启动时创建的处理请求的线程数
maxProcessors最大可以创建的处理请求的线程数
enableLookups如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout指定超时的时间数(以毫秒为单位)
Engine
(表示指定service中的请求处理机,接收和处理来自Connector的请求)
defaultHost指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
Context
(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范)
docBase应用程序的路径或者是WAR文件存放的路径
path表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
reloadable这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序

host
(表示一个虚拟主机)
name指定主机名
appBase应用程序基本目录,即存放应用程序的目录
unpackWARs如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序

Logger
(表示日志,调试和错误信息)
className指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
prefix指定log文件的前缀
suffix指定log文件的后缀
timestamp如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt

Realm
(表示存放用户名,密码及role的数据库)
className指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口

Valve
(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样)
className
指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息
directory指定log文件存放的位置
pattern有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多

注意:1:经过我测试,我设置Context 的path="",reloadable=true,然后放一个WAR文件到webapps目录,结果tomcat不能检测出此文件(重起tomcat可以),而把此文件解压,则tomcat会自动检测出这个新的应用程序。如果不能自动检测WAR文件,我们可以利用下面管理中讲的方法来部署应用程序。
2:默认的server.xml中,Realm元素只设置了一个className属性,但此文件中也包含几个通过JDBC连接到数据库进行验证的示例(被注释掉了),通过Realm元素我们可以实现容器安全管理(Container Managed Security)。
3:还有一些元素我们没有介绍,如Parameter,loader,你可以通过tomcat的文档获取这些元素的信息。
(三):管理
1:配置
在进行具体的管理之前,我们先给tomcat添加一个用户,使这个用户有权限来进行管理。
打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行:
<user name="zf" password="zf" roles="standard,manager"/>



注意:这一行的最后部分一定是/>,tomcat的文档掉了/符号,如果没有/符号的话,tomcat重起时将无法访问应用程序。通过logs/catalina.out文件你可以看到这个错误的详细信息。
然后重起tomcat,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的用户名和密码即可。
2:应用程序列表
在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息:
OK - Listed applications for virtual host localhost/ex:running:1/examples:running:1/webdav:running:0/tomcat-docs:running:0/manager:running:0/:running:0



面的信息分别为应用程序的路径,当前状态(running 或者stopped),与这个程序相连的session数。
3:重新装载应用程序
在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显示如下:
OK - Reloaded application at context path /examples  



表示example应用程序装载成功,如果我们将server.xml的Context元素的reloadable属性设为true(见上面表格),则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。
4:显示session信息
在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显示如下:
OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes  



5:启动和关闭应用程序
在浏览器中输入http://localhost:8080/manager/start?path=/examples和http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用程序。
6:部署及撤销部署
WAR有两种组织方式,一种是按一定的目录结构组织文件,一种是一个后缀为WAR的压缩包,因此它的部署方式也有两种:
(1):在浏览器中输入:http://localhost:8080/manager/install?path=/examples&war=file:/c:\examples
就会将按目录结构组织的WAR部署
(2):如果输入:http://localhost:8080/manager/install?path=/examples&war=jar:file:/c:\examples.war!/
就会将按压缩包组织的WAR部署,注意此url后半部分一定要有!/号。
部署后就可以用 http://localhost:8080/examples访问了。
在浏览器中输入:http://localhost:8080/manager/remove?path=/examples
就会撤销刚才部署的应用程序。
(四):与apache集成
虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此我们想把apache和tomcat集成起来。
我们以linux系统为例介绍.
从apache网站下载apache1.3.22源代码版本,然后使用如下命令配置安装apache:
mkdir /usr/local/apachetar zxvf apache.1.32.tar.gzcd apache.1.32./configure --prefix=/usr/local/apache --enable-module=so makemake install



注意configure命令指定目标安装目录,并且加入DSO(Dynamic Shared Object)支持,注意一定不要忘了这一个选项。
然后下载webapp模块,将解压后mod_webapp.so文件放入apache的libexec目录,编辑apache的conf目录下的httpd.conf,在这个文件的最后加入下面三行:
LoadModule webapp_module libexec/mod_webapp.soWebAppConnection warpConnection warp localhost:8008WebAppDeploy examples warpConnection /examples/



第一行是加入webapp模块,如果编译apache时不增加DSO支持,则无法使用LoadModule指令,第二行指定tomcat与apache的连接,第三行指定部署那个应用,这两个指令使用格式如下:
WebAppConnection [connection name] [provider] [host:port]WebAppDeploy [application name] [connection name] [url path]  



其中connection name指定连接名,provider只能是warp,port端口与你的tomcat的配置文件server.xml最后几行指定的要保持一致。文件如下:
<Service name="Tomcat-Apache"> <Connector className="org.apache.catalina.connector.warp.WarpConnector"port="8008" minProcessors="5" maxProcessors="75"enableLookups="true"acceptCount="10" debug="0"/>******</Service>



application name与你在tomcat中部署的应用名一致,url path指定访问这个应用的url。例如上面的例子可以通过http://localhost/examples/来访问tomcat中的examples应用。
(五):中文问题
一般jsp的乱码问题可以通过在jsp中加入<%@ page contentType="text/html;charset=GB2312" %>来解决,至于servlet的乱码在可以使用servlet2.3中提供的HttpServeletRequest.setCharacterEncoding函数。更详细的中文问题请见JSP/Servlet 中的汉字编码问题
[url=]四:综述[/url]
tomcat作为一个servlet(jsp也被编译为servlet执行)容器,其应用前景是非常好的,如果与jboss结合起来,则可以实现sun的j2ee规范(用jboss作ejb服务器)。jboss的官方网站也提供集成了tomcat3.2*的jboss以供下载。另外一个开源的应用服务器(enhydra) 也是基于tomcat的,其提供了更友好的管理界面,部署应用程序也更简单,功能也更强大。
[url=]参考资料:[/url]

[url=]关于作者[/url]
宗锋:西北大学计算机系硕士,对于基于 web 的各种新技术都感兴趣。
 楼主| 发表于 2010-2-19 20:37:47 | 显示全部楼层
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对ServletJavaServer PageJSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。但是,不能将 Tomcat 和 Apache Web 服务器混淆,Apache Web Server 是一个用 C 语言实现的 HTTP web server;这两个 HTTP web server 不是捆绑在一起的。Apache Tomcat 包含了一个配置管理工具,也可以通过编辑 XML 格式的配置文件来进行配置。
目录[隐藏]
[编辑] 名称由来
Tomcat最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目O'Reilly都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为Tomcat(英语公猫或其他雄性猫科动物)。而O'Reilly出版的介绍Tomcat的书籍(ISBN 0-596-00318-8[1]的封面也被设计成了一个公豹的形象。而Tomcat的Logo兼吉祥物也被设计成了一只公猫。[编辑] 环境
Tomcat提供了一个Jasper编译器用以将JSP编译成对应的Servlet。
Tomcat的Servlet引擎通常与Apache或者其他Web服务器一起工作。除了用于开发过程中的调试以及那些对速度和事务处理只有很小要求的用户,很少会将Tomcat单独作为Web服务器。但随着版本的更新,正有越来越多的用户将其单独作为Web服务器用以那些对速度和可靠性有较高要求的环境中。
由于Tomcat是使用Java开发的,所以它可以运行在任何一个装有JVM的不同操作系统之上。[编辑] 开發状况
和其他Apache软件基金会旗下的项目一样,Tomcat是由该基金会的会员和其他志愿者开发与维护的,并且是一个被置于Apache协议之下的开源软件。用户可以根据该协议免费获得其源代码及可执行文件。最初被发布出来的版本是Tomcat 3.0.x,当前的最新稳定版本是6.0.x。[编辑] 产品特性[编辑] Tomcat 3.x
  • 符合Servlet 2.2 和 JSP 1.1规范
  • Servlet更新
  • 基础的HTTP功能
[编辑] Tomcat 4.x
  • 符合Servlet 2.3 和 JSP 1.2规范
  • Servlet容器被重新设计,并被命名为Catalina
  • JSP引擎被重新设计,并被命名为Jasper
  • 新的Coyote连接器
  • 支持JMX,使用JSP和基于Struts的管理系统
[编辑] Tomcat 5.x[编辑] Tomcat 6.x
  • 符合Servlet 2.5 和 JSP 2.1规范
  • 支持统一表达式语言 2.1
  • 设计运行在Java SE 5.0 及以后版本上
  • 通过CometProcessor接口实现了对Comet的支持
  • 不同于过去版本,未集成管理员(admin)控制台
[编辑] 目录结构(Tomcat 5.5.x)$CATALINA_HOME   Tomcat安装目录├─bin          用以启动、关闭Tomcat或者其他功能的脚本(.bat文件和.sh文件)├─common       Catalina和Web应用程序会用到的Class及库文件├─conf         用以配置Tomcat的XMLDTD文件├─logs         Catalina和其他Web应用程序的日志文件├─server       Catalina用到的Class及库文件├─shared       Web应用程序用到的Class及库文件├─temp         临时文件├─webapps      Web应用程序根目录└─work         用以产生有JSP编译出的Servlet的.java和.class文件[编辑] 参看[编辑] 外部链接
 楼主| 发表于 2010-2-19 20:38:21 | 显示全部楼层
[编辑本段]
简介  Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的 tomcat标志
改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。

  Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

  这里的诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。
[编辑本段]
名称的由来  Tomcat最初是由Sun的软件构架师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目O'Reilly都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为Tomcat(英语公猫或其他雄性猫科动物)。而O'Reilly出版的介绍Tomcat的书籍(ISBN 0-596-00318-8)[1]的封面也被设计成了一个公豹的形象。而Tomcat的Logo兼吉祥物也被设计成了一只公猫。
[编辑本段]
最新版本与规范的对照  Servlet/JSP_ 规范版本 Apache Tomcat 版本

  ---------------------------------------------

  2.5/2.1____ 6.0.18

  2.4/2.0____ 5.5.25

  2.3/1.2____ 4.1.36

  2.2/1.1____ 3.3.2
[编辑本段]
常用功能的配置方法
    1 启动内存参数的配置

  tomcat/bin/catalina.bat 如果是linux 就是 catalina.sh

  在rem 的后面增加如下参数

  set JAVA_OPTS= -Xms256m -Xmx256m -XX:MaxPermSize=64m

  2 修改Tomcat的JDK目录

  打开tomcat/bin/catalina.bat

  在最后一个rem后面增加

  set JAVA_HOME=C:\Program Files\Java\jdk1.6.0

  3 增加虚拟目录

  /tomcat/conf/server.xml

  第一行是以前默认存在的,第二行是新增的

  <Context path="" docBase="ROOT" debug="0" reloadable="true"></Context>

  <Context path="/jsp/a" reloadable="true" docBase="E:\workplace\www.java2000.net\WebContent" />

  4 GET方式URL乱码问题解决

  打开 tomcat/conf/server.xml

  查找下面这部分,在最后增加一段代码就可以了。

  <Connector port="80" maxHttpHeaderSize="8192"

  .................

  URIEncoding="UTF-8" useBodyEncodingForURI="true"

  ...............

  />

  其中的UTF-8 请根据你的需要自己修改,比如GBK

  5 虚拟主机配置文件

  tomcat/conf/server.xml

  <!-- 默认的主机 -->

  <Host name="localhost" appBase="webapps"

  unpackWARs="true" autoDeploy="true"

  xmlValidation="false" xmlNamespaceAware="false">

  <Context path="" docBase="ROOT" debug="0" reloadable="true"></Context>

  ...

  </host>

  <!-- 以下是新增的虚拟主机 -->

  <Host name="www.java2000.net" appBase="webapps"

  unpackWARs="true" autoDeploy="true"

  xmlValidation="false" xmlNamespaceAware="false">

  <Context path="" docBase="d:/www.java2000.net" debug="0" reloadable="true"></Context>

  <!-- 虚拟目录 -->

  <Context path="/count" docBase="d:/counter.java2000.net" debug="0" reloadable="true"></Context>

  </Host>

  <Host name="java2000.net" appBase="webapps"

  unpackWARs="true" autoDeploy="true"

  xmlValidation="false" xmlNamespaceAware="false">

  <Context path="" docBase="d:/www.java2000.net" debug="0" reloadable="true"></Context>

  <Context path="/count" docBase="d:/counter.java2000.net" debug="0" reloadable="true"></Context>

  </Host>

  6 数据源配置

  比较复杂,各个版本都有所不同,请直接查看 http://java2000.net/p1906,包括tomcat5.0,tomcat5.5x,tomcat6.0的各个版本的配置方法。

  更多关于Tomcat的使用,请看参考资料
[编辑本段]
Tomcat配置的10个技巧  1. 配置系统管理(Admin Web Application)

  大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的管理 工具,并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin Web Application最初在4.1版本时出现,当时的功能包括管理context、data source、user和group等。当然也可以管理像初始化参数,user、group、role的多种数据库管理等。在后续的版本中,这些功能将得 到很大的扩展,但现有的功能已经非常实用了。

  Admin Web Application被定义在自动部署文件:CATALINA_BASE/webapps/admin.xml 。

  必须编辑这个文件,以确定Context中的docBase参数是绝对路径。也就是说, CATALINA_BASE/webapps/admin.xml 的路径是绝对路径。作为另外一种选择,也可以删除这个自动部署文件,而在server.xml文件中建立一个Admin Web Application的context,效果是一样的。不能管理Admin Web Application这个应用,换而言之,除了删除CATALINA_BASE/webapps/admin.xml ,可能什么都做不了。

  如果使用UserDatabaseRealm(默认),将需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文件中。你编辑这个文件,添加一个名叫“admin”的role 到该文件中,如下:

  <role name=“admin”/>

  同样需要有一个用户,并且这个用户的角色是“admin”。象存在的用户那样,添加一个用户(改变密码使其更加安全):

  <user name=“admin” password=“deep_dark_secret” roles=“admin”/>

  当完成这些步骤后,请重新启动Tomcat,访问http://localhost:8080/admin,将看到一个登录界面。Admin Web Application采用基于容器管理的安全机制,并采用了Jakarta Struts框架。一旦作为“admin”角色的用户登录管理界面,将能够使用这个管理界面配置Tomcat。

  2.配置应用管理(Manager Web Application)

  Manager Web Application让你通过一个比Admin Web Application更为简单的用户界面,执行一些简单的Web应用任务。

  Manager Web Application被被定义在一个自动部署文件中:

  CATALINA_BASE/webapps/manager.xml 。

  必须编辑这个文件,以确保context的docBase参数是绝对路径,也就是说CATALINA_HOME/server/webapps/manager的绝对路径。

  如果使用的是UserDatabaseRealm,那么需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文件中。接下来,编辑这个文件,添加一个名为“manager”的角色到该文件中:

  <role name=“manager”>

  同样需要有一个角色为“manager”的用户。像已经存在的用户那样,添加一个新用户(改变密码使其更加安全):

  <user name=“manager” password=“deep_dark_secret” roles=“manager”/>

  然后重新启动Tomcat,访问http://localhost/manager/list,将看到一个很朴素的文本型管理界面,或者访问http: //localhost/manager/html/list,将看到一个HMTL的管理界面。不管是哪种方式都说明你的Manager Web Application现在已经启动了。

  Manager application可以在没有系统管理特权的基础上,安装新的Web应用,以用于测试。如果我们有一个新的web应用位于 /home/user/hello下在,并且想把它安装到 /hello下,为了测试这个应用,可以这么做,在第一个文件框中输入“/hello”(作为访问时的path),在第二个文本框中输入“file: /home/user/hello”(作为Config URL)。

  Manager application还允许停止、重新启动、移除以及重新部署一个web应用。停止一个应用使其无法被访问,当有用户尝试访问这个被停止的应用时,将 看到一个503的错误——“503 - This application is not currently available”。

  移除一个web应用,只是指从Tomcat的运行拷贝中删除了该应用,如果重新启动Tomcat,被删除的应用将再次出现(也就是说,移除并不是指从硬盘上删除)。

  3.部署一个web应用

  有两个办法可以在系统中部署web服务。

  1> 拷贝WAR文件或者web应用文件夹(包括该web的所有内容)到$CATALINA_BASE/webapps目录下。

  2> 为web服务建立一个只包括context内容的XML片断文件,并把该文件放到$CATALINA_BASE/webapps目录下。这个web应用本身可以存储在硬盘上的任何地方。

  如果有一个WAR文件,想部署它,则只需要把该文件简单的拷贝到CATALINA_BASE/webapps目录下即可,文件必须以“。war”作 为扩展名。一旦Tomcat监听到这个文件,它将(缺省的)解开该文件包作为一个子目录,并以WAR文件的文件名作为子目录的名字。接下来,Tomcat 将在内存中建立一个context,就好象在server.xml文件里建立一样。当然,其他必需的内容,将从server.xml中的 DefaultContext获得。

  部署web应用的另一种方式是写一个Context XML片断文件,然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断并非一个完整的XML文件,而只是一个 context元素,以及对该应用的相应描述。这种片断文件就像是从server.xml中切取出来的context元素一样,所以这种片断被命名为 “context片断”。

  举个例子,如果我们想部署一个名叫MyWebApp.war的应用,该应用使用realm作为访问控制方式,我们可以使用下面这个片断:

  <!--

  Context fragment for deploying MyWebApp.war

  -->

  <Context path=“/demo” docBase=“webapps/MyWebApp.war”

  debug=“0” privileged=“true”>

  <Realm className=“org.apache.catalina.realm.UserDatabaseRealm”

  resourceName=“UserDatabase”/>

  </Context>

  把该片断命名为“MyWebApp.xml”,然后拷贝到CATALINA_BASE/webapps目录下。

  这种context片断提供了一种便利的方法来部署web应用,不需要编辑server.xml,除非想改变缺省的部署特性,安装一个新的web应用时不需要重启动Tomcat。

  4.配置虚拟主机(Virtual Hosts)

  关于server.xml中“Host”这个元素,只有在设置虚拟主机的才需要修改。虚拟主机是一种在一个web服务器上服务多个域名的机制,对每个域 名而言,都好象独享了整个主机。实际上,大多数的小型商务网站都是采用虚拟主机实现的,这主要是因为虚拟主机能直接连接到Internet并提供相应的带 宽,以保障合理的访问响应速度,另外虚拟主机还能提供一个稳定的固定IP。

  基于名字的虚拟主机可以被建立在任何web服务器上,建立的方法就是通过在域名服务器(DNS)上建立IP地址的别名,并且告诉web服务器把去往不同域 名的请求分发到相应的网页目录。

  在Tomcat中使用虚拟主机,需要设置DNS或主机数据。为了测试,为本地IP设置一个IP别名就足够了,接下来,你需要在server.xml中添加几行内容,如下:

  <Server port=“8005” shutdown=“SHUTDOWN” debug=“0”>

  <Service name=“Tomcat-Standalone”>

  <Connector className=“org.apache.coyote.tomcat4.CoyoteConnector”

  port=“8080” minProcessors=“5” maxProcessors=“75”

  enableLookups=“true” redirectPort=“8443”/>

  <Connector className=“org.apache.coyote.tomcat4.CoyoteConnector”

  port=“8443” minProcessors=“5” maxProcessors=“75”

  acceptCount=“10” debug=“0” scheme=“https” secure=“true”/>

  <Factory className=“org.apache.coyote.tomcat4.CoyoteServerSocketFactory”

  clientAuth=“false” protocol=“TLS” />

  </Connector>

  <Engine name=“Standalone” defaultHost=“localhost” debug=“0”>

  <!-- This Host is the default Host -->

  <Host name=“localhost” debug=“0” appBase=“webapps”

  unpackWARs=“true” autoDeploy=“true”>

  <Context path=“” docBase=“ROOT” debug=“0”/>

  <Context path=“/orders” docBase=“/home/ian/orders” debug=“0”

  reloadable=“true” crossContext=“true”>

  </Context>

  </Host>

  <!-- This Host is the first “Virtual Host”: www.example.com -->

  <Host name=“www.example.com” appBase=“/home/example/webapp”>

  <Context path=“” docBase=“.”/>

  </Host>

  </Engine>

  </Service>

  </Server>

  Tomcat的server.xml文件,在初始状态下,只包括一个虚拟主机,但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的 server.xml版本,其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素,所包含的context元 素中必须有一个是默认的context,这个默认的context的显示路径应该为空(例如,path=“”)。

  5.配置基础验证(Basic Authentication)

  容器管理验证方法控制着当用户访问受保护的web应用资源时,如何进行用户的身份鉴别。当一个web应用使用了Basic Authentication(BASIC参数在web.xml文件中auto-method元素中设置),而有用户访问受保护的web应用时, Tomcat将通过HTTP Basic Authentication方式,弹出一个对话框,要求用户输入用户名和密码。在这种验证方法中,所有密码将被以64位的编码方式在网络上传输。

  注意:使用Basic Authentication通过被认为是不安全的,因为它没有强健的加密方法,除非在客户端和服务器端都使用HTTPS或者其他密码加密码方式(比如, 在一个虚拟私人网络中)。若没有额外的加密方法,网络管理员将能够截获(或滥用)用户的密码。但是,如果是刚开始使用Tomcat,或者你想在你的 web应用中测试一下基于容器的安全管理,Basic Authentication还是非常易于设置和使用的。只需要添加<security-constraint>和<login- config>两个元素到web应用的web.xml文件中,并且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加适当的<role>和<user>即可,然后重新启动Tomcat。

  6.配置单点登录(Single Sign-On)

  一旦设置了realm和验证的方法,就需要进行实际的用户登录处理。一般说来,对用户而言登录系统是一件很麻烦的事情,必须尽量减少用户登录验证的 次数。作为缺省的情况,当用户第一次请求受保护的资源时,每一个web应用都会要求用户登录。如果运行了多个web应用,并且每个应用都需要进行单独的 用户验证,那这看起来就有点像在用户搏斗。用户们不知道怎样才能把多个分离的应用整合成一个单独的系统,所有用户也就不知道他们需要访问多少个不 同的应用,只是很迷惑,为什么总要不停的登录。

  Tomcat 4的“single sign-on”特性允许用户在访问同一虚拟主机下所有web应用时,只需登录一次。为了使用这个功能,只需要在Host上添加一个SingleSignOn Valve元素即可,如下所示:

  <Valve className=“org.apache.catalina.authenticator.SingleSignOn”

  debug=“0”/>

  在Tomcat初始安装后,server.xml的注释里面包括SingleSignOn Valve配置的例子,只需要去掉注释,即可使用。那么,任何用户只要登录过一个应用,则对于同一虚拟主机下的所有应用同样有效。

  使用single sign-on valve有一些重要的限制:

  1> value必须被配置和嵌套在相同的Host元素里,并且所有需要进行单点验证的web应用(必须通过context元素定义)都位于该Host下。

  2> 包括共享用户信息的realm必须被设置在同一级Host中或者嵌套之外。

  3> 不能被context中的realm覆盖。

  4> 使用单点登录的web应用最好使用一个Tomcat的内置的验证方式(被定义在web.xml中的<auth-method>中),这比自定 义的验证方式强,Tomcat内置的的验证方式包括basic、digest、form和client-cert。

  5> 如果你使用单点登录,还希望集成一个第三方的web应用到你的网站中来,并且这个新的web应用使用它自己的验证方式,而不使用容器管理安全,那你基本上 就没招了。用户每次登录原来所有应用时需要登录一次,并且在请求新的第三方应用时还得再登录一次。

  6> 单点登录需要使用cookies。

  7.配置用户定制目录(Customized User Directores)

  一些站点允许个别用户在服务器上发布网页。例如,一所大学的学院可能想给每一位学生一个公共区域,或者是一个ISP希望给一些web空间给他的客户,但这又不是虚拟主机。在这种情况下,一个典型的方法就是在用户名前面加一个特殊字符(~),作为每位用户的网站,比如:

  http://www.cs.myuniversity.edu/~username提供两种方法在主机上映射这些个人网站,主要使用一对特殊的Listener元素。Listener的className属性应该是 org.apache.catalina.startup.UserConfig,userClass属性应该是几个映射类之一。如果电脑系统是 Unix,它将有一个标准的/etc/passwd文件,该文件中的帐号能够被运行中的Tomcat很容易的读取,该文件指定了用户的主目录,使用 PasswdUserDatabase 映射类。

  http://members.mybigisp.com/~username

  Tomcat

  <Listener className=“org.apache.catalina.startup.UserConfig”

  directoryName=“public_html”

  userClass=“org.apache.catalina.startup.PasswdUserDatabase”/>

  web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一样的目录下面。当然你也可以改变public_html 到其他任何子目录下。

  实际上,这个用户目录根本不一定需要位于用户主目录下里面。如果你没有一个密码文件,但你又想把一个用户名映射到公共的像/home一样目录的子目录里面,则可以使用HomesUserDatabase类。

  <Listener className=“org.apache.catalina.startup.UserConfig”

  directoryName=“public_html” homeBase=“/home”

  userClass=“org.apache.catalina.startup.HomesUserDatabase”/>

  这样一来,web文件就可以位于像/home/ian/public_html 或者 /home/jasonb/public_html一样的目录下。这种形式对Windows而言更加有利,你可以使用一个像c:\home这样的目录。

  这些Listener元素,如果出现,则必须在Host元素里面,而不能在context元素里面,因为它们都用应用于Host本身。

  8.在Tomcat中使用CGI脚本

  Tomcat主要是作为Servlet/JSP容器,但它也有许多传统web服务器的性能。支持通用网关接口(Common Gateway Interface,即CGI)就是其中之一,CGI提供一组方法在响应浏览器请求时运行一些扩展程序。CGI之所以被称为通用,是因为它能在大多数程序 或脚本中被调用,包括:Perl,Python,awk,Unix shell scripting等,甚至包括Java。不会把一个Java应用程序当作CGI来运行,毕竟这样太过原始。一般而言,开发Servlet总 要比CGI具有更好的效率,因为当用户点击一个链接或一个按钮时,不需要从操作系统层开始进行处理。

  Tomcat包括一个可选的CGI Servlet,允许你运行遗留下来的CGI脚本。

  为了使Tomcat能够运行CGI,必须做的几件事:

  1. 把servlets-cgi.renametojar (在CATALINA_HOME/server/lib/目录下)改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下。

  2. 在Tomcat的CATALINA_BASE/conf/web.xml 文件中,把关于<servlet-name> CGI的那段的注释去掉(默认情况下,该段位于第241行)。

  3. 同样,在Tomcat的CATALINA_BASE/conf/web.xml文件中,把关于对CGI进行映射的那段的注释去掉(默认情况下,该段位于第299行)。注意,这段内容指定了HTML链接到CGI脚本的访问方式。

  4. 可以把CGI脚本放置在WEB-INF/cgi 目录下(注意,WEB-INF是一个安全的地方,你可以把一些不想被用户看见或基于安全考虑不想暴露的文件放在此处),或者也可以把CGI脚本放置在 context下的其他目录下,并为CGI Servlet调整cgiPathPrefix初始化参数。这就指定的CGI Servlet的实际位置,且不能与上一步指定的URL重名。

  5. 重新启动Tomcat,你的CGI就可以运行了。

  在Tomcat中,CGI程序缺省放置在WEB-INF/cgi目录下,正如前面所提示的那样,WEB-INF目录受保护的,通过客户端的浏览器无法窥探 到其中内容,所以对于放置含有密码或其他敏感信息的CGI脚本而言,这是一个非常好的地方。为了兼容其他服务器,尽管你也可以把CGI脚本保存在传统的 /cgi-bin目录,但要知道,在这些目录中的文件有可能被网上好奇的冲浪者看到。另外,在Unix中,请确定运行Tomcat的用户有执行CGI脚本 的权限。

   9.改变Tomcat中的JSP编译器(JSP Compiler)

  在Tomcat 4.1(或更高版本,大概),JSP的编译由包含在Tomcat里面的Ant程序控制器直接执行。这听起来有一点点奇怪,但这正是Ant有意为之的一部 分,有一个API文档指导开发者在没有启动一个新的JVM的情况下,使用Ant。这是使用Ant进行Java开发的一大优势。另外,这也意味着你现在能够 在Ant中使用任何javac支持的编译方式,这里有一个关于Apache Ant使用手册的javac page列表。使用起来是容易的,因为你只需要在<init-param> 元素中定义一个名字叫“compiler”,并且在value中有一个支持编译的编译器名字,示例如下:

  <servlet>

  <servlet-name>jsp</servlet-name>

  <servlet-class>

  org.apache.jasper.servlet.JspServlet

  </servlet-class>

  <init-param>

  <param-name>logVerbosityLevel</param-name>

  <param-value>WARNING</param-value>

  </init-param>

  <init-param>

  <param-name>compiler</param-name>

  <param-value>jikes</param-value>

  </init-param>

  <load-on-startup>3</load-on-startup>

  </servlet>

  当然,给出的编译器必须已经安装在你的系统中,并且CLASSPATH可能需要设置,那处决于你选择的是何种编译器。

  10.限制特定主机访问(Restricting Access to Specific Hosts)

  有时,可能想限制对Tomcat web应用的访问,比如,希望只有指定的主机或IP地址可以访问应用。这样一来,就只有那些指定的的客户端可以访问服务的内容了。为了实现这种效 果,Tomcat提供了两个参数供你配置:RemoteHostValve 和RemoteAddrValve。

  通过配置这两个参数,可以让你过滤来自请求的主机或IP地址,并允许或拒绝哪些主机/IP。与之类似的,在Apache的httpd文件里有对每个目录的允许/拒绝指定。

  可以把Admin Web application设置成只允许本地访问,设置如下:

  <Context path=“/path/to/secret_files” …>

  <Valve className=“org.apache.catalina.valves.RemoteAddrValve”

  allow=“127.0.0.1” deny=“”/>

  </Context>

  如果没有给出允许主机的指定,那么与拒绝主机匹配的主机就会被拒绝,除此之外的都是允许的。与之类似,如果没有给出拒绝主机的指定,那么与允许主机匹配的主机就会被允许,除此之外的都是拒绝的。
 楼主| 发表于 2010-2-19 20:48:50 | 显示全部楼层
 楼主| 发表于 2010-2-19 20:55:29 | 显示全部楼层
Win2003完美配置Apache+IIS+Tomcat多站点
2006年08月29日 作者:lwz7512 责任编辑:xietaoming

文章导读:作者本来以为上一次的配置就搞定,结果本地测试好好的,到了服务器上调试就完蛋了。终于在第三次尝试后搞定了。作者将心得写下来与读者分享。



  本来以为上一次的配置就搞定了,结果本地测试好好的,到了服务器上调试就完蛋了,本地只测试了一个asp站和一个jsp站,而实际情况是多个asp站和jsp站,又试了两次还是不行,终于在第三次尝试后搞定了,写下来做个纪念。

  第一次尝试使用:

<VirtualHost *:80>
ServerAdmin feifei0658@sina.com
ServerName www.5hope.com
DcumentRoot "G:\5hope
DirectoryIndex index.html index.htm index.asp
ProxyPass / http://www.5hope.com:88/
ProxyPassReverse / www.5hope.com:88/
</VirtualHost>

<VirtualHost *:80>
ServerAdmin feifei0658@sina.com
ServerName www.shundabanjia.com
DocumentRoot "G:\wuyubing\www"
DirectoryIndex index.html index.htm index.asp
ProxyPass / http://www.shundabanjia.com:88/
ProxyPassReverse / http://www.shundabanjia.com:88/
</VirtualHost>

  本以为这样设置多站点就搞定了,结果发现只识别第一个站点,访问别的站点都是这个站的内容,折腾了一上午,没成功。

  第二次尝试使用:

<VirtualHost *:80>
#添加了这个属性**********
ProxyPreserveHost On
ServerAdmin feifei0658@sina.com
ServerName www.shundabanjia.com
DocumentRoot "G:\wuyubing\www"
DirectoryIndex index.html index.htm index.asp
ProxyPass / http://www.shundabanjia.com:88/
ProxyPassReverse / http://www.shundabanjia.com:88/
</VirtualHost>

LoadModule jk_module modules/mod_jk.so
JkWorkersFile "D:\tomcat5.0.28\conf\workers.properties"
<VirtualHost *:80>
ServerAdmin feifei0658@sina.com
ServerName www.openria.cn
DirectoryIndex index.html index.htm index.jsp
JkMount /* ajp13
JkAutoAlias "D:\tomcat-5.0.28\webapps\ria"
<Directory "D:\tomcat-5.0.28\webapps\ria">
Options Indexes FollowSymLinks
allow from all
</Directory>
</VirtualHost>

  这回经过查官方资料,发现了一个属性,叫ProxyPreserveHost On,试了一下,是可以用实现多个虚拟的asp站点了,但是和我的tomcat站点定义冲突,访问不了jsp站,又不行,只好再找。

  第三次尝试使用:

NameVirtualHost *:80

<VirtualHost *:80>
ProxyPreserveHost On
ServerAdmin feifei0658@sina.com
ServerName www.shundabanjia.com
DocumentRoot "G:\wuyubing\www"
DirectoryIndex index.html index.htm index.asp
ProxyPass / http://www.shundabanjia.com:88/
ProxyPassReverse / http://www.shundabanjia.com:88/
</VirtualHost>

LoadModule jk_module modules/mod_jk.so
JkWorkersFile "D:\tomcat5.0.28\conf\workers.properties"
<VirtualHost *:80>
ServerAdmin feifei0658@sina.com
ServerName www.openria.cn
DirectoryIndex index.html index.htm index.jsp
JkMount /* ajp13
JkAutoAlias "D:\tomcat-5.0.28\webapps\ria"
<Directory "D:\tomcat-5.0.28\webapps\ria">
Options Indexes FollowSymLinks
allow from all
</Directory>
</VirtualHost>

  经过反复看文档,这回终于搞定了,原来是没有吧"Use name-based virtual hosting."打开,去掉NameVirtualHost *:80前面的#号就可以了,真是晕啊。

  总算成功了,看来有问题还需要看官方资料,网友的资料还是不完整啊,通过自己的努力,发现新的线索:

ProxyPreserveHost On
NameVirtualHost *:80
 楼主| 发表于 2010-2-19 20:59:46 | 显示全部楼层
Tomcat是一款开源的Web服务器系统,用其搭建的Web站点系统开销小、扩展性好,并且支持负载平衡与邮件服务等,因此颇受站长们的欢迎。值得一提的是Tomcat在Linux系统平台上优势明显,不少用户利用它搭建Web站点。最近,关于Tomcat的入侵非常火,有不少Web站点甚至服务器沦陷。让人不安的是,实施Tomcat入侵技术门槛比较低,因此危害极大。下面笔者揭秘入侵过程,以便站长知己知彼,采取相应的措施,加固站点安全。
  一、Tomcat入侵揭秘
  1、扫描
  和几乎所有的入侵一样,攻击者对Tomcat的入侵也是从扫描开始的。现在网络上针对Tomcat的扫描工具如雨后春笋般冒出来,一般的用户极易获得。并且其中的有些工具可以进行关键词搜索扫描,攻击者输入相应关键词就可以实施对某类Tomcat站点进行扫描入侵。
  扫描的原理非常简单,因为Tomcat默认是通过8080端口对外提供Web服务的。这些工具就直接扫描网络中开启了8080端口的主机,并且其可以过滤开放8080端口的Web防火墙,缩小攻击范围。利用扫描工具攻击者不但能够获得开启了8080端口的Tomcat服务器的IP地址,还可以扫描自动猜解弱口令。(图1)
  
  2、后台
  有了上面扫描获得的IP和弱口令后,攻击者就可以通过默认的admin用户登录后台。Tomcat的默认后台是http://服务器IP:8080/manager/html,在浏览器地址栏中输入该URL地址,弹出登录对话框,输入默认用户名admin和弱口令即可登录后台。(图2)
  
  在Tomcat的后台可以看到站点的所有目录和文件,并且提供“Start”、“Stop”、“Reload”、“Undeploy”功能对目录实施“开启”、“停止”、“重启”、“卸除”等操作。当然对于攻击者来说,Tomcat后台中提供的上传功能可能是他们最为感兴趣的。在此可是上传WAR文件,WAR文件是用于发布的、打包后的web应用程序,上传到Web站点后可以被执行。攻击者可以把一个jsp网马打包生成一个WAR文件,上传后就可以运行该网马。(图3)
  
  3、Webshell
  通过后台上传用WAR打包的网马后,就在Tomcat站点下生成与上传文件同名的目录。点击该目录,就可以看见jsp网马,在浏览器中输入该网马的URL地址,就获得了一个Webshell。不过通常情况下,攻击者把网马改名为index.jsp,这样点击目录就可以直接运行网马。
  在tomcat中获得的Webshell的权限还是非常大的。可以浏览、修改站点中的所有文件,当然还可以创建文件。如果是Windows系统的话可以浏览个磁盘分区分区,执行系统命令。比如创建管理员帐户,上传并运行木马等等。如果是linux系统的话,可以进入各个系统目录,执行linux命令。比如我们可以通过ls -l列出当前目录中的所有文件见图4,查看并修改系统敏感文件/etc/passwd见图5。可以想象我们把passwd中的root:x:0:0:root:/root:/bin/bash中的x删除,那root用户就是空密码了。(图4)(图5)
  
  
  4、提权渗透
  通过Webshell攻击者就可以对系统进行提权、渗透获得整个服务器的控制权。这一部分内容,笔者仅仅点到为止,就不进一步地揭秘了。
二、安全防范
  1、设置强密码
  从上面的入侵测试过程可以看到,后台密码是个关键,因此首先要设置健壮的后台密码。在Tomcat中用户和密码保存在conf/tomcat-users.xml文件中。下面是一个标准的tomcat-users.xml文件:
  从该文件看有5个用户可以进入后台,其中manager和admin的权限最大,roles后面的manager表示其是管理员权限。
  防止默认用户admin和弱口令攻击,可以从两方面入手。
  (1)修改用户名及密码
  我们把tomcat-users.xml文件倒数第二行中的改为,即把登录用户改为lw,登录密码改为gslw。最后重新登录后台测试,用默认的用户名和密码admin登录失败见图6,而用新用户名和密码登录成功。(图6)
  
  (2).修改权限
  我们把tomcat-users.xml文件倒数第二行中的改为,去掉了admin后面的manager,即取消了管理员权限。然后重启tomcat(必须要重启,因为Tomcat重启时会加载配置文件,这样刚才的修改才会生效。)和图6一样登录失败。
  2、隐藏后台路径
  更改Tomcat管理后台路径,不为攻击者所猜到。当然,如果觉得后台用不着,也可以屏蔽后台。屏蔽后台就是把conf/Catalina/localhost/admin.xml文件改名,这样就是攻击者扫描到后台甚至猜到弱口令,也无法登录后台,也就无法上传网马,获得Webshell实施对服务器的渗透攻击。要说的是,要使上面的修改生效必须要重启Tomcat。(图7)
  
  3、清除Webshell
  如果Tomcat已经被人植入了Webshell,可以在站点中查找可疑文件。当然最方便的是进入后台,查看有没有可疑的目录,然后点击“stop”或者“Undeploy”将该目录停掉。最彻底的是找到源文件直接删除掉,与webshell的文件一般包括三部分:一个WAM文件,与WAM同名的文件夹,最核心的是该文件夹下的网马,要把它们一并删除。(图8)
  
  总结:本文叙述了攻击者从扫描到获得Tomcat站点的webshell的过程,希望有助大家了解黑客的攻击过程,知己知彼,采取相应的措施。另外,本文也提供了应对该类攻击的方法,但愿对大家有所帮助。
 楼主| 发表于 2010-2-19 21:02:50 | 显示全部楼层
 楼主| 发表于 2010-2-19 21:09:58 | 显示全部楼层
 楼主| 发表于 2010-2-19 21:11:23 | 显示全部楼层
Tomcat/Weblogic/Websphere 我们选择哪一个
Tomcat/Weblogic/Websphere 我们选择哪一个

一套Weblogic或者Websphere动辄十几万,出于节省投资的角度考虑,我们能不能推荐客户使用Tomcat或者Jboss等其它免费的应用服务器呢,本文就此问题做一讨论。

一、不选择Tomcat的理由

1.Tomcat没有EJB container,如果有分布式的要求会比较难办;

2.从保险性来说,万一应用服务器本身有什么漏洞,你没办法向Apache索赔;

3.开源软件项目,没有任何商业服务,遇到问题没有技术支持。


二、选择Tomcat的理由

1、免费使用,这是最大的诱惑

2、实现J2EE规范最好的应用服务器

Tomcat是jakarta项目中的一个重要的子项目,其被JAVAWorld杂志的编辑选为2001年度最具创新的JAVA产品(Most Innovative JAVA Product),同时它又是sun公司官方推荐的servlet和jsp容器(具体可以见http://JAVA.sun.com/products/jsp/tomcat/)。

由于遵从J2EE规范,所以从Tomcat向其他平台转移时,工作量是非常小的。例如将Tomcat 下的东西移到Weblogic, 基本上只是copy。

3、我的项目不需要EJB

对于国内的很多中小型JAVA项目,根本用不到EJB技术。大多数应用是把传统的MIS转换到B/S模式上来,由两层结构到三层结构,Datasource+Jsp+Serverlet完全可以满足开发需要。界面用Jsp实现,业务逻辑用JAVABean完成,既然用不到EJB,Tomcat也就可以满足需求了。

4、Tomcat的性能

对于性能的怀疑可能是很多人不选择免费应用服务器的理由。事实胜于雄辩,看看下面的一些案例吧:

sms.qianlong.com linux+tomcat+Apache

中国同学录 www.5460.net:Tomcat 4.1.18 上千万注册用户,每天的访问量达到400万人次以上

www.west100.com每天访问量超过500万

注:用netcraft可以查看目标网站所采用的应用服务器,方法是 http://uptime.netcraft.com/up/graph/?host=www.icbc.com.cn,把host参数改称目标地址就可以了。

再看一下来自网上的测评(摘自CSDN网友评论 http://search.csdn.net/Expert/to ... 4.xml?temp=.7720301)

------------------------------------------
作  者: liuxiaowei (巍巍) 

我们的情况(单机,没有负载均衡):
操作系统: RedHat Advanced Server 2.1
服务器配置: dell 6650: 8 至强CPU, 3G RAM, 300G HD
访问量: 80万+
TOMCAT 4.1.24
JDK 1.4.1_02
JDK 启动参数 -Xmx1024m
无响应时top显示JAVA占用内存为800M左右(实际占用要大一些),访问量>80万(实际情况,不是模拟访问),操作系统正常

第一: 并发访问量大概在1000左右。(这是实际跑出来的数据,不是模拟测试!)
第二: 这台机器只有Tomcat

------------------------------------------
回复人: zeeler(鸭子)

如果不想买商业应用程序服务器,建议你可以试试使用Tomcat做负载均衡,即多个tomcat来共同分担并发访问量

------------------------------------------
回复人: liangxuan1979(不贪)

我們這邊的情況和樓主有很多類似的地方.
Server也是6650,軟件配置也是一模一樣.
只是我們的訪問量小些,同時在線的人數大概也在200-600人左右.

------------------------------------------
回复人: caliban1979(甲虫)

谁说tomcat不行啊!
我们做的www.west100.com每天访问量超过500万(用webalizer统计出来的!)
我的配置是
Linux操作系统,数据库mysql
前置squid缓存,后面起tomcat服务,可以跑3、4个月不当机
事实证明一切
我不想说什么了!

------------------------------------------


三、总结

看似不选择Tomcat的理由很是充分,关键因素在于商业软件有技术服务保障,可是:

1.不管你用Weblogic或者Tomcat,出现问题客户只会来找你们公司而不去找BEA/IBM他们.

2.不管是你程序的问题还是Weblogic或者Tomcat系统平台的问题,处理问题的一般还是你们程序员,修改程序的BUG或者修改程序适应Weblogic或者Tomcat的BUG.

3.BEA/IBM的上门技术服务费用往往要高于你购买系统平台的费用甚至你整个软件系统的利润.没有几K的RMB BEA/IBM的技术人员是不会出门的.


如果看了以上文字你还不能确认你的项目该选择那种产品的话,这句话对你可能会有帮助:用最适当的方法解决问题就是最好的。
本文发表于ossoft.org 转载请注明出处。

以下是 Tomcat/Weblogic/Websphere 我们选择哪一个 相关回复jboss+tomcat就可以了,很好用的:)如果系统没有长远的考虑,那应该不用考虑得这么复杂。

几个例子中如果硬件成本比软件成本高许多,那不如使用weblogic/Websphere。其中的道理太简单了,为什么电信/银行/移动之类的公司
使用Oracle/DB2数据库,而不选用mysql。

单靠tomcat是无法支持那么多的并发量。有钱的话还是选择商业产品有时候也要看需求而定,TOMCAT是不错,但是WebSphere和WebLogic存在也有它的原因的,我们公司就用的是WebSphere和DB2。就看你的需要了,要是小应用,没有设计ejb的话我建议用tomcat,大的应用要看服务器了,有些服务器用websphere比较好,比如IBM的服务器各有千秋,每一样产品既然他存在,就说明他有生命力,有发展的前途------哲学理论
哈哈!
顶!
具体用哪个还必须考虑到你所处的环境中!
 楼主| 发表于 2010-2-19 21:11:54 | 显示全部楼层
目前在做性能方便的比较。在1000人公司中tomcat足够应付。

我们之前使用的tomcat,现在往websphere中迁移,在初步的压力测试之后(100人的负载,测试脚本较简单),发现websphere比tomcat慢,websphere的平均响应时间是tomcat的2倍,有时候甚至更差。

现在苦恼的是主要差在那一块了?如何找出?再进一步如何调整。

websphere毕竟是高端打款,所以希望他的性能比较好,最起码不能差于tomcat,或者比tomcat稍慢个10%左右也行,现在差异太大,希望大家能讨论一下,问题可能出在哪里?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|boway Inc. ( 冀ICP备10011147号 )

GMT+8, 2024-5-6 04:06 , Processed in 0.114944 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表