一、Tomcat8的下载
http://tomcat.apache.org/download-80.cgi
二、Tomcat配置
解压tomcat到当前的文件
TOMCAT环境变量配置
TOMCAT_HOME : D:\apache-tomcat-7.0.63
Path : %TOMCAT_HOME%\bin
以上即可,不影响tomcat的使用
详细的配置也可以配置为
(1)变量名: CATALINA_BASE 变量值: D:\apache-tomcat-7.0.63(Tomcat解压到的目录)
(2)变量名: CATALINA_HOME 变量值:D:\apache-tomcat-7.0.63
(3)变量名: CATALINA_TMPDIR 变量值:D:\apache-tomcat-7.0.63\temp
(4)变量名: Path 变量值:D:\apache-tomcat-7.0.63\bin
运行Tomcat8,“开始”->“运行”->输入cmd,在命令提示符中输入 startup.bat,之后会弹出tomcat命令框,输出启动日志;打开浏览器输入http://localhost:8080/ ,如果进入tomcat欢迎界面,那么恭喜你,配置成功。
三、Eclipse中集成tomcat
在eclipse的栏目菜单中点击window-preferences 搜索server 找到Runtime Envirement中 点击Add
选择对应tomcat的版本
找到解压的tomcat路径
创建 Servers,如果找不到 Servers,则选择 Window--->Show View--->Others,然后在弹出来的对话框中输入 Servers,点击OK就可以了看到了
在弹出来的对话框中,不用改变啥,直接,Next,然后 Finish 即可
双击建好的服务,打开如下界面:
注意:如果你服务器里面有项目了,那必须清楚项目,才能打开进行修改
在打开的界面进行如下的修改操作,然后保存
服务器已经部署完成,那么接下来就是将项目部署到服务器上,启动服务器即可
右键项目名,选择 Run AS--->Run on Server,然后点击 Finish 即可运行项目了
注意:第 7 步一定要操作,然后服务器能正常启动,但是访问项目却会报 404 错误。这是因为eclipse将tomcat的项目发布目录(tomcat 目录中的webapp)重定向了,所以你会发现在tomcat安装目录下的webapp目录里面找不到你的项目文件
tomcat 服务器启动时做的工作
①、加载 web.xml 文件配置的过滤器,调用过滤器的 init()方法,初始化所有资源文件,主要包括 default.properties 文件,struts-default.xml,strut-plugin.xml,struts.xml 文件
Eclipse中tomcat service设置
选择window ----show view---services可以看到服务的面板
双击tomcat进入配置界面Service Locations(Specify the server path (i.e. catalina.base) and deploy path. Server must be published with no modules present to make changes.)选项变灰色无法更改配置。
若要更改,则先把tomcat下的所有項目移除。并右击,clean...之后方可设置。。。启动后将又变为黑色。
默认选项为:
Use workspace metadata(dose not modify Tomcat installation)
修改选项为:
Use Tomcat installation(takes control of Tomcat installation)
然后把Deploy path设置为TOMCAT_HOME/webapps就可以了
注:在进行此步骤时,TOMCAT7上部署的项目要全remove,然后启动,这时候ServerLocations才可以进行配置。
保存配置,重新启动TOMCAT即可。
Publishing
Never publish automatically 从不自动发布项目
更改项目的根路径
四、单个项目引入tomcat
选择项目右键,build path ---Library
选择Add Library 选择server Runtime
选择上面已经配置的tomcat即可
查看项目中引入的tomcat服务
选择项目右键---properties--project Facets 点击最右边的Runtimes
五、tomcat部署项目
一、tomcat自动部署web应用
最典型的自动部署,就是当我们安装完Tomcat后,$TOMCAT_HOME/webapps目录下有如下文件夹:
通过eclipse将要部署的项目打包成war包,放到tomcat下的到wabapps目录下
将编写并编译好的web项目(注意要是编译好的,如果是 eclipse,可以将项目打成 war 包放入),放入到 webapps 中
tomcat的默认访问路径是ROOT,一般情况把war包改名为ROOT放在tomcat的webapp下
在bin目录下运行 startup.bat 启动项目即可。
当我们启动Tomcat后,可以使用http://localhost:8080/来访问Tomcat,其实访问的就是ROOT对应的Web应用;
也可以直接把.war文件放在webapps目录下运行 startup.bat即可
在浏览器输入:http://localhost:8080/项目名/访问的文件名
二、server.xml中静态部署Web应用
修改 conf/server.xml 文件
除了自动部署,我们也可以在server.xml中通过<context>元素静态部署Web应用。
①、打开tomcat下conf/server.xml,在<Host> </Host>标签之间输入项目配置信息
<Context path="/WebProject" docBase="D:/WebProject" reloadable="true" />
静态部署与自动部署是可以共存的。在实际应用中,并不推荐使用静态部署,因为server.xml 是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而自动部署可以在Tomcat运行时通过定期的扫描来实现,不需要重启服务器。
path:浏览器访问时的路径名
docBase:web项目的WebRoot所在的路径,注意是WebRoot的路径,不是项目的路径。其实也就是编译后的项目
reloadble:设定项目有改动时,tomcat是否重新加载该项目
双击 startup.bat,启动 tomcat 服务器,然后在浏览器输入访问的项目名称路径
注意:如果你配置的 path="/xx",那么访问的时候就是这样:
<Context>元素的配置
Context元素最重要的属性是docBase和path,此外reloadable属性也比较常用。
docBase指定了该Web应用使用的WAR包路径,或应用目录。可以给定绝对路径也可以给定相对路径。如应用HelloApp1的文件路径为/webapps/HelloApp1
path指定了访问该Web应用的上下文路径,当请求到来时,Tomcat根据Web应用的 path属性与URI的匹配程度来选择Web应用处理相应请求。例如,Web应用app1的path属性是”/app1”,Web应用app2的path属性是”/app2”,那么请求/app1/index.html会交由app1来处理;而请求/app2/index.html会交由app2来处理。如果一个Context元素的path属性为””,那么这个Context是虚拟主机的默认Web应用;当请求的uri与所有的path都不匹配时,使用该默认Web应用来处理。
但是,需要注意的是,在自动部署场景下(配置文件位于xmlBase中),不能指定path属性,path属性由配置文件的文件名、WAR文件的文件名或应用目录的名称自动推导出来。如扫描Web应用时,发现了xmlBase目录下的app1.xml,或appBase目录下的app1.WAR或app1应用目录,则该Web应用的path属性是”app1”。如果名称不是app1而是ROOT,则该Web应用是虚拟主机默认的Web应用,此时path属性推导为””。
reloadable属性指示tomcat是否在运行时监控在WEB-INF/classes和WEB-INF/lib目录下class文件的改动。如果值为true,那么当class文件改动时,会触发Web应用的重新加载。在开发环境下,reloadable设置为true便于调试;但是在生产环境中设置为true会给服务器带来性能压力,因此reloadable参数的默认值为false。
上面访问的url为http://localhost:8080/HelloApp1/
三、动态部署,tomcat 服务启动后还可以发布 web 项目
上面的方法没法再tomcat启动的时候发布项目
①、进入到 apache-tomcat-7.0.52\conf\Catalina\localhost 目录,新建一个 项目名.xml 文件
②、在 那个新建的 xml 文件中,增加下面配置语句(和上面的是一样的,但是不需要 path 配置,加上也没什么用)
③、在浏览器输入路径:localhost:8080/xml文件名/访问的文件名
用这种方式每个项目分开配置,tomcat 将以\conf\Catalina\localhost 目录下的 xml 文件的文件名作为 web 应用的上下文路径,而不再理会 <Context>中配置的 path 路径,因此在配置的时候,可以不写 path。
①、第一种方法比较普通,但是我们需要将编译好的项目重新 copy 到 webapps 目录下,多出了两步操作
②、第二种方法直接在 server.xml 文件中配置,但是从 tomcat5.0版本开始后,server.xml 文件作为 tomcat 启动的主要配置文件,一旦 tomcat 启动后,便不会再读取这个文件,因此无法再 tomcat 服务启动后发布 web 项目
③、第三种方法是最好的,每个项目分开配置,tomcat 将以\conf\Catalina\localhost 目录下的 xml 文件的文件名作为 web 应用的上下文路径,而不再理会 <Context>中配置的 path 路径,因此在配置的时候,可以不写 path。
通常我们使用第三种方法
四、tomcat配置多个服务
1) 修改Tomcat的端口号
Tomcat在使用的时候会用到三个端口号:
8005:Tomcat 监听的关闭端口;
8080:Tomcat的服务端口;
8009:接受其他服务器转发过来的请求;
修改了这三个端口号,就可以在一台主机上启动多个Tomcat了;
修改文件位置:apache-tomcat-7.0.77\conf\server.xml;
下面是具体的修改前后对比图:
通过在Server中配置多个Service服务,可以实现通过不同的端口号来访问同一台机器上部署的不同Web应用。
在server.xml中配置多服务的方法非常简单,分为以下几步:
(1)复制<Service>元素,放在当前<Service>后面。
(2)修改端口号:根据需要监听的端口号修改<Connector>元素的port属性;必须确保该端口没有被其他进程占用,否则Tomcat启动时会报错,而无法通过该端口访问Web应用。
以Win7为例,可以用如下方法找出某个端口是否被其他进程占用:netstat -aon|findstr "8081"发现8081端口被PID为2064的进程占用,tasklist |findstr "2064"发现该进程为FrameworkService.exe(这是McAfee杀毒软件的进程)。
(3)修改Service和Engine的name属性
(4)修改Host的appBase属性(如webapps2)
(5)Web应用仍然使用自动部署
(6)将要部署的Web应用(WAR包或应用目录)拷贝到新的appBase下。
以第一部分的server.xml为例,多个Service的配置如下:
1 <?xml version='1.0' encoding='utf-8'?>
2 <Server port="8005" shutdown="SHUTDOWN">
3 <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
4 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
5 <Listener className="org.apache.catalina.core.JasperListener" />
6 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
7 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
8 <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
9
10 <GlobalNamingResources>
11 <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />
12 </GlobalNamingResources>
13
14 <Service name="Catalina">
15 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
16 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
17 <Engine name="Catalina" defaultHost="localhost">
18 <Realm className="org.apache.catalina.realm.LockOutRealm">
19 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
20 resourceName="UserDatabase"/>
21 </Realm>
22
23 <Host name="localhost" appBase="/opt/project/webapps" unpackWARs="true" autoDeploy="true">
24 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
25 </Host>
26 </Engine>
27 </Service>
28
29 <Service name="Catalina2">
30 <Connector port="8084" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
31 <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
32 <Engine name="Catalina2" defaultHost="localhost">
33 <Realm className="org.apache.catalina.realm.LockOutRealm">
34 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
35 resourceName="UserDatabase"/>
36 </Realm>
37
38 <Host name="localhost" appBase="/opt/project/webapps2" unpackWARs="true" autoDeploy="true">
39 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
40 </Host>
41 </Engine>
42 </Service>
43 </Server>
将要部署的Web应用(WAR包或应用目录)拷贝到新的appBase下,即将原webapps下的docs目录拷贝到webapps2中,则通过如下两个接口都可以访问docs应用:
注意Service name、Engine name、appBase,端口号别忘了修改,以免重复
发布的路径不同,appBase分别发布在webapps、webapps2跟tomcat的bin目录同一级
复制$TOMCAT_HOME\confi目录下的Catalina生成副本 ,并命名为Catalina2
http://localhost:8080/项目名称
http://localhost:8084/项目名称