仓酷云
标题:
JAVA编程:Tomcat 设置技能精髓详解剖析
[打印本页]
作者:
分手快乐
时间:
2015-1-18 11:11
标题:
JAVA编程:Tomcat 设置技能精髓详解剖析
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。技能|精髓|详解
1、设置体系办理(AdminWebApplication)
年夜多半贸易化的J2EE服务器都供应一个功效壮大的办理界面,且多数接纳易于了解的Web使用界面。Tomcat依照本人的体例,一样供应一个成熟的办理工具,而且涓滴不逊于那些贸易化的合作敌手。Tomcat的AdminWebApplication最后在4.1版本时呈现,事先的功效包含办理context、datasource、user和group等。固然也能够办理像初始化参数,user、group、role的多种数据库办理等。在后续的版本中,这些功效将失掉很年夜的扩大,但现有的功效已十分有用了。AdminWebApplication被界说在主动部署文件:CATALINA_BASE/webapps/admin.xml。(译者注:CATALINA_BASE即tomcat安装目次下的server目次)
你必需编纂这个文件,以断定Context中的docBase参数是相对路径。也就是说,CATALINA
_BASE/webapps/admin.xml的路径是相对路径。作为别的一种选择,你也能够删除这个主动部署文件,而在server.xml文件中创建一个AdminWebApplication的context,效果是一样的。你不克不及办理AdminWebApplication这个使用,换而言之,除删除CATALINA_BASE/webapps/admin.xml,你大概甚么都做不了。
假如你利用UserDatabaseRealm(默许),你将必要增加一个user和一个role到CATALINA_BASE/conf/tomcat-users.xml文件中。你编纂这个文件,增加一个名叫“admin”的role到该文件中,以下:
<rolename="admin"/>
你一样必要有一个用户,而且这个用户的脚色是“admin”。象存在的用户那样,增加一个用户(改动暗码使其加倍平安):
<username="admin"
password="deep_dark_secret"
roles="admin"/>
当你完成这些步骤后,请从头启动Tomcat,会见http://localhost:8080/admin,你将看到一个登录界面。AdminWebApplication接纳基于容器办理的平安机制,并接纳了JakartaStruts框架。一旦你作为“admin”脚色的用户登录办理界面,你将可以利用这个办理界面设置Tomcat。
2、设置使用办理(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”的脚色到该文件中:
<rolename=”manager”>
你一样必要有一个脚色为“manager”的用户。像已存在的用户那样,增加一个新用户(改动暗码使其加倍平安):
<username="manager"
password="deep_dark_secret"
roles="manager"/>
然后从头启动Tomcat,会见http://localhost/manager/list,将看到一个很朴实的文本型办理界面,大概会见http://localhost/manager/html/list,将看到一个HMTL的办理界面。不论是哪一种体例都申明你的ManagerWebApplication如今已启动了。
Managerapplication让你能够在没有体系办理特权的基本上,安装新的Web使用,以用于测试。假如我们有一个新的web使用位于/home/user/hello下在,而且想把它安装到/hello下,为了测试这个使用,我们能够这么做,在第一个文件框中输出“/hello”(作为会见时的path),在第二个文本框中输出“file:/home/user/hello”(作为ConfigURL)。
Managerapplication还同意你中断、从头启动、移除和从头部署一个web使用。中断一个使用使其没法被会见,当有效户实验会见这个被中断的使用时,将看到一个503的毛病??“503-Thisapplicationisnotcurrentlyavailable”。
移除一个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使用的另外一种体例是写一个ContextXML片段文件,然后把该文件拷贝到CATALINA_BASE/webapps目次下。一个Context片段并不是一个完全的XML文件,而只是一个context元素,和对该使用的响应形貌。
这类片段文件就像是从server.xml中切掏出来的context元素一样,以是这类片段被定名为“context片段”。
举个例子,假如我们想部署一个名叫MyWebApp.war的使用,该使用利用realm作为会见把持体例,我们可使用上面这个片段:
<!--
ContextfragmentfordeployingMyWebApp.war
-->
<Contextpath="/demo"
docBase="webapps/MyWebApp.war"
debug="0"privileged="true">
<RealmclassName=
"org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Context>
把该片段定名为“MyWebApp.xml”,然后拷贝到CATALINA_BASE/webapps目次下。
这类context片段供应了一种便当的办法来部署web使用,你不必要编纂server.xml,除非你想改动缺省的部署特征,安装一个新的web使用时不必要重启动Tomcat。
4、设置假造主机(VirtualHosts)
关于server.xml中“Host”这个元素,只要在你设置假造主机的才必要修正。假造主机是一种在一个web服务器上服务多个域名的机制,对每一个域名而言,都好象独享了全部主机。实践上,年夜多半的小型商务网站都是接纳假造主机完成的,这次要是由于假造主性能间接毗连到Internet并供应响应的带宽,以保证公道的会见呼应速率,别的假造主机还能供应一个不乱的流动IP。
基于名字的假造主机能够被创建在任何web服务器上,创建的办法就是经由过程在域名服务器(DNS)上创建IP地点的别号,而且告知web服务器把往往分歧域名的哀求分发到响应的网页目次。由于这篇文章次要是讲Tomcat,我们禁绝备先容在各类操纵体系上设置DNS的办法,假如你在这方面必要匡助,请参考《DNSandBind》一书,作者是PaulAlbitzandCricketLiu(OReilly)。为了树模便利,我将利用一个静态的主机文件,由于这是测试别号最复杂的办法。
在Tomcat中利用假造主机,你必要设置DNS或主机数据。为了测试,为当地IP设置一个IP别号就充足了,接上去,你必要在server.xml中增加几行内容,以下:
<Serverport="8005"
shutdown="SHUTDOWN"debug="0">
<Servicename="Tomcat-Standalone">
<ConnectorclassName=
"org.apache.coyote.tomcat4.CoyoteConnector"
port="8080"
minProcessors="5"maxProcessors="75"
enableLookups="true"
redirectPort="8443"/>
<ConnectorclassName=
"org.apache.coyote.tomcat4.CoyoteConnector"
port="8443"minProcessors="5"
maxProcessors="75"
acceptCount="10"debug="0"
scheme="https"secure="true"/>
<FactoryclassName="org.apache.coyote.
tomcat4.CoyoteServerSocketFactory"
clientAuth="false"protocol="TLS"/>
</Connector>
<Enginename="Standalone"
defaultHost="localhost"debug="0">
<!--ThisHostisthedefaultHost-->
<Hostname="localhost"
debug="0"appBase="webapps"
unpackWARs="true"autoDeploy="true">
<Contextpath=""docBase="ROOT"debug="0"/>
<Contextpath="/orders"
docBase="/home/ian/orders"debug="0"
reloadable="true"crossContext="true">
</Context>
</Host>
<!--ThisHostisthefirst
"VirtualHost":http://www.ckuyun.com/-->
<Hostname="www.ckuyun.com"
appBase="/home/example/webapp">
<Contextpath=""docBase="."/>
</Host>
</Engine>
</Service>
</Server>
Tomcat的server.xml文件,在初始形态下,只包含一个假造主机,可是它简单被扩大到撑持多个假造主机。在后面的例子中展现的是一个复杂的server.xml版本,个中粗体部分就是用于增加一个假造主机。每个Host元素必需包含一个或多个context元素,所包括的context元素中必需有一个是默许的context,这个默许的context的显现路径应当为空(比方,path=””)。
5、设置基本考证(BasicAuthentication)
容器办理考证办法把持着当用户会见受回护的web使用资本时,怎样举行用户的身份判别。当一个web使用利用了BasicAuthentication(BASIC参数在web.xml文件中auto-method元素中设置),而有效户会见受回护的web使用时,Tomcat将经由过程HTTPBasicAuthentication体例,弹出一个对话框,请求用户输出用户名和暗码。在这类考证办法中,一切暗码将被以64位的编码体例在收集上传输。
注重:利用BasicAuthentication经由过程被以为是不平安的,由于它没有健旺的加密办法,除非在客户端和服务器端都利用HTTPS大概其他暗码加暗码体例(好比,在一个假造公家收集中)。若没有分外的加密办法,收集办理员将可以截获(或滥用)用户的暗码。
可是,假如你是刚入手下手利用Tomcat,大概你想在你的web使用中测试一下基于容器的平安办理,BasicAuthentication仍是十分易于设置和利用的。只必要增加<security-constraint>和<login-config>两个元素到你的web使用的web.xml文件中,而且在CATALINA_BASE/conf/tomcat-users.xml文件中增加得当的<role>和<user>便可,然后从头启动Tomcat。
上面例子中的web.xml摘自一个俱乐部会员网站体系,该体系中只要member目次被回护起来,并利用BasicAuthentication举行身份考证。请注重,这类体例将无效的取代Apacheweb服务器中的.htaccess文件。
<!--
Definethe
Members-onlyarea,
bydefining
a"SecurityConstraint"
onthisApplication,and
mappingittothe
subdirectory(URL)thatwewant
torestrict.
-->
<security-constraint>
<web-resource-collection>
<web-resource-name>
EntireApplication
</web-resource-name>
<url-pattern>/members/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
<!--DefinetheLogin
Configurationfor
thisApplication-->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>MyClub
Members-onlyArea</realm-name>
</login-config>
6、设置单点登录(SingleSign-On)
一旦你设置了realm和考证的办法,你就必要举行实践的用户登录处置。一样平常说来,对用户而言登录体系是一件很贫苦的事变,你必需只管削减用户登录考证的次数。作为缺省的情形,当用户第一次哀求受回护的资本时,每个web使用城市请求用户登录。
假如你运转了多个web使用,而且每一个使用都必要举行独自的用户考证,那这看起来就有点像你在与你的用户奋斗。用户们不晓得如何才干把多个分别的使用整分解一个独自的体系,一切他们也就不晓得他们必要会见几个分歧的使用,只是很利诱,为何总要一直的登录。
Tomcat4的“singlesign-on”特征同意用户在会见统一假造主机下一切web使用时,只需登录一次。为了利用这个功效,你只必要在Host上增加一个SingleSignOnValve元素便可,以下所示:
<ValveclassName=
"org.apache.catalina.
authenticator.SingleSignOn"
debug="0"/>
在Tomcat初始安装后,server.xml的正文内里包含SingleSignOnValve设置的例子,你只必要往失落正文,便可利用。那末,任何用户只需登录过一个使用,则关于统一假造主机下的一切使用一样无效。利用singlesign-onvalve有一些主要的限定:
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使用利用它本人的考证体例,而不利用容器办理平安,那你基础上就没招了。你的用户每次登录本来一切使用时必要登录一次,而且在哀求新的第三方使用时还得再登录一次。
固然,假如你具有这个第三方web使用的源码,而你又是一个程序员,你能够修正它,但那生怕也不简单做。
6>单点登录必要利用cookies。
7、设置用户定制目次(CustomizedUserDirectores)
一些站点同意一般用户在服务器上公布网页。比方,一所年夜学的学院大概想给每位先生一个大众地区,大概是一个ISP但愿给一些web空间给他的客户,但这又不是假造主机。在这类情形下,一个典范的办法就是在用户名后面加一个特别字符(~),作为每位用户的网站,好比:
http://www.cs.myuniversity.edu/~username
http://members.mybigisp.com/~username
Tomcat供应两种办法在主机上映照这些团体网站,次要利用一对特别的Listener元素。Listener的className属性应当是org.apache.catalina.startup.UserConfig,userClass属性应当是几个映照类之一。
假如你的体系是Unix,它将有一个尺度的/etc/passwd文件,该文件中的帐号可以被运转中的Tomcat很简单的读取,该文件指定了用户的主目次,利用PasswdUserDatabase映照类。
<ListenerclassName=
"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类。
<ListenerclassName=
"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服务器的功能。撑持通用网关接口(CommonGatewayInterface,即CGI)就是个中之一,CGI供应一组办法在呼应扫瞄器哀求时运转一些扩大程序。
CGI之以是被称为通用,是由于它能在年夜多半程序或剧本中被挪用,包含:Perl,Python,awk,Unixshellscripting等,乃至包含Java。
固然,你也许不会把一个Java使用程序看成CGI来运转,究竟如许太甚原始。一样平常而言,开辟Servlet总要比CGI具有更好的效力,由于当用户点击一个链接或一个按钮时,你不必要从操纵体系层入手下手举行处置。
Tomcat包含一个可选的CGIServlet,同意你运转遗留上去的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下的其他目次下,并为CGIServlet调剂cgiPathPrefix初始化参数。这就指定的CGIServlet的实践地位,且不克不及与上一步指定的URL重名。
5.从头启动Tomcat,你的CGI就能够运转了。
在Tomcat中,CGI程序缺省安排在WEB-INF/cgi目次下,正如后面所提醒的那样,WEB-INF目次受回护的,经由过程客户真个扫瞄器没法窥伺到个中内容,以是关于安排含有暗码或其他敏感信息的CGI剧本而言,这是一个十分好的中央。
为了兼容其他服务器,只管你也能够把CGI剧本保留在传统的/cgi-bin目次,但要晓得,在这些目次中的文件有大概被网上猎奇的冲浪者看到。别的,在Unix中,请断定运转Tomcat的用户有实行CGI剧本的权限。
9、改动Tomcat中的JSP编译器(JSPCompiler)
在Tomcat4.1(或更高版本,也许),JSP的编译由包括在Tomcat内里的Ant程序把持器间接实行。这听起来有一点点奇异,但这恰是Ant成心为之的一部分,有一个API文档引导开辟者在没有启动一个新的JVM的情形下,利用Ant。
这是利用Ant举行Java开辟的一年夜上风。别的,这也意味着你如今可以在Ant中利用任何javac撑持的编译体例,这里有一个关于ApacheAnt利用手册的javacpage列表。
利用起来是简单的,由于你只必要在<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、限定特定主机会见(RestrictingAccesstoSpecificHosts)
偶然,你大概想限定对Tomcatweb使用的会见,好比,你但愿只要你指定的主机或IP地点能够会见你的使用。如许一来,就只要那些指定的的客户端能够会见服务的内容了。为了完成这类效果,Tomcat供应了两个参数供你设置:RemoteHostValve和RemoteAddrValve。
经由过程设置这两个参数,可让你过滤来自哀求的主机或IP地点,并同意或回绝哪些主机/IP。与之相似的,在Apache的httpd文件里有对每一个目次的同意/回绝指定。比方你能够把AdminWebapplication设置成只同意当地会见,设置以下:
<Contextpath=
"/path/to/secret_files"...>
<ValveclassName="org.apache.
catalina.valves.RemoteAddrValve"
allow="127.0.0.1"deny=""/>
</Context>
假如没有给出同意主机的指定,那末与回绝主机婚配的主机就会被回绝,除此以外的都是同意的。与之相似,假如没有给出回绝主机的指定,那末与同意主机婚配的主机就会被同意,除此以外的都是回绝的。
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点
作者:
活着的死人
时间:
2015-1-18 22:48
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
若相依
时间:
2015-1-23 21:49
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者:
深爱那片海
时间:
2015-1-24 12:40
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
分手快乐
时间:
2015-1-25 15:37
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者:
再见西城
时间:
2015-2-8 06:04
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者:
金色的骷髅
时间:
2015-2-11 08:12
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者:
灵魂腐蚀
时间:
2015-2-14 14:39
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
精灵巫婆
时间:
2015-3-4 07:00
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者:
变相怪杰
时间:
2015-3-11 17:50
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
兰色精灵
时间:
2015-3-19 04:32
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者:
若天明
时间:
2015-3-27 07:09
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2