目录结构
[root@localhost tomcat]# tree -L 1
.
├── bin
├── BUILDING.txt
├── conf
├── CONTRIBUTING.md
├── lib
├── LICENSE
├── logs
├── NOTICE
├── README.md
├── RELEASE-NOTES
├── RUNNING.txt
├── temp
├── webapps
└── work
【bin】目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。
很多环境变量的设置都在此处,例如可以设置JDK路径、TOMCAT路径
startup 用来启动tomcat
shutdown 用来关闭tomcat
修改catalina可以设置tomcat的内存
【conf】目录主要是用来存放tomcat的一些配置文件。
- server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码
- web.xml可以设置tomcat支持的文件类型
- context.xml可以用来配置数据源之类的
- tomcat-users.xml用来配置管理tomcat的用户与权限
- 在Catalina目录下可以设置默认加载的项目
lib】目录主要用来存放tomcat运行需要加载的jar包。
例如,像连接数据库的jdbc的包我们可以加入到lib目录中来。
【logs】目录用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响)
在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中
在linux环境中,控制台的输出日志在catalina.out文件中
【temp】目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)
【webapps】目录用来存放应用程序
当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包、jar包的形式发布应用。
当然,你也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行。
【work】目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。
清空work目录,然后重启tomcat,可以达到清除缓存的作用。
Tomcat的配置文件server.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- port:指定一个端口,负责监听关闭tomcat的请求,shutdown:指定向端口发送的命令字符串--> <Server port="8005" shutdown="SHUTDOWN"> <!-- 监听器:通常实现tomcat内部进行通信的,可在各组件之间完成通信--> <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> <!-- pathname:即调用tomcat-user.xml配置文件进行用户认证--> <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"> <!-- 连接服务器:表示客户端和service之间的连接,一个引擎能配置多个连接器 但是每个连接器的端口不能冲突;负责接收客户请求,以及向客户返回响应结果--> <!-- port:所在监听端口,protocol:协议版本号,connectionTimeout:连接超时时间,单位毫秒--> <!-- maxThreads设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200 --> <!-- connectionTimeout定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间 --> <Connector port="8080" maxThreads="1500" maxProcessors="450" connectionTimeout="20000" protocol="HTTP/1.1" redirectPort="8443"/> <!-- redirectPort指定转发端口.如果当前端口只支持non-SSL请求,在需要安全通信的场命,将把客户请求转发至SSL的redirectPort端口--> <!-- enableLookups如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true --> <Connector port="8009" enableLookups ="false" protocol="AJP/1.3" redirectPort="8443"/> <!--maxThreads:最大线程,scheme:协议版本,secure:安全的--> <!--clientAuth:不验证客户端,sslProtocol:协议用的是tls--> <!-- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="700" scheme="https" secure="true" maxProcessors="300" clientAuth="false" sslProtocol="TLS" /> --> <!--引擎:表示指定service中的请求处理机,接收和处理来自Connector的请求.可以接收用户的http请求,并构建响应报文,而且可以在内部处理java程序的整个套间--> <!-- defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的 --> <Engine defaultHost="localhost" name="Catalina"> <!-- Realm 表示存放用户名,密码及role的数据库 --> <!-- className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 --> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <!-- appBase 应用程序基本目录,即存放应用程序的目录--> <!-- unpackWARs:如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件,--> <!-- autoDeploy:如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用--> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <!-- ValveclassName:定义阀门,java中类的记录方式,当前所处域名反过来写的记录方式--> <!-- prefix,suffix:日志的命名--> <!-- pattern:访问日志的格式--> <!-- directory 指定log文件存放的位置 --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/> <!-- Context 表示运行在虚拟主机上的一个web应用程序,通常为WAR文件 --> <!-- 一个<Host>可以包含多个<Context>元素.每个web应用有唯一的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个ServletContext对象. --> <!-- docBase 应用程序的路径或者是WAR文件存放的路径 --> <!-- path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/**** --> <!-- reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载应用程序,我们可以在不重起tomcat的情况下改变应用程序 --> <Context docBase="sample-demo" path="/sample-demo" reloadable="true" source="org.eclipse.jst.jee.server:sample-demo"/> </Host> </Engine> </Service> </Server>
context.xml
<?xml version='1.0' encoding='utf-8'?> <Context> <!-- 监控资源文件,如果web.xml改变了,则自动重新加载应用 --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!--本地测试项目--> <!-- name,指定JNDI名称 --> <!-- auth,表示认证方式,一般为Container --> <!-- maxActive,连接池支持的最大连接数 --> <!-- maxIdle,连接池中最多可空闲连接数 --> <!-- maxWait,连接池中连接用完时,新的请求等待时间,单位毫秒 --> <!-- username,password,数据库用户名/密码 --> <!-- driverClassName,jdbc驱动 --> <!-- url,数据库url地址 --> <Resource name="jdbc/opslocal" auth="Container" type="javax.sql.DataSource" username="scott" password="admin" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:orcl" maxActive="100000" maxIdle="4"/> <Resource name="jdbc/inslocal" auth="Container" type="javax.sql.DataSource" username="ins" password="ayw_ins1" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@132.228.213.137:1521:ossmob" maxActive="100000" maxIdle="4"/> <!--生产项目--> <Resource name="jdbc/cpflocal" auth="Container" type="javax.sql.DataSource" username="cpf_dispatch" password="cpf_dispatch" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@132.232.7.51:15211:orcl" maxActive="100000" maxIdle="4"/> </Context>