Tomcat之虚拟主机配置以及web应用配置
Tomcat目录结构如下:
bin ---- 启动和关闭需要的bat文件所在的目录
conf --- 配置目录
lib --- tomcat运行时需要的jar包所在的目录
logs --- 运行时产生的日志信息所在的目录
temp --- tomcat运行时产生的临时文件存放的目录,不需要我们管理
webapps --- 开发中最常用的目录,web应用放置到此目录下浏览器可以直接访问
work --- 工作目录,tomcat运行时产生的工作文件存放在这个目录中
一、基本概念
虚拟主机的简单理解:
在一台Tomcat服务器中可以同时管理多个站点,即可以将多个站点配置在同一台Tomcat服务器上,而对于用户(浏览器)而言,是不知道具体哪些网站是布置在同一台Tomcat(服务器)之上的,对于用户(浏览器)而言,每个站点都像是运行在各自独立的服务器上。此时每个网站就是运行在同一台这是服务器中各自对应的虚拟主机上。此时,简单的理解,每个网站就可以认为是一个虚拟主机。
Web应用:
一个Web应用程序是由完成特定任务的各种Web组件(web components)构成的并通过Web将服务展示给外界。在实际应用中,Web应用程序是由多个Servlet、JSP页面、HTML文件以及图像文件等web资源组成。而这些web资源不能直接交给虚拟主机,故将这些资源按照一定的格式组织成web应用交由虚拟机主机管理。所有这些组件相互协调为用户提供一组完整的服务。
简单的将:web应用就是按照特定格式组织的一些web资源(Servlet、JSP页面、HTML文件以及图像文件等)的集合,为用户提供特定服务。
一个Tomcat中可以配置多个虚拟主机,一个虚拟主机中可以配置多个web应用。
二、Tomcat虚机主机配置
在conf/server.xml中<Engin>标签下配置<Host>标签就可以为tomcat增加一台虚拟主机了
name -- 指定虚拟主机的名称,浏览器通过这个名称访问虚拟主机
appBase -- 虚拟主机管理的目录,放置在这个目录下的web应用当前虚拟主机可以自动加载(在autoDeploy为true的情况下)相当于Localhost虚拟主机的webapps目录(在autoDeploy为true的情况下)
debug -- 是日志的调试等级
unpackWARs -- 设置为true,在Web应用为*.war时,解压此WAR文件. 如果为true,则tomcat会自动将WAR文件解压;否则不解压,直接从WAR文件中运行应用程序.
autoDeploy -- 默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用
实例代码:
- </pre><pre>
- <?xml version="1.0" encoding="UTF-8"?>
- <Server port="8005" shutdown="SHUTDOWN">
- <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
- <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
- <Listener className="org.apache.catalina.core.JasperListener"/>
- <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
- <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
- <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
- <GlobalNamingResources>
- <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
- </GlobalNamingResources>
- <Service name="Catalina">
- <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
- <Engine defaultHost="localhost" name="Catalina">
- <Realm className="org.apache.catalina.realm.LockOutRealm">
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
- </Realm>
- <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
- <Context docBase="D:\apache-tomcat-7.0.63\wtpwebapps\Cabinet_WS" path="/Cabinet_WS" reloadable="true" source="org.eclipse.jst.jee.server:Cabinet_WS"/>
- </Host>
- <!-- 添加新的虚拟主机 -->
- <Host appBase="mywebapps" autoDeploy="true" name="www.google.com" unpackWARs="true">
- </Host>
- </Engine>
- </Service>
- </Server>
三、Tomcat配置web应用
3.1、Tomcat中Web应用的目录结构:
web应用目录结构: 如果目录结构不合法可能会出现各种问题.
news
|
|--静态资源和JSP文件都可以直接放置在web应用的目录下,浏览器可以直接访问到
|--WEB-INF
|--classes -- 动态web资源运行时的class文件要放在这个目录下
|--lib -- 动态web资源运行时所依赖的jar包要放在这个目录下
|--web.xml -- 整个web应用的配置文件,配置主页/Servlet的映射/过滤器监听器的配置都需要依赖这个文件进行
说明
WEB-INF -- 可以没有,但是最好有,如果有则一定要保证他的目录结构是完整的.放置在WEB-INF目录下的所有资源浏览器没有办法直接进行访问
3.2、Tomcat中配置web应用的几种方式:
方式一:这种配置方式需要重启服务器不推荐
在tomcat安装目录/conf/Server.xml的<Host>标签中,配置<Context>标签,就可以为该虚拟主机配置一个web应用了
缺省web应用设置:
如果将path设置为空则这个web应用为缺省web应用
示例代码如下:加粗部分
- <?xml version="1.0" encoding="UTF-8"?>
- <Server port="8005" shutdown="SHUTDOWN">
- <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
- <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
- <Listener className="org.apache.catalina.core.JasperListener"/>
- <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
- <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
- <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
- <GlobalNamingResources>
- <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
- </GlobalNamingResources>
- <Service name="Catalina">
- <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
- <Engine defaultHost="localhost" name="Catalina">
- <Realm className="org.apache.catalina.realm.LockOutRealm">
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
- </Realm>
- <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
- <!-- 添加新的web应用,应用名为HelloWord,虚拟路径/HelloWord -->
- <Context docBase="D:\apache-tomcat-7.0.63\wtpwebapps\HelloWord" path="/HelloWord" reloadable="true" />
- </Host>
- </Engine>
- </Service>
- </Server>
- </pre><pre>
其中<Context>标签属性说明:
属性名 |
说明 |
path |
访问的URI,如:http://localhost/是我的应用的根目录,在浏览器中访问此应用将用,在地址栏输入:http://localhost/HelloWord |
docBase |
WEB应用的目录web application的文件存放的硬件路径或者是WAR文件存放硬件路径。
|
reloadable |
是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件. 如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的JSP和Servlet,我们可以在不重起Tomcat的情况下改变web application |
方式二、这种配置方式不需要重启服务器,推荐使用
在tomcat安装目录/conf/[EnginName]/[HostName]/在这个目录下写一个xml文件,其中xml文件的名字就是虚拟路径,在这个xml中可以配置<Context>标签,其中配置真实路径.
注意:
1)其中[EnginName]指的是在tomcat安装目录/conf/Server.xml这个配置文件中<Engin>标签元素对应的名字。
2)[HostName]指tomcat安装目录/conf/Server.xml这个配置文件中<Host>标签元素的名字。
3)如果所配置的虚拟路径中有/,由于文件名中不允许包含/需要用#替代.
使用方式二完成方法一中相同的配置时,应进行如下操作:
1)在tomcat安装目录/conf/CataLina/localhost/目录下创建一个名为HelloWord.xml的文件,(若文件名中有斜杠时使用#好代替:test#HelloWord.xml)
2)在HelloWord.xml文件中写入如下代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <Context docBase="D:\apache-tomcat-7.0.63\wtpwebapps\HelloWord" path="/HelloWord" reloadable="true" />
其中<Context>标签属性说明参照上面内容。
缺省web应用设置:
只要将文件名设置为ROOT.xml则这个xml描述的web应用就成为了缺省web应用,
方式三、最简单、最常用的方式
直接将web应用放置到,虚拟主机管理的目录下,此时虚拟主机就会自动加载该目录下的web应用
/conf/Server.xml的<Host>标签中的属性appBase所指向的目录即为当前虚拟主机虚拟主机自动管理的目录,在属性autoDeploy为true的情况下,放置在这个目录下的web应用当前虚拟主机可以自动加载。
缺省web应用设置:
只要将web应用文件夹名设置为ROOT则这个web应用就成为了缺省web应用,默认已经有一个web应用,即默认访问的Tomcat的主页。
附关于/conf/Server.xml配置的详细说明
/conf/Server.xml文件的详细配置说明如下:
- <Server port="8005" shutdown="SHUTDOWN">
- <!--属性说明
- port:指定一个端口,这个端口负责监听关闭Tomcat的请求
- shutdown:向以上端口发送的关闭服务器的命令字符串
- -->
- <Listener className="org.apache.catalina.core.AprLifecycleListener" />
- <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
- <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
- <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
- <GlobalNamingResources>
- <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
- <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" />
- </GlobalNamingResources>
- <!-- 每个Service元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求 -->
- <Service name="Catalina">
- <!--属性说明
- name:Service的名称
- -->
- <!--
- Connector元素:由Connector接口定义.<Connector>元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.
- -->
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
- <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
- maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
- clientAuth="false" sslProtocol="TLS" />
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- <!--属性说明
- port:服务器连接器的端口号,该连接器将在指定端口侦听来自客户端的请求,设定Tcp/IP端口,默认值为8080,如果把8080改成80,则只要输入http://localhost即可 因为TCP/IP的默认端口是80
- enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名;若为false则不进行DNS查询,而是返回其ip地址
- redirectPort:服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
- acceptCount:当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数 的请求将不予处理,而返回Connection refused错误
- connectionTimeout:等待超时的时间数(以毫秒为单位)
- maxThreads:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200
- protocol:必须设定为AJP/1.3协议.
- address:如果服务器有两个以上IP地址,该属性可以设定端口监听的IP地址,默认情况下,端口会监听服务器上所有IP地址.
- minProcessors:服务器启动时创建的处理请求的线程数,每个请求由一个线程负责
- maxProcessors:最多可以创建的处理请求的线程数
- minSpareThreads:最小备用线程
- maxSpareThreads:最大备用线程
- debug:日志等级
- disableUploadTimeout:禁用上传超时,主要用于大数据上传时
- -->
- <Engine name="Catalina" defaultHost="localhost">
- <!--属性说明
- name:对应$CATALINA_HOME/config/Catalina中的Catalina
- defaultHost:对应Host元素中的name属性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost缺省的处理请求的虚拟主机名,它至少与其中的一个Host元素的name属性值是一样的
- debug:日志等级 -->
- <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
- resourceName="UserDatabase"/>
- <!--由Host接口定义.一个Engine元素可以包含多个<Host>元素. 每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用. -->
- <Host name="localhost" appBase="webapps"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
- <!--属性说明
- name:在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost 虚拟主机名
- debug:是日志的调试等级
- appBase:默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,放置在这个目录下的web应用当前虚拟主机可以自动加载
- unpackWARs:设置为true,在Web应用为*.war是,解压此WAR文件.如果为true,则tomcat会自动将WAR文件解压;否则不解压,直接从WAR文件中运行应用程序.
- autoDeploy:默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用 -->
- <Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" >
- </Context>
- <!--属性说明
- path:访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,
- docBase:WEB应用的目录.web application的文件存放的硬件路径或者是WAR文件存放硬件路径
- debug:日志等级
- reloadable:是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件.
- 如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib
- 和/WEB-INF/classes目录的变化,自动装载新的JSP和Servlet,我们可以在不重起
- Tomcat的情况下改变web application -->
- </Host>
- </Engine>
- </Service>
- </Server>
- <!--
- 标签的详细定义:
- <Host>元素
- 属性:
- 1>className:指定实现Host接口的类.默认值为StandardHost
- 2>appBase:指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于的相对目录.如果没有此项,默认为/webapps,此目录为虚拟主机管理的目录,放置在这个目录下的web应用当前虚拟主机可以自动加载
- 3>autoDeploy:如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用
- 4>unpackWARs:如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件
- 5>alias:指定主机别名,可以指定多个别名
- 6>deployOnStartup:如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用中的server.xml没有相应的元素,将采用Tomcat默认的Context
- 7>name:定义虚拟主机的名字
- <Context> 元素:它由Context接口定义.是使用最频繁的元素.每个可以包含多个元素.每个web应用有唯一的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个 ServletContext对象
- 属性:
- 1>className:指定实现Context的类,默认为StandardContext类
- 2>path:指定访问Web应用的URL入口,注意/myweb,而不是myweb了事
- 3>reloadable:如果这个属性设为true, Tomcat:服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改运.如果监视到有class文件被更新,服务器自重新加载Web应用
- 3>cookies:指定是否通过Cookies来支持Session,默认值为true
- 4>useNaming:指定是否支持JNDI,默认值为了true
- <Connector>元素
- 由Connector:接口定义.元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.
- 第一个Connector:元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;
- 第二个Connector:元素定义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.
- 属性
- 1> className:指定实现Connector接口的类
- 2> enableLookups:如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true
- 3> redirectPort:指定转发端口.如果当前端口只支持non-SSL请求,在需要安全通信的场命,将把客户请求转发至SSL的redirectPort端口
- HttpConnector元素的属性
- 1>className:实现Connector的类
- 2>port:设定Tcp/IP端口,默认值为8080,如果把8080改成80,则只要输入http://localhost即可 因为TCP/IP的默认端口是80
- 3>address:如果服务器有二个以上ip地址,此属性可以设定端口监听的ip地址.默认情况下,端口会监听服务器上所有的ip地址
- 4>bufferSize:设定由端口创建的输入流的缓存大小.默认值为2048byte
- 5>protocol:设定Http协议,默认值为HTTP/1.1
- 6>maxThreads:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200
- 7>acceptCount:设定在监听端口队列的最大客户请求数量,默认值为10.如果队列已满,客户必须等待.
- 8>connectionTimeout:定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间
- -->