1. 什么是Tomcat
Tomcat是当今最流行的一种Servlet/JSP容器。
2. 什么是上下文(Context)
简单理解就是一个Web应用程序启动后,程序中所有内存对象和他们之间的关系组成的一种环境。代码上其实就是javax.servlet.ServletContext这个类。
安装在一个服务器的一个特定URL名字空间(比如,/myapplication)下的所有Servlet,JSP,JavaBean等Web部件的集合构成了一个Web的应用,每一个Web应用(同一JVM),容器都会有一个背景对象,而javax.servlet.ServletContext接口就提供了访问这个背景对象的途径。
3. Tomcat与上下文
要将Servlet/JSP应用程序部署到Tomcat时,需要显式或隐式定义一个Tomcat上下文。在Tomcat中,每一个Tomcat上下文都表示一个web应用程序。
3.1 显式定义上下文方法:
有几种方法,包括:
- 在Tomcat的conf/Catalina/localhost目录下创建一个XML文件,即上下文文件,文件中必须包含一个Context元素,作为根元素。
- 在Tomcat的conf/server.xml文件中Host元素下面添加一个Context元素。
如果决定给每一个上下文都创建一个XML文件,那么这个文件名就很重要,因为上下文路径是从文件名衍生得到的。例如,把一个commerce.xml文件放在conf/Catalina/localhost目录下,那么应用程序的上下文路径就是commerce,并且可以利用以下URL调用一个资源:
http://localhost:8080/commerce/resourceName
Context元素大多没有子元素。它类似于如下,这里唯一必要的属性是docBase,它用来定义应用程序的位置。
<Context docBase="D:\apache-tomcat-7.0.57\wtpwebapps\app04b" path="/app04b" reloadable="true" source="org.eclipse.jst.jee.server:app04b"/>
当把上下文文件添加到指定目录时,Tomcat就会自动加载应用程序。当删除这个文件时,Tomcat就会自动卸载应用程序。
3.2 隐式定义上下文:
通过将一个war文件或者整个应用程序复制到Tomcat的webapps目录下,即隐式地部署了一个应用程序。
4. AppName与Context与IDE
IDE通常可以设置Tomcat读取war文件的的路径,所以可能并不能在Tomcat的webapps目录下看到项目文件。还可以设置项目的应用名,如将应用名设置为/,则浏览器中访问资源的URL可能如下:
http://localhost:8080/resourceName
5. 端口Port
HTTP/1.1 : 8080
Tomcat_HOME/conf/server.xml
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
当通过Tomcat_HOME/bin/startup.bat(或startup.sh)启动Tomcat时,Tomcat读取上面端口,http://localhost:8080可以访问,如果在IDE中配置server端口为8081,并且通过IDE启动项目在server上运行时,则http://localhost:8080和http://localhost:8081都不可以访问,只有http://localhost:8081/AppName/index.jsp可以访问。
5. server.xml
server.xml文件中节点内可能会随IDE产生节点,产生后,bin/startup.bat将不能启动tomcat.
%TOMCAT_HOME%/conf/server.xml
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
</Host>