1、配置系统管理(AdminWebApplication)大多数商业J2EE服务器都提供了强大的管理界面,并且大多使用通俗易懂的Web应用界面。Tomcat以它自己的方式,也提供了成熟的管理工具,并不逊色于那些商业竞争者。Tomcat的AdminWebApplication最早出现在4.1版本,当时的功能包括管理上下文、数据源、用户和组等,当然也可以管理初始化参数、用户、组、角色等各种数据库管理.在后续的版本中,这些功能会得到极大的扩充,但是现有的功能已经非常有用了。AdminWebApplication在自动部署文件中定义:CATALINA_BASE/webapps/admin.xml。(译者注:CATALINA_BASE是tomcat安装目录下的server目录)必须编辑这个文件,保证Context中的docBase参数是绝对路径。也就是说CATALINA_BASE/webapps/admin.xml这个路径是一个绝对路径。作为另一种选择,您也可以删除这个自动部署文件,并在server.xml文件中创建一个AdminWebApplicationcontext,效果是一样的。您无法管理AdminWebApplication应用程序,换句话说,您可能无法执行任何操作,只能删除CATALINA_BASE/webapps/admin.xml。如果您使用UserDatabaseRealm(默认设置),则需要将用户和角色添加到CATALINA_BASE/conf/tomcat-users.xml文件。你编辑这个文件,在文件中添加一个名为“admin”的角色,如下:还需要有一个用户,这个用户的角色是“admin”。添加现有用户(更改密码以使其更安全):完成这些步骤后,请重新启动Tomcat,访问http://localhost:8080/admin,您将看到登录屏幕。AdminWebApplication采用基于容器管理的安全机制,采用JakartaStruts框架。一旦您以具有“admin”角色的用户身份登录到管理界面,您将能够使用该管理界面配置Tomcat。二、配置应用程序管理(ManagerWebApplication)ManagerWebApplication允许您通过比AdminWebApplication更简单的用户界面来执行一些简单的Web应用程序任务。ManagerWebApplication定义在一个自动部署文件中:CATALINA_BASE/webapps/manager.xml必须编辑这个文件,保证context的docBase参数是绝对路径,即CATALINA_HOME/server/webapps/manager的绝对路径.(译者注:CATALINA_HOME是tomcat的安装目录)如果你使用的是UserDatabaseRealm,那么你需要在CATALINA_BASE/conf/tomcat-users.xml文件中添加角色和用户。接下来,编辑文件并向文件添加一个名为“manager”的角色:还需要有一个角色为“manager”的用户。和现有用户一样,添加一个新用户(修改密码更安全):然后重启Tomcat,访问http://localhost/manager/list,你会看到一个非常简单的基于文本的管理界面,或者访问http://localhost/manager/html/list,你会看到一个HMTL管理界面。无论哪种方式,您的ManagerWeb应用程序现在都已启动。Manager应用程序允许您在没有系统管理权限的情况下安装新的Web应用程序进行测试。如果我们在/home/user/hello下有一个新的Web应用程序并想将其安装在/hello下,为了测试该应用程序,我们可以通过在第一个文件框中键入“/hello”(作为路径访问时),在第二个文本框中输入“file:/home/user/hello”(作为配置URL)。Manager应用程序还允许您停止、重新启动、删除和重新部署Web应用程序。停止应用程序会使其无法访问。当用户尝试访问已停止的应用程序时,他们会看到503错误??“503-此应用程序当前不可用”。删除一个web应用简单的说就是从Tomcat的运行副本中删除该应用,如果重启Tomcat,被删除的应用会重新出现(即删除并不意味着从硬盘中删除)。3.部署一个web应用程序在系统中部署web服务有两种方式。将您的WAR文件或您的Web应用程序文件夹(包括Web的所有内容)复制到$CATALINA_BASE/webapps目录。创建一个仅包含Web服务上下文内容的XML片段文件,并将此文件放在$CATALINA_BASE/webapps目录中。Web应用程序本身可以存储在硬盘驱动器上的任何位置。如果你有一个WAR文件,如果你想部署它,只需要简单地将文件复制到CATALINA_BASE/webapps目录下,文件必须有“.war”作为扩展名。一旦Tomcat侦听此文件,它将(默认情况下)将文件解压缩为子目录,并使用WAR文件的文件名作为子目录的名称。接下来,Tomcat将在内存中创建一个上下文,就像您在server.xml文件中创建它一样。当然,其他需要的内容会从server.xml中的DefaultContext获取。另一种部署Web应用程序的方法是编写一个ContextXML片段文件并将该文件复制到CATALINA_BASE/webapps目录。一个上下文片段并不是一个完整的XML文件,而只是一个上下文元素,以及相应的应用描述。这个片段文件就像从server.xml中切出的上下文元素,所以这个片段被命名为“上下文片段”。例如,如果我们要部署一个名为MyWebApp.war的应用程序,它使用realm作为访问控制方法,我们可以使用以下代码段:将代码段命名为“MyWebApp.xml”并将其复制到CATALINA_BASE/webapps目录下。此上下文片段提供了一种部署Web应用程序的便捷方式。除非您想更改默认部署行为,否则您不需要编辑server.xml。安装新的Web应用程序时不需要重新启动Tomcat。四、配置虚拟主机(VirtualHosts)关于server.xml中的“Host”元素,只需要在设置虚拟主机时修改即可。虚拟主机是一种在一台Web服务器上提供多个域名的机制,因此每个域名似乎都拥有整个主机。事实上,大多数小型企业网站都是使用虚拟主机实现的,主要是因为虚拟主机可以直接连接到互联网,并提供相应的带宽,以保证合理的访问响应速度。此外,虚拟主机还可以提供稳定的固定IP。通过在域名服务器(DNS)上创建IP地址的别名,并告诉Web服务器将对不同域名的请求分发到相应的Web目录,可以在任何Web服务器上建立基于名称的虚拟主机。因为这篇文章主要是关于Tomcat,所以我们不打算介绍如何在各种操作系统上设置DNS。如果您需要这方面的帮助,请参考PaulAlbitz和CricketLiu(O'Reilly)合着的《DNS and Bind》一书。为了演示,我将使用静态主机文件,因为这是测试别名的最简单方法。要在Tomcat中使用虚拟主机,您需要设置DNS或主机数据。为了测试,为本地IP设置一个IP别名就足够了。接下来需要在server.xml中添加几行,如下:Tomcat的server.xml文件,在初始状态下,只包含一个虚拟主机,但是很容易扩展到支持多个虚拟主机。前面的例子展示的是一个简单的server.xml版本,其中粗体部分用于添加虚拟主机。每个Host元素必须包含一个或多个上下文元素,其中包含的上下文元素之一必须是默认上下文,并且此默认上下文的显示路径应为空(例如path="")。5.配置基本认证(BasicAuthentication)容器管理的认证方式控制用户在访问受保护的web应用资源时如何进行认证。当Web应用程序使用BasicAuthentication(BASIC参数在web.xml文件中的auto-method元素中设置),用户访问受保护的Web应用程序时,Tomcat会通过HTTPBasicAuthentication弹出对话框,请求用户输入用户名和密码。在这种身份验证方法中,所有密码都以64位编码在网络上传输。注意:使用基本身份验证被认为是不安全的,因为它没有强加密,除非在客户端和服务器上都使用HTTPS或其他密码加密(例如,在虚拟专用网络中)。如果没有额外的加密方法,网络管理员将能够拦截(或滥用)用户的密码。然而,如果您是Tomcat的新手,或者您想在您的Web应用程序中测试基于容器的安全管理,基本身份验证仍然非常易于设置和使用。只需将和两个元素添加到您的Web应用程序的web.xml文件中,并在CATALINA_BASE/conf/tomcat-users.xml文件中添加适当的和,然后重新启动Tomcat。下面例子中的web.xml取自一个俱乐部会员网站系统,其中只对会员目录进行保护,使用BasicAuthentication进行认证。请注意,此方法将有效地替换ApacheWeb服务器中的.htaccess文件。EntireApplication/members/*memberBASICMyClubMembers-onlyArea6.配置单点登录(SingleSign-On)一旦你设置了域和验证方法,你需要执行实际的用户登录处理。一般来说,用户登录系统是很麻烦的,必须尽量减少用户登录验证的次数。默认情况下,每个Web应用程序都要求用户在用户首次请求受保护资源时登录。如果您正在运行多个Web应用程序并且每个应用程序都需要单独的用户身份验证,那么您可能看起来有点像在与用户较量。用户不知道如何将多个独立的应用程序集成到一个系统中,因此他们不知道他们需要访问多少个不同的应用程序,他们只是感到困惑,为什么他们一直登录。“单点登录”功能Tomcat4允许用户在访问同一虚拟主机下的所有Web应用时只登录一次。要使用该功能,只需要在Host上添加一个SingleSignOnValve元素即可,如下图:Tomcat初始安装后,server.xml注释中包含一个SingleSignOnValve配置示例,只需要去掉评论,你可以使用。那么,任何一个用户只要登录了一个应用,对同一个虚拟主机下的所有应用也是有效的。使用单点登录阀有一些重要的限制:该值必须配置并嵌套在同一个Host元素中,所有需要进行单点认证的Web应用程序(必须通过context元素定义)都位于这个主机。包含共享用户信息的领域必须设置在同一级别的主机或嵌套之外。不能被上下文中的领域覆盖。使用单点登录的Web应用程序最好使用Tomcat内置的身份验证方法(在web.xml中定义),它比自定义的身份验证方法更强大。Tomcat内置的认证方式有basic、digest、form和client-cert。如果你使用单点登录,并且想在你的网站中集成第三方Web应用程序,而这个新的Web应用程序使用它自己的身份验证方法而不是使用容器管理安全性,那么你基本上别无选择。您的用户每次登录所有旧应用程序时都需要登录,并且当他们请求新的第三方应用程序时必须重新登录。当然,如果你有这个第三方web应用程序的源代码,而且你是程序员,你可以修改它,但恐怕不太容易做到。单点登录需要使用cookie。七、配置用户自定义目录(CustomizedUserDirectories)有些站点允许个人用户在服务器上发布网页。例如,大学中的学院可能希望为每个学生提供一个公共区域,或者ISP可能希望为其客户提供一些网络空间,但这不是网络托管。这种情况典型的做法是在用户名前加一个特殊字符(~),作为每个用户的网址,如:http://www.cs.myuniversity.edu/~usernamehttp://members.mybigisp.com/~usernameTomcat提供了两种方式将这些个人网站映射到宿主机上,主要是利用了一对特殊的Listener元素。Listener的className属性应该是org.apache.catalina.startup.UserConfig,userClass属性应该是几个映射类之一。如果你的系统是Unix,它会有一个标准的/etc/passwd文件,这个文件中的帐户可以通过运行Tomcat轻松读取,这个文件指定了用户的主目录,使用PasswdUserDatabase映射类。Web文件需要放在/home/users/ian/public_html或/users/jbrittain/public_html这样的目录下。当然您也可以将public_html更改为任何其他子目录。事实上,这个用户目录根本不需要位于用户的主目录中。如果您没有密码文件,但想将用户名映射到/home等常用目录的子目录,则可以使用HomesUserDatabase类。通过这种方式,Web文件可以位于/home/ian/public_html或/home/jasonb/public_html之类的目录中。这种形式对Windows更有利,您可以使用像c:\home这样的目录。这些Listener元素,如果出现,一定是在Host元素中,而不是在context元素中,因为它们都是应用到Host本身的。8.在Tomcat中使用CGI脚本Tomcat主要用作Servlet/JSP容器,但它也具有许多传统Web服务器的性能。对通用网关接口(CGI)的支持就是其中之一,CGI提供了一组方法来运行一些扩展以响应浏览器请求。CGI之所以被称为通用,是因为它可以在大多数程序或脚本中调用,包括:Perl、Python、awk、Unixshellscripting等,甚至Java。当然,您可能不会将Java应用程序作为CGI运行,毕竟它太原始了。一般来说,开发Servlets总是比CGI更有效率,因为当用户点击链接或按钮时,你不需要从操作系统层开始处理。Tomcat包括一个可选的CGIServlet,它允许您运行遗留的CGI脚本。为了使Tomcat能够运行CGI,您必须执行以下操作:将servlets-cgi.renametojar(在CATALINA_HOME/server/lib/目录中)重命名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下。在Tomcat的CATALINA_BASE/conf/web.xml文件中,取消注释关于CGI的部分(默认情况下,该部分位于第241行)。同样,在Tomcat的CATALINA_BASE/conf/web.xml文件中,去掉映射CGI部分的注释(默认情况下,该部分位于第299行)。请注意,此部分指定如何访问CGI脚本的HTML链接。可以把CGI脚本放在WEB-INF/cgi目录下(注意WEB-INF是一个安全的地方,你可以把一些你不想被用户看到或者不想暴露的文件放在这里securityconsiderations),或者你也可以将CGI脚本放在context下的其他目录下,为CGIServlet调整cgiPathPrefix初始化参数。这指定了CGIServlet的实际位置,并且不能与上一步中指定的URL相同。重新启动Tomcat,您的CGI应该可以运行了。在Tomcat中,CGI程序默认放在WEB-INF/cgi目录下。如前所述,WEB-INF目录是受保护的,无法通过客户端浏览器窥视其中的内容。这是包含其他敏感信息的CGI脚本的好地方。为了与其他服务器兼容,虽然您也可以将CGI脚本存放在传统的/cgi-bin目录中,但请注意这些目录中的文件可能会被Internet上好奇的冲浪者查看。此外,在Unix中,确保运行Tomcat的用户具有执行CGI脚本的权限。九。更改Tomcat中的JSP编译器(JSPCompiler)在Tomcat4.1(或更高版本,可能)中,JSP编译由Tomcat中包含的Ant程序控制器直接执行。这听起来可能有点奇怪,但这是Ant设计目的的一部分。有一个API文档可以指导开发人员在不启动新JVM的情况下使用Ant。这是使用Ant进行Java开发的一大优势。此外,这也意味着您现在可以在Ant中使用任何支持javac的编译方法,这里是ApacheAnt手册上的javac页面列表。使用起来很简单,因为你只需要在元素中定义一个名字叫“compiler”,值中有一个支持编译的编译器名字,例子如下:jsporg.apache.jasper.servlet.JspServletlogVerbosityLevelWARNINGcompilerjikes3当然,鉴于你的系统中必须已经安装了编译器,并且可能需要设置CLASSPATH,这取决于你选择的编译器。十。限制对特定主机的访问(RestrictingAccesstoSpecificHosts)有时,您可能希望限制对TomcatWeb应用程序的访问。例如,您希望只有您指定的主机或IP地址才能访问您的应用程序。这样,只有那些指定的客户端才能访问服务的内容。为了实现这种效果,Tomcat提供了两个参数供你配置:RemoteHostValve和RemoteAddrValve。通过配置这两个参数,它允许您从请求中过滤主机或IP地址,并允许或拒绝哪些主机/IP。同样,Apache的httpd文件中的每个目录都有允许/拒绝规范。例如,您可以将AdminWeb应用程序设置为只允许本地访问,设置如下:如果没有指定允许的主机,那么匹配被拒绝主机的主机将被拒绝,而其他一切都被允许。同样,如果未指定拒绝主机,则允许匹配允许主机的主机,并拒绝其他所有主机。
