??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品三区在线,亚洲福利影视,中文字幕一区二区三三http://www.aygfsteel.com/tomjamescn/category/40563.htmlstudy java Platform....J2SE J2MM J2EE...zh-cnWed, 01 Jul 2009 08:49:47 GMTWed, 01 Jul 2009 08:49:47 GMT60Tomcat的配|技巧精华详?/title><link>http://www.aygfsteel.com/tomjamescn/archive/2009/06/30/284853.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Tue, 30 Jun 2009 15:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/tomjamescn/archive/2009/06/30/284853.html</guid><wfw:comment>http://www.aygfsteel.com/tomjamescn/comments/284853.html</wfw:comment><comments>http://www.aygfsteel.com/tomjamescn/archive/2009/06/30/284853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/tomjamescn/comments/commentRss/284853.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/tomjamescn/services/trackbacks/284853.html</trackback:ping><description><![CDATA[<p><strong>一、配|系l管理(Admin Web ApplicationQ?/strong></p> <p>大多数商业化的J2EE服务器都提供一个功能强大的理界面Q且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成? 的管理工Pq且丝毫不逊于那些商业化的竞争Ҏ。Tomcat的Admin Web Application最初在4.1版本时出玎ͼ当时的功能包括管理context、data source、user和group{。当然也可以理像初始化参数Quser、group、role的多U数据库理{。在后箋的版本中Q这些功能将? 到很大的扩展Q但现有的功能已l非常实用了。Admin Web Application被定义在自动部v文gQCATALINA_BASE/webapps/admin.xml 。(译者注QCATALINA_BASE即tomcat安装目录下的server目录Q?/p> <p>你必ȝ辑这个文Ӟ以确定Context中的docBase参数是绝对\径。也是说CATALINA_BASE/webapps /admin.xml的\径是l对路径。作为另外一U选择Q你也可以删除这个自动部|文Ӟ而在server.xml文g中徏立一个Admin Web Application的contextQ效果是一L。你不能理Admin Web Applicationq个应用Q换而言之,除了删除CATALINA_BASE/webapps/admin.xml Q你可能什么都做不了?/p> <p>如果你用UserDatabaseRealmQ默认)Q你需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml文g中。你~辑q个文gQ添加一个名?#8220;admin”的role 到该文g中,如下Q?/p> <p>Qrole name="admin"/Q?/p> <p>你同样需要有一个用Pq且q个用户的角色是“admin”。象存在的用户那Pd一个用P改变密码使其更加安全Q:</p> <table bordercolordark="#ffffff" bordercolorlight="#999999" align="center" border="1" cellpadding="2" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#e6e6e6"> <pre>Quser name="admin"<br /> <br /> <br /> <br /> password="deep_dark_secret"<br /> <br /> <br /> <br /> roles="admin"/Q?br /> <br /> </pre> </td> </tr> </tbody> </table> <p>当你完成q些步骤后,请重新启动TomcatQ访问http://localhost:8080/adminQ你看C个登录界面。Admin Web Application采用Z容器理的安全机Ӟq用了Jakarta Struts框架。一旦你作ؓ“admin”角色的用L录管理界面,你将能够使用q个理界面配置Tomcat?/p> <p><strong>二、配|应用管理(Manager Web ApplicationQ?/strong></p> <p>Manager Web Application让你通过一个比Admin Web Application更ؓ单的用户界面Q执行一些简单的Web应用d。Manager Web Application被被定义在一个自动部|文件中Q?/p> <p>CATALINA_BASE/webapps/manager.xml</p> <p>你必ȝ辑这个文Ӟ以确保context的docBase参数是绝对\径,也就是说CATALINA_HOME/server/webapps/manager的绝对\径。(译者注QCATALINA_HOME即tomcat安装目录Q?/p> <p>如果你用的是UserDatabaseRealmQ那么你需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文g中。接下来Q编辑这个文Ӟd一个名?#8220;manager”的角色到该文件中Q?/p> <p>Qrole name=”manager”Q?/p> <p>你同样需要有一个角色ؓ“manager”的用戗像已经存在的用户那Pd一个新用户Q改变密码其更加安全)Q?/p> <table bordercolordark="#ffffff" bordercolorlight="#999999" align="center" border="1" cellpadding="2" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#e6e6e6"> <pre>Quser name="manager"<br /> <br /> <br /> <br /> password="deep_dark_secret"<br /> <br /> <br /> <br /> roles="manager"/Q?br /> <br /> </pre> </td> </tr> </tbody> </table> <p>然后重新启动TomcatQ访问http://localhost/manager/listQ将看到一个很朴素的文本型理界面Q或者访? http: //localhost/manager/html/listQ将看到一个HMTL的管理界面。不是哪种方式都说明你的Manager Web Application现在已经启动了?/p> <p>Manager application让你可以在没有系l管理特权的基础上,安装新的Web应用Q以用于试。如果我们有一个新的web应用位于/home/user /hello下在Qƈ且想把它安装?hello下,Z试q个应用Q我们可以这么做Q在W一个文件框中输?#8220;/hello”Q作问时? pathQ,在第二个文本框中输入“file:/home/user/hello”Q作为Config URLQ?/p> <p>Manager applicationq允怽停止、重新启动、移除以及重新部|一个web应用。停止一个应用其无法被讉KQ当有用户尝试访问这个被停止的应用时Q将 看到一?03的错??“503 - This application is not currently available”?/p> <p>U除一个web应用Q只是指从Tomcat的运行拷贝中删除了该应用Q如果你重新启动TomcatQ被删除的应用将再次出现Q也是_U除q不是指从硬盘上删除Q?/p> <p><strong>三、部|一个web应用</strong></p> <p>有两个办法可以在pȝ中部|web服务?/p> <p>1.拯你的WAR文g或者你的web应用文g夹(包括该web的所有内容)?CATALINA_BASE/webapps目录下?/p> <p>2.Z的web服务建立一个只包括context内容的XML片断文gQƈ把该文g攑ֈ$CATALINA_BASE/webapps目录下。这个web应用本n可以存储在硬盘上的Q何地斏V?/p> <p>如果你有一个WAR文gQ你若想部v它,则只需要把该文件简单的拯到CATALINA_BASE/webapps目录下即可,文g必须? “.war” 作ؓ扩展名。一旦Tomcat监听到这个文Ӟ它将Q缺省的Q解开该文件包作ؓ一个子目录Qƈ以WAR文g的文件名作ؓ子目录的名字?/p> <p>接下来,Tomcat在内存中徏立一个contextQ就好象你在server.xml文g里徏立一栗当Ӟ其他必需的内容,从server.xml中的DefaultContext获得?/p> <p>部vweb应用的另一U方式是写一个Context XML片断文gQ然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断q一个完整的XML文gQ而只是一个context元素Q以及对该应用的相应描述?/p> <p>q种片断文g像是从server.xml中切取出来的context元素一P所以这U片断被命名?#8220;context片断”?/p> <p>举个例子Q如果我们想部v一个名叫MyWebApp.war的应用,该应用用realm作ؓ讉K控制方式Q我们可以用下面这个片断:</p> <table bordercolordark="#ffffff" bordercolorlight="#999999" align="center" border="1" cellpadding="2" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#e6e6e6"> <pre>Q?--<br /> <br /> <br /> <br /> Context fragment for deploying MyWebApp.war<br /> <br /> <br /> <br /> --Q?br /> <br /> <br /> <br /> QContext path="/demo"<br /> <br /> <br /> <br /> docBase="webapps/MyWebApp.war"<br /> <br /> <br /> <br /> debug="0" privileged="true"Q?br /> <br /> <br /> <br /> QRealm className=<br /> <br /> <br /> <br /> "org.apache.catalina.realm.UserDatabaseRealm”<br /> <br /> <br /> <br /> resourceName="UserDatabase"/Q?br /> <br /> <br /> <br /> Q?ContextQ?br /> <br /> </pre> </td> </tr> </tbody> </table> <p><br /> </p> <p><strong>四、配|虚拟主机(Virtual HostsQ?/strong></p> <p>关于server.xml?#8220;Host”q个元素Q只有在你设|虚拟主机的才需要修攏V虚拟主机是一U在一个web服务器上服务多个域名的机Ӟ? 每个域名而言Q都好象独n了整个主机。实际上Q大多数的小型商务网站都是采用虚拟主机实现的Q这主要是因拟主直接q接到Internetq提供相 应的带宽Q以保障合理的访问响应速度Q另外虚拟主能提供一个稳定的固定IP?/p> <p>Z名字的虚拟主机可以被建立在Q何web服务器上Q徏立的Ҏ是通过在域名服务器QDNSQ上建立IP地址的别名,q且告诉web服务器把d 不同域名的请求分发到相应的网늛录。因文章主要是讲TomcatQ我们不准备介绍在各U操作系l上讄DNS的方法,如果你在q方面需要帮助,? 参考《DNS and Bind》一书,作者是Paul Albitz and Cricket Liu (O'Reilly)。ؓ了示范方便,我将使用一个静态的L文gQ因是测试别名最单的Ҏ?/p> <p>在Tomcat中用虚拟主机,你需要设|DNS或主机数据。ؓ了测试,为本地IP讄一个IP别名p够了Q接下来Q你需要在server.xml中添加几行内容,如下Q?/p> <div align="center"> <div style="border: 1px solid #cccccc; padding: 0px 0px 6px 10px; overflow: auto; margin-left: auto; width: 517px; margin-right: auto; height: 166px;"> <div align="left"> <pre> QServer port="8005"<br /> <br /> <br /> <br /> shutdown="SHUTDOWN" debug="0"Q?br /> <br /> <br /> <br /> QService name="Tomcat-Standalone"Q?br /> <br /> <br /> <br /> QConnector className=<br /> <br /> <br /> <br /> "org.apache.coyote.tomcat4.CoyoteConnector"<br /> <br /> <br /> <br /> port="8080"<br /> <br /> <br /> <br /> minProcessors="5" maxProcessors="75"<br /> <br /> <br /> <br /> enableLookups="true"<br /> <br /> <br /> <br /> redirectPort="8443"/Q?br /> <br /> <br /> <br /> QConnector className=<br /> <br /> <br /> <br /> "org.apache.coyote.tomcat4.CoyoteConnector"<br /> <br /> <br /> <br /> port="8443" minProcessors="5"<br /> <br /> <br /> <br /> maxProcessors="75"<br /> <br /> <br /> <br /> acceptCount="10" debug="0"<br /> <br /> <br /> <br /> scheme="https" secure="true"/Q?br /> <br /> <br /> <br /> QFactory className="org.apache.coyote.<br /> <br /> <br /> <br /> tomcat4.CoyoteServerSocketFactory"<br /> <br /> <br /> <br /> clientAuth="false" protocol="TLS" /Q?br /> <br /> <br /> <br /> Q?ConnectorQ?br /> <br /> <br /> <br /> QEngine name="Standalone"<br /> <br /> <br /> <br /> defaultHost="localhost" debug="0"Q?br /> <br /> <br /> <br /> Q?-- This Host is the default Host --Q?br /> <br /> <br /> <br /> QHost name="localhost"<br /> <br /> <br /> <br /> debug="0" appBase="webapps"<br /> <br /> <br /> <br /> unpackWARs="true" autoDeploy="true"Q?br /> <br /> <br /> <br /> QContext path="" docBase="ROOT" debug="0"/Q?br /> <br /> <br /> <br /> QContext path="/orders"<br /> <br /> <br /> <br /> docBase="/home/ian/orders" debug="0"<br /> <br /> <br /> <br /> reloadable="true" crossContext="true"Q?br /> <br /> <br /> <br /> Q?ContextQ?br /> <br /> <br /> <br /> Q?HostQ?br /> <br /> <br /> <br /> Q?-- This Host is the first<br /> <br /> <br /> <br /> "Virtual Host": http://www.example.com/ --Q?br /> <br /> <br /> <br /> QHost name="www.example.com"<br /> <br /> <br /> <br /> appBase="/home/example/webapp"Q?br /> <br /> <br /> <br /> QContext path="" docBase="."/Q?br /> <br /> <br /> <br /> Q?HostQ?br /> <br /> <br /> <br /> Q?EngineQ?br /> <br /> <br /> <br /> Q?ServiceQ?br /> <br /> <br /> <br /> Q?ServerQ?br /> <br /> </pre> </div> </div> </div> <p>Tomcat的server.xml文gQ在初始状态下Q只包括一个虚拟主机,但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简 单的 server.xml版本Q其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素Q所包含的context? 素中必须有一个是默认的contextQ这个默认的context的显C\径应该ؓI(例如Qpath=””Q?/p> <p><strong>五、配|基验证QBasic AuthenticationQ?/strong></p> <p>容器理验证Ҏ控制着当用戯问受保护的web应用资源Ӟ如何q行用户的n份鉴别。当一个web应用使用了Basic AuthenticationQBASIC参数在web.xml文g中auto-method元素中设|)Q而有用户讉K受保护的web应用 ӞTomcat通过HTTP Basic Authentication方式Q弹Z个对话框Q要求用戯入用户名和密码。在q种验证Ҏ中,所有密码将被以64位的~码方式在网l上传输?/p> <p>注意Q用Basic Authentication通过被认为是不安全的Q因为它没有强健的加密方法,除非在客L和服务器端都使用HTTPS或者其他密码加密码方式Q比如,在一个虚拟私人网l中Q。若没有额外的加密方法,|络理员将能够截获Q或滥用Q用L密码?/p> <p>但是Q如果你是刚开始?TomcatQ或者你惛_你的web应用中测试一下基于容器的安全理QBasic Authenticationq是非常易于讄和用的。只需要添加<security-constraintQ和Qlogin-configQ两个元? C的web应用的web.xml文g中,q且在CATALINA_BASE/conf/tomcat-users.xml文g中添加适当的<roleQ? 和<userQ即可,然后重新启动Tomcat?/p> <p>下面例子中的web.xml摘自一个俱乐部会员|站pȝQ该pȝ中只有member目录被保护v来,q用Basic Authenticationq行w䆾验证。请注意Q这U方式将有效的代替Apache web服务器中?htaccess文g?/p> <div align="center"> <div style="border: 1px solid #cccccc; padding: 0px 0px 6px 10px; overflow: auto; margin-left: auto; width: 517px; margin-right: auto; height: 166px;"> <div align="left"> <pre>Q?--<br /> <br /> <br /> <br /> Define the<br /> <br /> <br /> <br /> Members-only area,<br /> <br /> <br /> <br /> by defining<br /> <br /> <br /> <br /> a "Security Constraint"<br /> <br /> <br /> <br /> on this Application, and<br /> <br /> <br /> <br /> mapping it to the<br /> <br /> <br /> <br /> subdirectory (URL) that we want<br /> <br /> <br /> <br /> to restrict.<br /> <br /> <br /> <br /> --Q?br /> <br /> <br /> <br /> Qsecurity-constraintQ?br /> <br /> <br /> <br /> Qweb-resource-collectionQ?br /> <br /> <br /> <br /> Qweb-resource-nameQ?br /> <br /> <br /> <br /> Entire Application<br /> <br /> <br /> <br /> Q?web-resource-nameQ?br /> <br /> <br /> <br /> Qurl-patternQ?members/*Q?url-patternQ?br /> <br /> <br /> <br /> Q?web-resource-collectionQ?br /> <br /> <br /> <br /> Qauth-constraintQ?br /> <br /> <br /> <br /> Qrole-nameQmemberQ?role-nameQ?br /> <br /> <br /> <br /> Q?auth-constraintQ?br /> <br /> <br /> <br /> Q?security-constraintQ?br /> <br /> <br /> <br /> Q?-- Define the Login<br /> <br /> <br /> <br /> Configuration for<br /> <br /> <br /> <br /> this Application --Q?br /> <br /> <br /> <br /> Qlogin-configQ?br /> <br /> <br /> <br /> Qauth-methodQBASICQ?auth-methodQ?br /> <br /> <br /> <br /> Qrealm-nameQMy Club<br /> <br /> <br /> <br /> Members-only AreaQ?realm-nameQ?br /> <br /> <br /> <br /> Q?login-configQ?br /> <br /> </pre> </div> </div> </div> <p><strong>六、配|单点登录(Single Sign-OnQ?/strong></p> <p>一旦你讄了realm和验证的ҎQ你需要进行实际的用户d处理。一般说来,对用戯言dpȝ是一件很ȝ的事情,你必d量减用L录验证的ơ数。作为缺省的情况Q当用户W一ơ请求受保护的资源时Q每一个web应用都会要求用户d?/p> <p>如果你运行了多个web应用Qƈ且每个应用都需要进行单独的用户验证Q那q看h有点像你在与你的用h斗。用户们不知道怎样才能把多个分ȝ应用整合成一个单独的pȝQ所有他们也׃知道他们需要访问多个不同的应用,只是很迷惑,Z么总要不停的登录?/p> <p>Tomcat 4?#8220;single sign-on”Ҏ允许用户在讉K同一虚拟L下所有web应用Ӟ只需d一ơ。ؓ了用这个功能,你只需要在Host上添加一个SingleSignOn Valve元素卛_Q如下所C:</p> <table bordercolordark="#ffffff" bordercolorlight="#999999" align="center" border="1" cellpadding="2" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#e6e6e6"> <pre>QValve className=<br /> <br /> <br /> <br /> "org.apache.catalina.<br /> <br /> <br /> <br /> authenticator.SingleSignOn"<br /> <br /> <br /> <br /> debug="0"/Q?br /> <br /> </pre> </td> </tr> </tbody> </table> <p>在Tomcat初始安装后,server.xml的注释里面包括SingleSignOn Valve配置的例子,你只需要去掉注释,卛_使用。那么,M用户只要dq一个应用,则对于同一虚拟L下的所有应用同h效。用single sign-on valve有一些重要的限制Q?/p> <p>1.value必须被配|和嵌套在相同的Host元素里,q且所有需要进行单炚w证的web应用Q必通过context元素定义Q都位于该Host下?/p> <p>2.包括׃n用户信息的realm必须被设|在同一UHost中或者嵌套之外?/p> <p>3.不能被context中的realm覆盖?/p> <p>4.使用单点d的web应用最好用一个Tomcat的内|的验证方式Q被定义在web.xml中的Qauth-methodQ中Q,q比自定义的验证方式强,Tomcat内置的的验证方式包括basic、digest、form和client-cert?/p> <p>5.如果你用单点登录,q希望集成一个第三方的web应用C的网站中来,q且q个新的web应用使用它自q验证方式Q而不使用容器理安全Q那你基本上没招了。你的用hơ登录原来所有应用时需要登录一ơ,q且在请求新的第三方应用时还得再d一ơ?/p> <p>当然Q如果你拥有q个W三方web应用的源码,而你又是一个程序员Q你可以修改它,但那恐怕也不容易做?/p> <p>6.单点d需要用cookies?/p> <p><strong>七、配|用户定制目录(Customized User DirectoresQ?/strong></p> <p>一些站点允怸别用户在服务器上发布|页。例如,一所大学的学院可能想l每一位学生一个公共区域,或者是一个ISP希望l一些webI间l他的客P但这又不是虚拟主机。在q种情况下,一个典型的Ҏ是在用户名前面加一个特D字W(~Q,作ؓ每位用户的网站,比如Q?/p> <p>http://www.cs.myuniversity.edu/~username</p> <p>http://members.mybigisp.com/~username</p> <p>Tomcat提供两种Ҏ在主Z映射q些个h|站Q主要用一对特D的Listener元素。Listener的className属性应该是 org.apache.catalina.startup.UserConfigQuserClass属性应该是几个映射cM一?/p> <p>如果你的pȝ是UnixQ它有一个标准的/etc/passwd文gQ该文g中的帐号能够被运行中的Tomcat很容易的dQ该文g指定了用Lȝ录,使用PasswdUserDatabase 映射cR?/p> <table bordercolordark="#ffffff" bordercolorlight="#999999" align="center" border="1" cellpadding="2" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#e6e6e6"> <pre>QListener className=<br /> <br /> <br /> <br /> "org.apache.catalina.startup.UserConfig"<br /> <br /> <br /> <br /> directoryName="public_html"<br /> <br /> <br /> <br /> userClass="org.apache.catalina.<br /> <br /> <br /> <br /> startup.PasswdUserDatabase"/Q?br /> <br /> </pre> </td> </tr> </tbody> </table> <p>web文g需要放|在?home/users/ian/public_html或?users/jbrittain/public_html一L目录下面。当然你也可以改变public_html 到其他Q何子目录下?/p> <p>实际上,q个用户目录Ҏ不一定需要位于用户主目录下里面。如果你没有一个密码文Ӟ但你又想把一个用户名映射到公q?home一L录的子目录里面,则可以用HomesUserDatabasecR?/p> <table bordercolordark="#ffffff" bordercolorlight="#999999" align="center" border="1" cellpadding="2" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#e6e6e6"> <pre> QListener className=<br /> <br /> <br /> <br /> "org.apache.catalina.startup.UserConfig"<br /> <br /> <br /> <br /> directoryName="public_html"<br /> <br /> <br /> <br /> homeBase="/home"<br /> <br /> <br /> <br /> userClass="org.apache.catalina.<br /> <br /> <br /> <br /> startup.HomesUserDatabase"/Q?br /> <br /> </pre> </td> </tr> </tbody> </table> <p>q样一来,web文g可以位于像/home/ian/public_html或?home/jasonb/public_html一L目录下。这UŞ式对Windows而言更加有利Q你可以使用一个像c:homeq样的目录?/p> <p>q些Listener元素Q如果出玎ͼ则必dHost元素里面Q而不能在context元素里面Q因为它们都用应用于Host本n?/p> <p><strong>八、在Tomcat中用CGI脚本</strong></p> <p>Tomcat主要是作为Servlet/JSP容器Q但它也有许多传lweb服务器的性能。支持通用|关接口QCommon Gateway InterfaceQ即CGIQ就是其中之一QCGI提供一l方法在响应览器请求时q行一些扩展程序?/p> <p>CGI之所以被UCؓ通用Q是因ؓ它能在大多数E序或脚本中被调用,包括QPerlQPythonQawkQUnix shell scrīpting{,甚至包括Java?/p> <p>当然Q你大概不会把一个Java应用E序当作CGI来运行,毕竟q样太过原始。一般而言Q开发Servlet总要比CGIh更好的效率,因ؓ当用LM个链接或一个按钮时Q你不需要从操作pȝ层开始进行处理?/p> <p>Tomcat包括一个可选的CGI ServletQ允怽q行遗留下来的CGI脚本?/p> <p>Z使Tomcat能够q行CGIQ你必须做如下几件事Q?/p> <p>1.把servlets-cgi.renametojar Q在CATALINA_HOME/server/lib/目录下)改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下?/p> <p>2.在Tomcat的CATALINA_BASE/conf/web.xml 文g中,把关于<servlet-nameQ?CGI的那D늚注释LQ默认情况下Q该D位于第241行)?/p> <p>3.同样Q在Tomcat的CATALINA_BASE/conf/web.xml文g中,把关于对CGIq行映射的那D늚注释LQ默认情况下Q该D位于第299行)。注意,q段内容指定了HTML链接到CGI脚本的访问方式?/p> <p>4.你可以把CGI脚本攄在WEB-INF/cgi 目录下(注意QWEB-INF是一个安全的地方Q你可以把一些不惌用户看见或基于安全考虑不想暴露的文件放在此处)Q或者你也可以把CGI脚本攄? context下的其他目录下,qؓCGI Servlet调整cgiPathPrefix初始化参数。这指定的CGI Servlet的实际位|,且不能与上一步指定的URL重名?/p> <p>5.重新启动TomcatQ你的CGI可以运行了?/p> <p>在Tomcat中,CGIE序~省攄在WEB-INF/cgi目录下,正如前面所提示的那PWEB-INF目录受保护的Q通过客户端的览器无法窥探到其中内容Q所以对于放|含有密码或其他敏感信息的CGI脚本而言Q这是一个非常好的地斏V?/p> <p>Z兼容其他服务器,管你也可以把CGI脚本保存在传l的/cgi-bin目录Q但要知道,在这些目录中的文件有可能被网上好奇的冲浪者看到。另外,在Unix中,L定运行Tomcat的用h执行CGI脚本的权限?/p> <p><strong>九、改变Tomcat中的JSP~译器(JSP CompilerQ?/strong></p> <p>在Tomcat 4.1Q或更高版本Q大概)QJSP的编译由包含在Tomcat里面的AntE序控制器直接执行。这听v来有一点点奇怪,但这正是Ant有意Z的一部分Q有一个API文指导开发者在没有启动一个新的JVM的情况下Q用Ant?/p> <p>q是使用Antq行Java开发的一大优ѝ另外,q也意味着你现在能够在Ant中用Q何javac支持的编译方式,q里有一个关于Apache Ant使用手册的javac page列表?/p> <p>使用h是容易的Q因Z只需要在Qinit-paramQ?元素中定义一个名字叫“compiler”Qƈ且在value中有一个支持编译的~译器名字,CZ如下Q?/p> <table bordercolordark="#ffffff" bordercolorlight="#999999" align="center" border="1" cellpadding="2" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#e6e6e6"> <pre>QservletQ?br /> <br /> Qservlet-nameQjspQ?servlet-nameQ?br /> <br /> Qservlet-classQ?br /> <br /> org.apache.jasper.servlet.JspServlet<br /> <br /> Q?servlet-classQ?br /> <br /> Qinit-paramQ?br /> <br /> Qparam-nameQlogVerbosityLevelQ?param-nameQ?br /> <br /> Qparam-valueQWARNINGQ?param-valueQ?br /> <br /> Q?init-paramQ?br /> <br /> Qinit-paramQ?br /> <br /> Qparam-nameQcompilerQ?param-nameQ?br /> <br /> Qparam-valueQjikesQ?param-valueQ?br /> <br /> Q?init-paramQ?br /> <br /> Qload-on-startupQ?Q?load-on-startupQ?br /> <br /> Q?servletQ?br /> <br /> </pre> </td> </tr> </tbody> </table> <p>当然Q给出的~译器必dl安装在你的pȝ中,q且CLASSPATH可能需要设|,那处决于你选择的是何种~译器?/p> <p><strong>十、限制特定主问(Restricting Access to Specific HostsQ?/strong></p> <p>有时Q你可能想限制对Tomcat web应用的访问,比如Q你希望只有你指定的L或IP地址可以讉K你的应用。这样一来,只有那些指定的的客L可以讉K服务的内容了。ؓ了实现这U效 果,Tomcat提供了两个参C你配|:RemoteHostValve 和RemoteAddrValve?/p> <p>通过配置q两个参敎ͼ可以让你qo来自h的主机或IP地址Qƈ允许或拒l哪些主?IP。与之类似的Q在Apache的httpd文g里有Ҏ个目录的允许/拒绝指定。例如你可以把Admin Web application讄成只允许本地讉KQ设|如下:</p> <table bordercolordark="#ffffff" bordercolorlight="#999999" align="center" border="1" cellpadding="2" cellspacing="0" width="400"> <tbody> <tr> <td bgcolor="#e6e6e6"> <pre>QContext path=<br /> <br /> <br /> <br /> "/path/to/secret_files" ...Q?br /> <br /> <br /> <br /> QValve className="org.apache.<br /> <br /> <br /> <br /> catalina.valves.RemoteAddrValve"<br /> <br /> <br /> <br /> allow="127.0.0.1" deny=""/Q?br /> <br /> <br /> <br /> Q?ContextQ?br /> <br /> </pre> </td> </tr> </tbody> </table> <p>如果没有l出允许L的指定,那么与拒l主机匹配的L׃被拒l,除此之外的都是允许的。与之类|如果没有l出拒绝L的指定,那么与允怸机匹配的L׃被允许,除此之外的都是拒l的?/p> <img src ="http://www.aygfsteel.com/tomjamescn/aggbug/284853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/tomjamescn/" target="_blank">tomjamescn</a> 2009-06-30 23:46 <a href="http://www.aygfsteel.com/tomjamescn/archive/2009/06/30/284853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcatcd载机?/title><link>http://www.aygfsteel.com/tomjamescn/archive/2009/06/23/283670.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Tue, 23 Jun 2009 01:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/tomjamescn/archive/2009/06/23/283670.html</guid><wfw:comment>http://www.aygfsteel.com/tomjamescn/comments/283670.html</wfw:comment><comments>http://www.aygfsteel.com/tomjamescn/archive/2009/06/23/283670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/tomjamescn/comments/commentRss/283670.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/tomjamescn/services/trackbacks/283670.html</trackback:ping><description><![CDATA[最q做了一个小的网站。本来没有什么值得说的。但是在部v的时候遇到的一些问题值得写下来,所有这些问题都是关于Tomcatcd载机制的?br /> <br /> 转述一文章:<br /> <br /> 对于只用于某一个web应用的类或资源,攑֜q个web应用下的/WEB-INF/classes目录下,如果是JARQ就攑֜q个web应用下的WEB-INF/lib目录下?br /> 对于让所有的web应用׃n的类或资源,攑֜$CATALINA_BASE/shared/classes目录下,如果是JARQ就攑֜$CATALINA_BASE/shared/lib目录下?br /> Tomcat中的cd载策略和JDK中的委托模型略有不同。当Tomcat启动的时候,会创Zl类加蝲器,形成下面的层ơ关p:<br />                 Bootstrap<br />                    |<br />                  System<br />                    |<br />                  Common<br />                  /    \<br />              Catalina  Shared<br />                       /      \<br />                    webapp1  webapp2 ..<br /> <br /> 各个cd载器的作用描q如?<br /> Bootstrap:负责加蝲p拟机提供的基本的q行时类和系l扩展目录($JAVA_HOME/jre/lib/ext)下的JAR?<br /> System:通常q个加蝲器用来加载CLASSPATH环境变量中指定的c,但在Tomcat5的标准启动脚?$CATALINA_HOME/bin/catalina.sh?CATALINA_HOME%/bin/catalina.bat)中改变了它的行ؓQ它只加载下面的c:<br /> $CATALINA_HOME/bin/bootstrap.jar - Contains the main() method that is used to initialize the Tomcat 5 server, and the class loader implementation classes it depends on. <br /> $JAVA_HOME/lib/tools.jar - Contains the "javac" compiler used to convert JSP pages into servlet classes. <br /> $CATALINA_HOME/bin/commons-logging-api.jar - Jakarta commons logging API. <br /> $CATALINA_HOME/bin/commons-daemon.jar - Jakarta commons daemon API. <br /> jmx.jar - The JMX 1.2 implementation.<br /> <br /> CommonQ它负责加蝲对于Tomcat本n和所有的web应用都需要看到的c,通常Q应用的cM应该׃加蝲?CATALINA_HOME/common/classes,$CATALINA_HOME/commons/endorsed?CATALINA_HOME/common/lib下的都由q个加蝲器加载。缺省的Q包括:  <br /> ant.jar - Apache Ant. <br /> commons-collection.jar - Jakarta commons collection. <br /> commons-dbcp.jar - Jakarta commons DBCP, providing a JDBC connection pool to web applications. <br /> commons-el.jar - Jakarta commons el, implementing the expression language used by Jasper. <br /> commons-pool.jar - Jakarta commons pool. <br /> jasper-compiler.jar - The JSP 2.0 compiler. <br /> jasper-runtime.jar - The JSP 2.0 runtime. <br /> jsp-api.jar - The JSP 2.0 API. <br /> naming-common.jar - The JNDI implementation used by Tomcat 5 to represent in-memory naming contexts. <br /> naming-factory.jar - The JNDI implementation used by Tomcat 5 to resolve references to enterprise resources (EJB, connection pools). <br /> naming-resources.jar - The specialized JNDI naming context implementation used to represent the static resources of a web application. <br /> servlet-api.jar - The Servlet and JSP API classes. <br /> xerces.jar - The XML parser that is visible by default to Tomcat internal classes and to web applications.<br /> <br /> <br /> Catalina:用来加蝲实现Tomcat自己需要的cR由他加载的cdweb应用都是不可见的?CATALINA_HOME/server/classes,$CATALINA_HOME/server/lib,都由q个加蝲器加载。缺省的Q包?<br /> catalina.jar - Implementation of the Catalina servlet container portion of Tomcat 5. <br /> jakarta-regexp-X.Y.jar - The binary distribution of the Jakarta Regexp regular expression processing library, used in the implementation of request filters. <br /> servlets-xxxxx.jar - The classes associated with each internal servlet that provides part of Tomcat's functionality. These are separated so that they can be completely removed if the corresponding service is not required, or they can be subject to specialized security manager permissions. <br /> tomcat-coyote.jar - Coyote connector for Tomcat 5. <br /> tomcat-http11.jar - Standalone Java HTTP/1.1 connector. <br /> tomcat-jk2.jar - Classes for the Java portion of the JK 2 web server connector, which allows Tomcat to run behind web servers such as Apache and iPlanet iAS and iWS. <br /> tomcat-util.jar - Utility classes required by some Tomcat connectors.<br /> SharedQ被所有的web应用׃n的类和资源由q个加蝲器加载?CATALINA_BASE/shared/classed,$CATALINA_BASE/shared/libQ都p个加载器加蝲?br /> WebappX:Ҏ个Tomcat里的web应用都创Z个加载器Qweb应用下的WEB-INF/classes,WEB-INF/lib,都由q个加蝲器加载,由它所加蝲的类对其他的web应用是不可见的?br /> web应用的加载器(WebappX)和JDK的委托模型略有不同,q是ҎServlet2.3规范做出的。当WebappX被请求加载一个类Ӟ它首先尝试自己加载,而不是委托给它的父加载器。但是,对于下面的类Q仍然要委托l父加蝲器:<br /> Classes which are part of the JRE base classes cannot be overriden. For some classes (such as the XML parser components in JDK 1.4+), the JDK 1.4 endorsed feature can be used (see the common classloader definition above). In addition, for the following class patterns, the classloader will always delegate first (and load the class itself if no parent classloader loads it): <br /> javax.* <br /> org.xml.sax.* <br /> org.w3c.dom.* <br /> org.apache.xerces.* <br /> org.apache.xalan.*<br />  Last, any JAR containing servlet API classes will be ignored by the classloader.<br /> <br /> Tomcat中其他的加蝲器都是遵循委托模型的?br /> 最后,以web应用的角度,要加载类或者资源时Q会以下面的序查找Q?br /> Bootstrap classes of your JVM <br /> System class loader classses (described above) <br /> /WEB-INF/classes of your web application <br /> /WEB-INF/lib/*.jar of your web application <br /> $CATALINA_HOME/common/classes <br /> $CATALINA_HOME/common/endorsed/*.jar <br /> $CATALINA_HOME/common/lib/*.jar <br /> $CATALINA_BASE/shared/classes <br /> $CATALINA_BASE/shared/lib/*.jar <br /> <br /> 本文来自CSDN博客Qhttp://blog.csdn.net/findhappy7/archive/2008/05/12/2436702.aspx<br /> <br /> <br /> <img src ="http://www.aygfsteel.com/tomjamescn/aggbug/283670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/tomjamescn/" target="_blank">tomjamescn</a> 2009-06-23 09:14 <a href="http://www.aygfsteel.com/tomjamescn/archive/2009/06/23/283670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ͼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͼʲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ԫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ţ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ղ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank">Ϸ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">㶫ʡ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">°Ͷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">пǰ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">̨ɽ</a>| <a href="http://" target="_blank">ʯׯ</a>| <a href="http://" target="_blank">ͨɽ</a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>