简介
Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织。Tomcat是Apache 软件基金会的Jakarta 项目(开放源代码开发项目)中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。
Tomcat并不支持全部的j2ee规范,只支持jsp和servlet规范。Tomcat属于轻量级应用服务器,兼具web服务器的功能,但在处理静态资源的能力上没用web服务器那么优秀。Tomcat适用于并发量不是很大的中小型系统。
tomcat目录层次结构
bin: 存放启动和关闭tomcat的脚本文件
conf: 存放tomcat服务器的各种配置文件
lib: 存放tomcat服务器的支撑jar包
logs: 存放tomcat的日志文件
temp: 存放tomcat运行时产生的临时文件
webapps: web应用所在目录,即供外界访问的web资源的存放目录
work:tomcat的工作目录
Tomcat配置文件
Tomcat 的配置文件由server.xml、context.xml、tomcat-users.xml 、web.xml这4个xml文件组成。每个文件都有自己的功能与配置方法。web.xml是对部署在tomcat上的web应用的配置,其他三个均是对tomcat服务器本身的配置。
一:server.xml文件
该配置文件用于配置tomcat的服务,设置服务器的端口号,添加虚拟机等。
server.xml的一个Service节点代表在Tomcat上的一个服务,可以配置多个Service,为每个Service配置不同的端口,让Tomcat实现不同的端口提供不同的服务。
一般情况下我们并不需要配置多个Service,server.xml默认配置了一个“Catalina”的Service,默认使用8080端口。
<Service name="Catalina">
<!-- 使用8080端口接收http请求,设置超时时间为20s,8443端口接收https请求 -->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<!-- 8009端口接收其他服务器转发过来的请求 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tcl_srm_jvm1">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<!-- 定义一个主机,域名为:locaohost,应用程序的目录是/webapps,设置自动部署,自动解压-->
<Host name="locaohost" appBase="/webapps" unpackWARs="true" autoDeploy="true">
<!--虚拟目录的映射,设置当前web应用的web.xml或者类等有相关变化时,自动重载当前配置,不用重启tomcat-->
<!--访问路径为:localhost:8080/huiye-->
<Context path="huiye" docBase="D:/huiye" reloadable="true"/>
<!-- 定义Valve组件记录tomcat的访问日志,日志存放目录为:/huiye/logs-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/huiye/logs" prefix="www_access." suffix=".log" pattern="%h %l %u %t "%r" %s %b"/>
</Host>
</Engine>
</Service>
二:context.xml 文件
Context.xml 实际上是对上面server.xml中的Service节点下的Context元素的配置,根据文件所在的路径和文件名称确定作用范围。tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改,就会自动重新加载这个文件,而不需要重启服务器。对context元素的配置推荐在context.xml 中进行独立的配置。因为 server.xml 是不可动态重加载的资源,修改该文件之后需重启服务器。
context.xml的三个作用级别
- tomcat server 级别:
在/conf/context.xml 里配置,如果在该文件中配置,那么这个配置文件将会被所有的webapp共享 - Host 级别:
在 conf/{ServiceName}/{hostName} 里添加 context.xml进行配置,这个配置将会被server.xml配置中name为{ServiceName}的Service节点下的name为{hostName}的host节点下的webapp共享。
即会被如下路径下的webapp共享
<Service name="{ServiceName}/">
<Engine name="Catalina" defaultHost="{hostName}" jvmRoute="tcl_srm_jvm1">
<Host name="{hostName} " appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/" reloadable="false" docBase="D:/aaa"/>
<Context path="/" reloadable="false" docBase="D:/bbb"/>
</Host>
</Engine>
</Service>
- web app 级别:
在 /conf/{ServiceName}/{hostName} 里添加 {webAppName}.xml进行配置。这个配置只会对名称为webAppName的webapp生效(针对单个webapp的context需要指定path,docBase等元素的值)
<Context path="/eml" docBase="eml" debug="0" reloadbale="true" privileged="true">
<!--监控资源文件的默认设置,若配置的文件改变了,则自动重新加载改应用-->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/eml.xml</WatchedResource>
<!--配置全局JNDI数据源-->
<Resource name="jdbc/testSiteds" #表示指定的jndi名称
auth="Container" #表示认证方式,一般为Container
type="javax.sql.DataSource"
maxActive="100" #连接池支持的最大连接数
maxIdle="40" #连接池中最多可空闲maxIdle个连接
maxWait="30000" #连接池中连接用完时,新的请求等待时间,毫秒
username="txl" #表示数据库用户名
password="123456" #表示数据库用户的密码
driverClassName="com.mysql.jdbc.Driver" #表示JDBC DRIVER
url="jdbc:mysql://localhost:3306/testSite" /> #表示数据库URL地址
</Context>
三:tomcat-users.xml
当使用Tomcat的Webapps目录对Web应用进行管理时,无法控制单个Web应用的启动与停止, 为此,Tomcat提供了一个管理平台,该平台列出了所有的Web应用及其状态,并且,提供了控制每个Web应用的启动、停止与卸载的功能。使用该平台还可以实现远程向webapps目录下上传war包。
配置
在conf目录的tomcat-user.xml文件中,可以对服务器管理帐户进行设置,在管理帐户中身份必须加入管理员manager身份才能登录进入平台
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat,manager"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
进入管理平台
在浏览器的地址栏中输入
http://localhost:8080/
打开Tomcat首页,单击,Tomcat首页左侧的Manager App链接进入Tomcat管理平台
四:web.xml文件
web.xml文件是web应用最重要的配置文件,它必须放在WEB-INF目录中,在开发web应用时,但凡涉及到 对web应用中的web资源进行配置,通通是在web.xml文件中进行设置,例如:
将某个web资源配置为网站首页
将servlet程序映射到某个url地址上
为web应用配置监听器
为web应用配置过滤器
…………
目录结构
<web-app >
<filter></filter>
<filter-mapping></filter-mapping>
<servlet></servlet>
<servlet-mapping></servlet-mapping>
<session-config></session-config>
<mime-mapping></mime-mapping>
<welcome-file-list></welcome-file-list>
</web-app >
例
<!--filter 配置Servlet过滤器
filter-name 定义过滤器的名字。当有多个过滤器时,不能同名
filter-class 指定实现这一过滤的类,这个类负责具体的过滤事务 -->
<filter>
<filter-name>SampleFilter</filter-name>
<filter-class>mypack.SampleFilter</filter-class>
</filter>
<!--filter-mapping 设定过滤器负责过滤的URL
filter-name 过滤器名。这里的名字一定要和filter中的过滤器名匹配
url-pattern 指定过滤器负责过滤的URL -->
<filter-mapping>
<filter-name>SampleFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<!-- servlet 配置Servlet.
servlet-name 定义Servlet的名字
servlet-class 指定实现这个servlet的类
init-param 定义Servlet的初始化参数和参数值,可有多个init-param。在servlet类中通过 getInitParamenter(String name)方法访问初始化参数
load-on-startup 指定当Web应用启动时,装载Servlet的次序。
当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet.
当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它 -->
<servlet>
<servlet-name>SampleServlet</servlet-name>
<servlet-class>mypack.SampleServlet</servlet-class>
<init-param>
<param-name>initParam1</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置servlet映射(下面代码为SampleServlet指定的相对URL为"/sample":
servlet-name 指定servlet的名字,这里的名字应该和<Servlet>元素中定义的名字匹配。
url-pattern 指定访问这个servlet的URL。只需给出相对路径。 -->
<servlet-mapping>
<servlet-name>SampleServlet</servlet-name>
<url-pattern>/sample</url-pattern>
</servlet-mapping>
<!--配置session session用来设定HttpSession的生命周期。单位(秒)-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!--配置首页-->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>