{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
tomcat简介
一、tomcat背景自从jsp发布之后,推出了各式各样的jsp引擎。apachegroup在完成gnujsp1.0的开发以后,开始考虑在sun的jswdk基础上开发一个可以直接提供web服务的jsp服务器,当然同时也支持servlet,这样tomcat就诞生了。tomcat是jakarta项目中的一个重要的子项目,其被javaworld杂志的编辑选为2001年度最具创新的java产品,同时它又是sun公司官方推荐的servlet和jsp容器,因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。其次,tomcat是完全免费的软件,任何人都可以从互联网上自由地下载。tomcat与apache的组合相当完美。
二、tomcat目录
tomcat|---bintomcat:存放启动和关闭tomcat脚本;
|---conftomcat:存放不同的配置文件(server.xml和web.xml);|---doc:存放tomcat文档;|---lib/japser/common:存放tomcat运行需要的库文件(jars);|---logs:存放tomcat执行时的log文件;|---src:存放tomcat的源代码;|---webapps:tomcat的主要web发布目录(包括应用程序示例);|---work:存放jsp编译后产生的class文件;
三、tomcat类加载
bootstrap($java_home/jre/lib/ext/*.jar)system($classpath/*.class和指定的jar)common($catalina_home/common下的classes,lib,endores三个子目录)catalina($catalina_home/server/下的classes和lib目录仅对tomcat可见)&shared($catalina_home/shared/下的classes和lib目录以及$catalina_home/lib目录)仅对web应用程序可见,对tomcat不可见webapp($webapp/web-inf/*仅对该web应用可见classes/*.classlib/*.jar)
加载类和资源的顺序为:1、/web-inf/classes
2、/web-inf/lib/*.jar
3、bootstrap
4、system
5、$catalina_home/common/classes6、$catalina_home/common/endores/*.jar
7、$catalina_home/common/lib/*.jar
8、$catalina_home/shared/classes9、$catalina_home/shared/lib/*.jar
四、server.xml配置简介:
下面讲述这个文件中的基本配置信息,更具体的配置信息请参考tomcat的文档:server:1、port指定一个端口,这个端口负责监听关闭tomcat的请求2、shutdown指定向端口发送的命令字符串service:1、name指定service的名字connector(表示客户端和service之间的连接):1、port指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求2、minprocessors服务器启动时创建的处理请求的线程数3、maxprocessors最大可以创建的处理请求的线程数4、enablelookups如果为true,则可以通过调用request.getremotehost()进行dns查
询来得到远程客户端的实际主机名,若为false则不进行dns查询,而是返回其ip地址5、redirectport指定服务器正在处理http请求时收到了一个ssl传输请求后重定向的端口号6、acceptcount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理
队列中的请求数,超过这个数的请求将不予处理7、connectiontimeout指定超时的时间数(以毫秒为单位)engine(表示指定service中的请求处理机,接收和处理来自connector的请求):1、defaulthost指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的context(表示一个web应用程序):1、docbase应用程序的路径或者是war文件存放的路径2、path表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****3、reloadable这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/web-inf/lib和/web-inf/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序host(表示一个虚拟主机):1、name指定主机名2、appbase应用程序基本目录,即存放应用程序的目录3、unpackwars如果为true,则tomcat会自动将war文件解压,否则不解压,直接
从war文件中运行应用程序logger(表示日志,调试和错误信息):1、classname指定logger使用的类名,此类必须实现org.apache.catalina.logger接口2、prefix指定log文件的前缀3、suffix指定log文件的后缀4、timestamp如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txtrealm(表示存放用户名,密码及role的数据库):1、classname指定realm使用的类名,此类必须实现org.apache.catalina.realm接口valve(功能与logger差不多,其prefix和suffix属性解释和logger中的一样):1、classname指定valve使用的类名,如用org.apache.catalina.valves.accesslogvalve类可以记录应用程序的访问信息directory(指定log文件存放的位置):1、pattern有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,http响应代码,发送的字节数。combined方式比common方式记录的值更多
tomcat结构图
五、web.xml配置简介:
1、默认(欢迎)文件的设置
在tomcat4confweb.xml中,
2、报错文件的设置
如果某文件资源没有找到,服务器要报404错误,按上述配置则会调用webappsrootnotfilefound.jsp。
如果执行的某个jsp文件产生nullpointexception,则会调用webappsrootnull.jsp
3、会话超时的设置
设置session的过期时间,单位是分钟;
4、过滤器的设置
(
过滤:
1)身份验证的过滤authenticationfilters
2)日志和审核的过滤loggingandauditingfilters
3)图片转化的过滤imageconversionfilters
4)数据压缩的过滤datacompressionfilters
5)加密过滤encryptionfilters
6)tokenizingfilters
7)资源访问事件触发的过滤filtersthattriggerresourceaccesseventsxsl/t过滤xsl/tfilters
9)内容类型的过滤mime-typechainfilter注意监听器的顺序,如:先安全过滤,然后资源,
然后内容类型等,这个顺序可以自己定。
六、管理1、用户配置在进行具体tomcat管理之前,先给tomcat添加一个用户,使这个用户有权限来进行管理。打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行:
名和密码即可。2、应用程序列表在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息:ok-listedapplicationsforvirtualhostlocalhost/ex:running:1/examples:running:1/webdav:running:0/tomcat-docs:running:0/manager:running:0/:running:0上面显示的信息分别为:应用程序的路径、当前状态、连接这个程序的session数3、重新装载应用程序在浏览器中输入http://localhost:8080/manager/reload?path=/examples,浏览器显示如下:ok-reloadedapplicationatcontextpath/examples
这表示example应用程序装载成功,如果我们将server.xml的context元素的reloadable属性设为true,则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。
4、显示session信息在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显示如下:ok-sessioninformationforapplicationatcontextpath/examplesdefaultmaximumsessioninactive
interval30minutes5、启动和关闭应用程序在浏览器中输入http://localhost:8080/manager/start?path=/examples和
http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用程序。
注意:1:经过我测试,我设置context的path="",reloadable=true,然后放一个war文件到webapps目录,结果tomcat不能检测出此文件(重起tomcat可以),而把此文件解压,则tomcat会自动检测出这个新的应用程序。如果不能自动检测war文件,我们可以利用下面管理中讲的方法来部署应用程序。2:默认的server.xml中,realm元素只设置了一个classname属性,但此文件中也包含几个通过jdbc连接到数据库进行验证的示例(被注释掉了),通过realm元素我们可以实现容器安全管理(containermanagedsecurity)。3:还有一些元素我们没有介绍,如parameter,loader,你可以通过tomcat的文档获取这些元素的信息。此楼回复re:
三):管理1:配置在进行具体的管理之前,我们先给tomcat添加一个用户,使这个用户有权限来进行管理。打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行:注意:这一行的最后部分一定是/>,tomcat的文档掉了/符号,如果没有/符号的话,tomcat重起时将无法访问应用程序。通过logs/catalina.out文件你可以看到这个错误的详细信息。然后重起tomcat,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的用户名和密码即可。2:应用程序列表在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息:ok-listedapplicationsforvirtualhostlocalhost/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-reloadedapplicationatcontextpath/examples表示example应用程序装载成功,如果我们将server.xml的context元素的reloadable属性设为true(见上面表格),则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。4:显示session信息在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显示如下:ok-sessioninformationforapplicationatcontextpath/examplesdefaultmaximumsessioninactiveinterval30minutes5:启动和关闭应用程序在浏览器中输入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/apachetarzxvfapache.1.32.tar.gzcdapache.1.32./configure--prefix=/usr/local/apache--enable-module=somakemakeinstall
注意configure命令指定目标安装目录,并且加入dso(dynamicsharedobject)支持,注意一定不要忘了这一个选项。然后下载webapp模块,将解压后mod_webapp.so文件放入apache的libexec目录,编辑apache的conf目录下的httpd.conf,在这个文件的最后加入下面三行:loadmodulewebapp_modulelibexec/mod_webapp.sowebappconnectionwarpconnectionwarplocalhost:8008webappdeployexampleswarpconnection/examples/第一行是加入webapp模块,如果编译apache时不增加dso支持,则无法使用loadmodule指令,第二行指定tomcat与apache的连接,第三行指定部署那个应用,这两个指令使用格式如下:webappconnection[connectionname][provider][host:port]webappdeploy[applicationname][connectionname][urlpath]其中connectionname指定连接名,provider只能是warp,port端口与你的tomcat的配置文件server.xml最后几行指定的要保持一致。文件如下:port="8008"minprocessors="5"maxprocessors="75"enablelookups="true"acceptcount="10"debug="0"/>******applicationname与你在tomcat中部署的应用名一致,urlpath指定访问这个应用的url。例如上面的例子可以通过http://localhost/examples/来访问tomcat中的examples应用。
(五):中文问题一般jsp的乱码问题可以通过在jsp中加入来解决,至于servlet的乱码在可以使用servlet2.3中提供的httpserveletrequest.setcharacterencoding函数。更详细的中文问题请见jsp/servlet中的汉字编码问题。四:综述tomcat作为一个servlet(jsp也被编译为servlet执行)容器,其应用前景是非常好的,如果与jboss结合起来,则可以实现sun的j2ee规范(用jboss作ejb服务器)。jboss的官方网站也提供集成了tomcat3.2*的jboss以供下载。另外一个开源的应用服务器(enhydra)也是基于tomcat的,其提供了更友好的管理界面,部署应用程序也更简单,功能也更强大。
tomcat原理解说:启动过程分析
2007-09-1319:08
1-tomcatserver的组成部分
1.1-server
aserverelementrepresentstheentirecatalinaservletcontainer.(singleton)
1.2-service
aserviceelementrepresentsthecombinationofoneormoreconnectorcomponentsthatshareasingleengineservice是这样一个集合:它由一个或者多个connector组成,以及一个engine,负责处理所有connector所获得的客户请求
1.3-connector
一个connector将在某个指定端口上侦听客户请求,并将获得的请求交给engine来处理,从engine处获得回应并返回客户tomcat有两个典型的connector,一个直接侦听来自browser的http请求,一个侦听来自其它webserver的请求coyotehttp/1.1connector在端口8080处侦听来自客户browser的http请求coyotejk2connector在端口8009处侦听来自其它webserver(apache)的servlet/jsp代理请求
1.4-engine
theengineelementrepresentstheentirerequestprocessingmachineryassociatedwithaparticularserviceitreceivesandprocessesallrequestsfromoneormoreconnectorsandreturnsthecompletedresponsetotheconnectorforultimatetransmissionbacktotheclientengine下可以配置多个虚拟主机virtualhost,每个虚拟主机都有一个域名当engine获得一个请求时,它把该请求匹配到某个host上,然后把该请求交给该host来处理engine有一个默认虚拟主机,当请求无法匹配到任何一个host上的时候,将交给该默认host来处理
1.5-host
代表一个virtualhost,虚拟主机,每个虚拟主机和某个网络域名domainname相匹配每个虚拟主机下都可以部署(deploy)一个或者多个webapp,每个webapp对应于一个context,有一个contextpath当host获得一个请求时,将把该请求匹配到某个context上,然后把该请求交给该context来处理匹配的方法是“最长匹配”,所以一个path==""的context将成为该host的默认context所有无法和其它context的路径名匹配的请求都将最终和该默认context匹配
1.6-context
一个context对应于一个webapplication,一个webapplication由一个或者多个servlet组成context在创建的时候将根据配置文件$catalina_home/conf/web.xml和$webapp_home/web-inf/web.xml载入servlet类当context获得请求时,将在自己的映射表(mappingtable)中寻找相匹配的servlet类如果找到,则执行该类,获得请求的回应,并返回
2-tomcatserver的结构图
3-配置文件$catalina_home/conf/server.xml的说明
该文件描述了如何启动tomcatserver
4-context的部署配置文件web.xml的说明
一个context对应于一个webapp,每个webapp是由一个或者多个servlet组成的当一个webapp被初始化的时候,它将用自己的classloader对象载入“部署配置文件web.xml”中定义的每个servlet类它首先载入在$catalina_home/conf/web.xml中部署的servlet类然后载入在自己的webapp根目录下的web-inf/web.xml中部署的servlet类web.xml文件有两部分:servlet类定义和servlet映射定义每个被载入的servlet类都有一个名字,且被填入该context的映射表(mappingtable)中,和某种urlpattern对应当该context获得请求时,将查询mappingtable,找到被请求的servlet,并执行以获得请求回应
分析一下所有的context共享的web.xml文件,在其中定义的servlet被所有的webapp载入
5-tomcatserver处理一个http请求的过程
假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp
1)请求被发送到本机端口8080,被在那里侦听的coyotehttp/1.1connector获得2)connector把该请求交给它所在的service的engine来处理,并等待来自engine的回应3)engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机host4)engine匹配到名为localhost的host(即使匹配不到也把请求交给该host处理,因为该host被定义为该engine的默认主机)5)localhosthost获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有context6)host匹配到路径为/wsota的context(如果匹配不到就把该请求交给路径名为""的context去处理)7)path="/wsota"的context获得请求/wsota_index.jsp,在它的mappingtable中寻找对应的servlet8)context匹配到urlpattern为*.jsp的servlet,对应于jspservlet类9)构造httpservletrequest对象和httpservletresponse对象,作为参数调用jspservlet的doget或dopost方法10)context把执行完了之后的httpservletresponse对象返回给host11)host把httpservletresponse对象返回给engine12)engine把httpservletresponse对象返回给connector13)connector把httpservletresponse对象返回给客户browser
1.1-server
aserverelementrepresentstheentirecatalinaservletcontainer.(singleton)
1.2-service
aserviceelementrepresentsthecombinationofoneormoreconnectorcomponentsthatshareasingleengineservice是这样一个集合:它由一个或者多个connector组成,以及一个engine,负责处理所有connector所获得的客户请求
1.3-connector
一个connector将在某个指定端口上侦听客户请求,并将获得的请求交给engine来处理,从engine处获得回应并返回客户tomcat有两个典型的connector,一个直接侦听来自browser的http请求,一个侦听来自其它webserver的请求coyotehttp/1.1connector在端口8080处侦听来自客户browser的http请求coyotejk2connector在端口8009处侦听来自其它webserver(apache)的servlet/jsp代理请求
1.4-engine
theengineelementrepresentstheentirerequestprocessingmachineryassociatedwithaparticularserviceitreceivesandprocessesallrequestsfromoneormoreconnectorsandreturnsthecompletedresponsetotheconnectorforultimatetransmissionbacktotheclientengine下可以配置多个虚拟主机virtualhost,每个虚拟主机都有一个域名当engine获得一个请求时,它把该请求匹配到某个host上,然后把该请求交给该host来处理engine有一个默认虚拟主机,当请求无法匹配到任何一个host上的时候,将交给该默认host来处理
1.5-host
代表一个virtualhost,虚拟主机,每个虚拟主机和某个网络域名domainname相匹配每个虚拟主机下都可以部署(deploy)一个或者多个webapp,每个webapp对应于一个context,有一个contextpath当host获得一个请求时,将把该请求匹配到某个context上,然后把该请求交给该context来处理匹配的方法是“最长匹配”,所以一个path==""的context将成为该host的默认context所有无法和其它context的路径名匹配的请求都将最终和该默认context匹配
1.6-context
一个context对应于一个webapplication,一个webapplication由一个或者多个servlet组成context在创建的时候将根据配置文件$catalina_home/conf/web.xml和$webapp_home/web-inf/web.xml载入servlet类当context获得请求时,将在自己的映射表(mappingtable)中寻找相匹配的servlet类如果找到,则执行该类,获得请求的回应,并返回
该文件描述了如何启动tomcatserver
一个context对应于一个webapp,每个webapp是由一个或者多个servlet组成的当一个webapp被初始化的时候,它将用自己的classloader对象载入“部署配置文件web.xml”中定义的每个servlet类它首先载入在$catalina_home/conf/web.xml中部署的servlet类然后载入在自己的webapp根目录下的web-inf/web.xml中部署的servlet类web.xml文件有两部分:servlet类定义和servlet映射定义每个被载入的servlet类都有一个名字,且被填入该context的映射表(mappingtable)中,和某种urlpattern对应当该context获得请求时,将查询mappingtable,找到被请求的servlet,并执行以获得请求回应
分析一下所有的context共享的web.xml文件,在其中定义的servlet被所有的webapp载入
假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp
1)请求被发送到本机端口8080,被在那里侦听的coyotehttp/1.1connector获得2)connector把该请求交给它所在的service的engine来处理,并等待来自engine的回应3)engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机host4)engine匹配到名为localhost的host(即使匹配不到也把请求交给该host处理,因为该host被定义为该engine的默认主机)5)localhosthost获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有context6)host匹配到路径为/wsota的context(如果匹配不到就把该请求交给路径名为""的context去处理)7)path="/wsota"的context获得请求/wsota_index.jsp,在它的mappingtable中寻找对应的servlet8)context匹配到urlpattern为*.jsp的servlet,对应于jspservlet类9)构造httpservletrequest对象和httpservletresponse对象,作为参数调用jspservlet的doget或dopost方法10)context把执行完了之后的httpservletresponse对象返回给host11)host把httpservletresponse对象返回给engine12)engine把httpservletresponse对象返回给connector13)connector把httpservletresponse对象返回给客户browser
............
tomcat启动脚本分析一
2008-05-1208:59
tomcat是应用颇广的servlet和jsp的容器,可以说几乎每个学习jsp的人都接触过它。在实际开发环境中,它还可以作为轻巧灵便的应用服务器用来调试和部署。在tomcat上开发的servlet和jsp程序,可以非常方便地部署到weblogic及websphere等生产服务器上去。有些情况下,它还可以和apachewebserver配合使用,作为小型企业的webapplicationserver。本文以tomcat5.0.28为例,讨论一下tomcat的启动过程及常见问题。大家都知道,tomcat最普遍的启动方法就是在dos命令行窗口中执行tomcat的bin目录下的startup.bat文件(双击该文件即可启动)。1.startup.bat脚本解析下面我们首先来看看startup.bat脚本是如何启动tomcat的。startup脚本非常明了,它的主要任务就是先设置catalina_home的环境变量,让该环境变量指向tomcat的安装目录;然后在安装目录的bin子目录下找catalina.bat文件,如果找不到,就打印出错误信息并退出,如果在bin目录下找到catalina.bat文件,就准备执行该文件。不过,在执行该文件之前,startup脚本还做了一件工作,那就是寻找参数。startup脚本可以带多个参数,在java主类中,第一个参数为args[0],而在ms-dos脚本中,第一个参数可以通过”%1”得到,如果您想要得到dos脚本中得到第二个参数,调用”%2”。但是,在脚本参数数目未知的情况下,我们就只能通过goto循环调用shift命令来获得脚本的所有参数,下面这个简单的实验脚本有助于我们理解如何使用shift命令。@echooffechoprintparametersby%%1andshiftloop:loopstartif""%1""==""""gotoloopendechoparamteris%1shiftgotoloopstart:loopend如果把上面的脚本保存成test.bat并在dos中执行该脚本,执行结果如下。下面就是startup.bat脚本的详细注释,如果想要在dos脚本中注释一行,前面加上rem即可,这相当于java的双斜杠(//)注释,下面程序中,凡是以rem开头然后接着中文的行,都是笔者加上的注释,以帮助读者理解该脚本。@echooffif"%os%"=="windows_nt"setlocalrem---------------------------------------------------------------------------remstartscriptforthecatalinaserverremrem$id:startup.bat,v1.62004/05/2718:25:11yoavsexp$rem---------------------------------------------------------------------------rem首先定义一个变量current_dir,然后把当前目录作为一个字符串赋给它remguesscatalina_homeifnotdefinedsetcurrent_dir=%cd%rem如果catalina_home变量已经赋值,程序转到gothome行继续ifnot"%catalina_home%"==""gotogothomerem把当前目录的值作为字符串赋给catalina_home变量setcatalina_home=%current_dir%rem如果当前目录的bin子目录下发现catalina.bat文件,程序转到okhome行继续rem否则执行下一行“cd..”。rem因为缺省情况下当前目录就是bin目录,所以缺省情况下程序不转入okhome行ifexist"%catalina_home%bincatalina.bat"gotookhomerem回上层目录cd..rem把当前目录的上层目录作为字符串赋给再次catalina_home变量,覆盖第一次的赋值setcatalina_home=%cd%rem重新回到当前目录cd%current_dir%:gothomerem如果在当前目录的父目录的bin子文件夹下发现catalina.bat文件,程序转到okhome行继续rem否则程序打印两行错误信息,然后退出ifexist"%catalina_home%bincatalina.bat"gotookhomeechothecatalina_homeenvironmentvariableisnotdefinedcorrectlyechothisenvironmentvariableisneededtorunthisprogramgotoend:okhomerem设置一个变量,存储catalina.bat的完整路径setexecutable=%catalina_home%bincatalina.batrem再次检查catalina.bat是否存在,如果不存在,打印两行错误信息,退出remcheckthattargetexecutableexistsifexist"%executable%"gotookexecechocannotfind%executable%echothisfileisneededtorunthisprogramgotoend:okexecrem检查脚本是否带参数,如果发现参数,把第一个参数赋值给cmd_line_args变量rem如果脚本带有多个参数,程序设置了一个循环setargs,rem不断把所带的参数加到cmd_line_args变量中remgetremainingunshiftedcommandlineargumentsandsavetheminthesetcmd_line_args=:setargsif""%1""==""""gotodonesetargssetcmd_line_args=%cmd_line_args%%1shiftgotosetargs:donesetargsrem执行catalina.bat脚本,该脚本的第一个参数为start,后面的参数是从本脚本中传入的call"%executable%"start%cmd_line_args%:end那么读者也许要问,问什么要通过startup脚本来调用catalina脚本,直接一个脚本不更方便吗?细心的读者或许会发现,在缺省情况下,startup脚本只能放在两个位置,一是tomcat的安装目录,一个就是tomcat安装目录的bin子目录。这是什么意思呢?如果tomcat安装目录是c:carlittomcat_researchjakarta-tomcat-5.0.28,那么startup脚本只能放在c:carlittomcat_researchjakarta-tomcat-5.0.28目录或者c:carlittomcat_researchjakarta-tomcat-5.0.28bin目录下才能运行,如果拷贝startup文件到其它目录,我们就会看到下面的错误(以tomcat运行在c:carl目录下为例):c:carl>startupcatalina_homec:thecatalina_homeenvironmentvariableisnotdefinedcorrectlythisenvironmentvariableisneededtorunthisprogram那么,如果我们想让tomcat在桌面上能成功启动,那么该怎么办呢?当然,我们首先想到的是为startup创建一个快捷方式,然后拷贝该快捷方式到桌面,这是一种办法。另一种办法就是修改startup.bat文件,在startup.bat脚本的第八行处添上一句脚本,让catalina_home变量指向用户tomcat的安装路径,这样,startup.bat就可以拷贝到机器的任何目录执行。这个startup.bat脚本就是提供给使用者用来修改的,我们可以在其中设置java_home,catalina_home等环境变量,但我们并不需要深入到较为复杂的catalina.bat脚本中,这正是startup.bat脚本的真正用意所在。我们知道,软件设计模式中有一个重要的原则就是开闭原则,即我们可以允许别人扩展我们的程序,但在程序发布后,我们拒绝任何修改,因为修改会产生新的bug,使得我们已经bug-free的程序又要重新测试。开闭原则是面向对象世界中的一个非常重要的原则,我们可以把这个原则从java类扩展至源代码级别。startup脚本就是要求用户不要修改catalina.bat脚本,这是符合软件设计思想的。我们如果想要彻底贯彻这个重要的软件设计原则,可以写一个新脚本tomcat.bat,脚本内容大致如下:setjava_home=c:programfilesjavajdk1.5.0_09setcatalina_home=c:carlittomcat_researchjakarta-tomcat-5.0.28call%catalina_home%binstartup.bat这个tomcat.bat文件可以存放在任何目录并能执行,并且不需要修改tomcat自带的任何脚本及其它环境变量,这就彻底贯彻了开闭原则。
有关tomcat应用程序目录、端口、默认目录、应用程序默认打开文件、使用数据库连接池等方面的配置
关键字
有关tomcat应用程序目录、端口、默认目录、应用程序默认打开文件、使用数据库连接池等方面的配置出处
修改tomcat应用程序目录
在tomcat的conf目录下面的server.xml里面,修改
修改tomcat端口查找
修改tomcat默认目录在conf文件夹中,打开server.xml,找到,在它前面加上下面的代码:
修改应用程序默认打开文件在你的应用程序目录下修改web-infweb.xml文件(注意:不是tomcatconfweb.xml)在
经过这样的配置,就可以在url中输入http:\localhost(或http:\ip)来访问自己的网页了,
在tomcat中使用数据库连接池(sqlserver2000)在conf文件夹中,打开server.xml,找到,在它前面加上下面的代码:这样就生成了一个虚拟目录webshop,并且创建了连接池(注意修改相应的连接参数)注意:请首先将sqlser2000的jdbc的三个文件(msbase.jarms,sqlserver.jar,msutil.jar)复制到tomcatcommonlib目录下
在jsp中使用连接池concool.jsp
<%@pagecontenttype="text/html;charset=gb2312"%><%@pageimport="javax.naming.context"%><%@pageimport="javax.sql.datasource"%><%@pageimport="javax.naming.initialcontext"%><%@pageimport="java.sql.*"%>